Servlet生命周期,请求转发和重定向

Servlet生命周期

1.tomcat容器自动示例化servlet示例永远只有一个实例默认在第一次访问时实力化 配置了<load-on-startup>0以上任何值表示启动服务是实例化,否则第一次请求时

(:配置<load-on-startup-startup>web.xml中的<servlet-class>下面添加)

Cycleservlet c=new cycleservlet();

2.tomcat容器自动调用init方法进行简单初始化c.init()

3.service方法(请求的入口方法根据请求的类型调用doGetdoPost就是服务的方法没发起一次请求就会调用一次)

4.destroy方法当容器被关闭或者项目被重新加载时自动销毁servlet

Init():一般用于进行初始化工作永远只会被调用一次

ServletContext(全局)

ServletContext接口定义了一个Servlet环境对象,提供了访问WEB程序的背景信息。

Servlet容器在启动时加载WEB应用,并为每个WEB应用创建唯一的一个ServletContext对象,可以把该对象看做是一个WEB的应用程序,在服务器端共享内存。

ServletContext对象只在WEB应用时被关闭的时候才销毁,不同的WEB应用,ServletContext各自独立存在,

Servlet中,我们可以通过以下代码得到具体的ServletContext对象,等价于JSP中的Application隐式对象

ServletContext application=this.getServletContext()

1.servlet之间共享数据(同一个项目)

SetAttribute(“sex”,”男”);

2.初始化参数

web.xml中配置

<context-param>

<param-name>键</param-name>

<param-value>值</param-value>

</context-param>


获取web.xml中配置的参数

String driverClass=sc.getInitParameter("driverClass");

3.读取web资源

InputStream is=sc.getResourceAsStream("/my.txt");

BufferedReader br=new BufferedReader(new InputStreamReader(is,"GBK"));

String str=br.readLine();

out.println("获取资源内容:"+str);

br.close();

is.close();


4.打印日志

sc.log("执行完毕");

Servlet config(局部)

在web.xml中在自己的servlet下面配置

<init-param>

    	<param-name>键</param-name>

    	<param-value>值</param-value>

</init-param>


请求转发原理

 

重定向原理

 

请求转发和重定向的区别:

转发不需要上下文路径,重定向必须加上下文路径

1.调用方式不同:转发request.getRequestDispatcher("/lesson02/detail.html").forward(request, response)

重定向:

response.setHeader("refresh", "5;url="+request.getContextPath()+"/index.html");

2.请求次数不同:转发一次重定向2

3.跳转方式不同:转发服务器内部跳转浏览器不知道 重定向告知浏览器302设置location发生的二次跳转

4.地址不同:转发地址不变,重定向变化为第二次地址

5.参数不同:转发保留参数重定向参数丢失

6.跨越不同:转发只能在同一个项目中的url跳转重定向可以跨越

设置servlet中的编码问题:

servlet.xml文件中 <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>加URIEncoding=”UTF-8”

猜你喜欢

转载自blog.csdn.net/XCL18215166914/article/details/78999686