get 和 post请求的区别
- get请求只能url编码, 而post支持多种编码方式
- get请求只接受ASCLL字符的参数, 而psot则没有限制
- get请求的参数通过url传送, 而post则是放在RequestBody中
- get请求相对于post更不安全, 因为参数是直接暴露在url中
- get请求会被浏览器主动缓存, 而post不会(除非自己手动设置)
- get请求在url中传参有长度限制, 而post则没有限制
- get产生的url地址可以被收藏, 而post不可以
- get请求的参数会被完整的保留在浏览器的历史记录里, 而post的参数则不会
- get在浏览器回退时是无害的, 而post会再次提交请求
转发(Forward) 和重定向(Redirect) 的区别
转发是服务端行为, 重定向是客户端行为。
- 从地址栏来说:
转发是服务器请求资源,服务器直接访问目标地址的url, 读取url的响应内容,并把这些内容发送给浏览器,但是浏览器并不知道这些内容是从哪里来的,所以它的地址栏显示的还是原来的地址。重定向是服务器根据逻辑, 发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的url。
- 从共享数据上来说
转发:转发页面和转发到的页面可以共享request中的数据。 重定向:不能共享数据
- 从运用地方来说
转发:一般用于用户登录,根据角色跳转到对应的模块。 重定向:一般用户用户注销登录,返回到主页面或者跳转到其他的网站等。
- 从效率上来说
转发效率高, 重定向效率低。
JSP和Servlet是什么关系
这个问题可以衍生到什么是Servlet?什么是JSP?它们的区别在哪儿?
Servlt是一种特殊的Java程序, 它运行于服务器的jvm中, 它能够依赖服务器向浏览器提供显示内容。 JSP本质上是Servlet的一种简易形式,它能被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。 Servlet和JSP最主要的区别在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。而JSP是Java和HTML可以组合成后缀名为.jsp的文件。
Servlet有哪些作用域
- request(请求作用域): 范围是从请求创建到请求结束这段时间, 一个请求涉及到的多个跳转都共用一个请求对象, 也就是在作用域范围内
- session(会话作用域): 范围在客户端和服务器端持续连接的过程, 可以理解为打开浏览器访问服务器端资源开始直到关闭浏览器的整个过程为一个会话域
- servletContext(全局作用域): 范围是服务器Web项目启动到停止, 任何客户端都可以在这个公共内存区域存取数据
Cookie和Session的区别
- session在服务端, cookie在客户端(浏览器)
- session默认存放在服务器的一个文件里(不是内存)
- session的运行依赖于session id,而session id是存放在cookie中的, 也就是说, 一旦浏览器禁用了cookie, session也就失效了(但是可以通过其它方式实现, 如在url中传递session id)
- session可以存放在文件, 数据库,或者内存中都可以
- 用户验证这种场合一般会用session
常见的HTTP响应状态码
- 200: 请求被正常处理
- 301: 永久性重定向
- 302: 临时重定向
- 400: 请求报文语法有误, 服务器无法识别
- 401: 请求需要认证
- 403: 请求的对应资源禁止被访问
- 404: 服务器无法找到对应资源
- 500: 服务器内部错误
- 503: 服务器正忙
如何防止表单重复提交
- 数据库主键唯一
- 提交成功后页面重定向
- 按钮提交后隐藏或不可再点击
- 页面生成token(标识), 页面表单提交携带token, 后台进行校验