Servlet生命周期、常用提交方式、中文乱码问题、重定向和请求转发
//当前工作空间绝对路径
System.getProperty("user.dir");
一个Servlet的生命周期由 实例化,初始化,提供服务,销毁,被回收 几个步骤组成
Serlvet构造方法 只会执行一次,所以Serlvet是单实例的
init初始化 只会执行一次
在如下几种情况下,会调用destroy()
1. 该Servlet所在的web应用重新启动
2. 关闭tomcat的时候 destroy()方法会被调用
提交方式:
哪些是get方式?
form默认的提交方式
如果通过一个超链访问某个地址
如果在地址栏直接输入某个地址
ajax指定使用get方式的时候
哪些是post方式?
在form上显示设置 method="post"的时候
ajax指定post方式的时候
Http中get和post请求的区别
Http基本的四种请求方式get、post、put、delete对应资源的查、改、增、删,get一般用于获取/查询信息,而post一般用于更新数据.
- Get请求的数据会显示在URL(资源描述符)后面,而post不会
- Get请求的类型只能是文本、字符串,长度只能是255个字节;post请求类型没有限制也可以是二进制数据,长度也没有限制
- Get不安全,post安全
- Get可以在客户端缓存,post不能缓存
service()
LoginServlet继承了HttpServlet,同时也继承了一个方法:service(HttpServletRequest 。
在执行doGet()或者doPost()之前,都会先执行service(),由service()方法进行判断,到底该调用doGet()还是doPost() HttpServletResponse )
有时候也会直接重写service()方法,在其中提供相应的服务,就不用区分到底是get还是post了。
比如把登录的LoginServlet,改为提供service方法,也可以达到相同的效果。
Servlet 的中文问题
// 接收的消息的字符集定义为utf-8
request.setCharacterEncoding("utf-8");
// 返回的响应消息的字符集定义为utf-8
response.setCharacterEncoding("utf-8");
// 返回的消息的格式定义为html,同时页面的字符集也设置为utf-8
response.setHeader("content-type", "text/html;charset=utf-8");
跳转
服务端跳转,请求转发
request.getRequestDispatcher("test.html(网页)").forward(request, response);
include方法则是包含模式,当前servlet中输出的内容依然存在
request.getRequestDispatcher("test2.html(网页)").include(request, response);
服务端跳转,浏览器的地址不会变
客户端跳转,重定向: 302状态码
浏览器地址发生变化
302 表示临时跳转
response.sendRedirect("fail.html");
301 表示永久性跳转
response.setStatus(301);
response.setHeader("Location", "fail.html");
301和302的区别主要在搜索引擎对页面排名的时候有影响,这是属于SEO范畴的概念
重定向与请求转发的区别
重定向
两次请求两次相应
URL地址改变
可以跨域(跨服务器)
请求转发
一次请求一次响应,效率更高
URL地址不变
不能跨域