1.定义:Sevlet(服务器端小程序)是使用java语言编写的服务器端程序,可以向jsp一样生成动态web页面。Sevlet主要运行在服务器端,并用服务器调用执行,是一种按照servlet标准开发的类。
2.Servlet带给开发人员的最大的好处是:它可以处理客户端传来的HTTP请求,并返回一个响应。
3.Servlet将按照如下步骤进行处理:
(1)客户端(很可能是web浏览器)通过Http提出请求
(2)Web服务器接收请求并将其发给Servlet。
(3)Servlet程序将接收该http请求并执行某种处理。
(4)Servlet会将处理后的结果向web服务器返回应答。
(5)Web服务器将从Servlet收到的应答发回给客户端。
4.在整个程序中最重要的就是Servlet接口,在此接口下定义了GenericSevlet的子类但一般不会直接继承此类,而是根据所使用的协议选择GenericServlet的子类继承。
HttpServeletRequest和HttpServeletResponse,用来接收和回应用户的请求。
5.Servlet的生命周期全过程:
(1)加载:把servlet.class文件load进来放到web容器里。
(2)实例化:new 一个servlet对象出来。
(3)初始化:web容器调用init()方法初始化这个对象。
初始化的目的是为了让Servlet在处理客户端请求前完成一些初始化的工作,如建立数据库的连接、读取资源文件信息等。
(4)处理服务:servlet将调用service方法,对于httpServlet将会调用doget()方法或者doPost()方法进行处理。
(5)销毁:当web容器关闭时或者检测到要从容器被删除时,会自动调用destroy方法,以便让该实例释放掉所占用的内存。
对应的代码:
(1)publicTestLifeCircleServlet() { }
(2)public void init(ServletConfig config) throwsServletException {}
(3)public void doGet(HttpServletRequestrequest, HttpServletResponse response)throws ServletException, IOException {}
理解servelt的生命周期测试代码总结:
(1)测试这几个方法先后的执行顺序,经过测试先构建对象
(2)只是构建一个对象,不管你访问多少次,只是由这一个对象提供服务,在初始化,最后调用doGet方法
(3)servlet不管你访问多少次,只构建一个对象,访问几次调用几次doGet()方法,init方法只执行一次,第一次初始化的时候执行
(4)当webapp退出时,会调用destroy方法,也就是说servlet对象真正的从内存中消失时,才会调用destroy方法
(5)ServletConfig中的config对象可以读取web.xml中的初始化参数,得到servlet的配置信息
(6)怎样在浏览器中对servlet程序进行访问:
<servlet> <servlet-name>hello</servlet-name>
<servlet-class>hello</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
在浏览器输入:http://localhost:8080/Filter/hello对servlet进行访问
6.Servlet跳转:
1.客户端跳转:在Servlet中要想进行客户端跳转,(地址栏会发生变化)直接使用HttpServletResponse接口的sendRedirect()方法即可。(但是要注意的是,此跳转只能传递session范围的属性,而无法传递request范围的属性,这是因为request属性范围只有在服务器端跳转中才可以使用)。
2.服务器端跳转:在Servlet中没有像JSP中的<jsp:forward>指令,所以如果要想执行服务器端跳转,就必须依靠RequestDispatcher接口完成。
提供两方法:forword()和include()可完成跳转实现。
但是还不够:如果要想使用此接口还要使用ServletRequest接口进行方法的实例化。
ServletRequest接口进行方法的实例化:Public RequestDispatchergetRequestDispatcher(String path){}
服务器端跳转之后,页面路径不会发生改变,而且此时可以在跳转后的JSP文件中接收到session及request范围的属性。