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方法(请求的入口方法根据请求的类型调用doGet和doPost就是服务的方法没发起一次请求就会调用一次)
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”