Servlet
1.Servlet作为web层框架,是单例的,线程不安全。
不应当在Servlet中创建成员变量,可能会存在一个线程对这个成员变量进行写操作,另一个线程进行读操作,造成数据不一致等一些问题。
解决方法:如果要创建成员变量以供方法使用,可以创建有状态的成员变量。在成员变量的实体类中,有get方法用来获取值,但是不提供set方法。
2.实现Servlet的方式
三种:
i.实现javax.servlet.Servlet接口
如果实现Servlet接口,需要实现里面的所有5个方法;
3个生命周期方法:init(ServletConfig config),service(ServletRequest req,ServletResponse res),destroy();
其中,init方法只会在Servlet被创建后调用一次,destroy方法只会在Servlet被销毁前调用一次;service方法在每次处理请求时调用。
2个用于获取Servlet信息和配置的方法,getServletInfo(),getServletConfig()
ii.继承javax.servlet.GenericServlet类
GenericServlet提供了Servlet的基本实现,继承它必须要重写Service方法。
iii.继承javax.servlet.http.HttpServlet类
HttpServlet更像是扩展了GenericServlet,并且提供了基于Http协议的实现,它先实现了GenericServlet的Service方法,然后调用重载的Service方法,参数转化为HttpServletReqeuest,HttpServletResponse。
3.Servlet生命周期
当服务器收到第一个请求后,创建该Servlet类的对象;
执行init()方法;
调用Servlet实现类的Service方法,处理请求,分析Http请求的方式时GET或者POST,调用相应的doGet和doPost方法处理。
最后当服务器关闭时销毁Servlet前调用destroy();
4.让服务器启动时即创建Servlet
在web.xml中的<servlet>标签中配置<load-on-startup>标签,标签中给值需要非负整数。
5.ServletContext
一个项目只有一个ServletContext对象,即application。
可以在多个Servlet对象中获取这个唯一对象,使用它可以给多个Servlet传递数据,即上下文对象。
在Servlet中通过调用getServletContext可以获取Servlet上下文对象。
ServletContext application = this.getServletContext();
6.response通过设置状态码,调用setHeader方法设置头为location重定向。
doGet(...){
response.setHeader("Location","/工程名/Servlet类名");
response.setStatus(302);
}
JSP
1.原理:
1.当JSP页面第一次被访问时,服务器会把jsp编译为java文件;
2.然后把java文件编译为class文件;
3.创建这个类的对象;
4.然后调用这个类的service方法;
5.当再次访问时直接调用它的service方法;
2.JSP9个内置对象
reqeust,response,pageContext,out,page,config,session,application,Exception
3.配置Session最大不活动时间
session最大不活动时间默认是30分钟。
在web.xml中配置最大不活动时间
<session-config>
<session-timeout>30</session-timeout>
</session-config>
4.session生命周期
客户端第一调用getSession方法时,服务器创建session并将sessionID保存在客户端浏览器的Cookies中;
每次调用时通过Cookies中的sessionID查找相应的session;
当客户端关闭浏览器后,cookies销毁,浏览器中的sessionID丢失;
服务器中的session到达最大不活动时间后被销毁;