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一般用于更新数据.

  1. Get请求的数据会显示在URL(资源描述符)后面,而post不会
  2. Get请求的类型只能是文本、字符串,长度只能是255个字节;post请求类型没有限制也可以是二进制数据,长度也没有限制
  3. Get不安全,post安全
  4. 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地址不变

不能跨域

原文地址:https://www.cnblogs.com/snzd9958/p/10098907.html