Servlet学习笔记

0.Servlet用于处理客户端(浏览器)传到Web服务器上的Http请求,并返回响应给Web服务器,最后Web服务器再发回客户端 .

Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求.

Servlet是线程不安全的。不会同步阻塞。

1.一般的Servlet要继承HttpServlet,重写doGet()、doPost()等方法,然后在web.xml里面配置。

HttpServlet类继承GenericServlet类,GenericServlet类实现Servlet接口

HttpServletRequest类实现ServletRequest类

客户机和服务器之间进行请求-响应时,get表示从服务器获取数据,post表示向服务器提交数据
2.web.xml一般放在WEB-INF文件夹下面。

web-inf目录是不对外开放的,外部没办法直接访问到(即不能通过URL访问)。

所有只能通过映射来访问,比如映射为一个action或者servlet通过服务器端跳转来访问到具体的页面。这样可以限制访问,提高安全性。

每次修改web.xml,都要重新启动服务器,这样配置才能生效.

web.xml如下所示:

    <servlet>
        <servlet-name>HttpSessionDemo</servlet-name>
        <servlet-class>com.servlet.HttpSessionDemo</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HttpSessionDemo</servlet-name>
        <url-pattern>/session</url-pattern>
    </servlet-mapping>

servlet-name:servlet名称,在<servlet>和<servlet-mapping>应保持一致

servlet-class:servlet的包名.类名

url-pattern:输入到浏览器便于访问的虚拟目录

welcome-file-list:表示首页,默认是index.jsp

 

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>


3.Servlet生命周期:加载、初始化(init方法)、服务(doGet()和dePost()方法)、销毁(destroy())

Servlet的生命周期分为5个阶段:加载、创建、初始化、处理客户请求、卸载。
(1)加载:容器通过类加载器使用servlet类对应的文件加载servlet
(2)创建:通过调用servlet构造函数创建一个servlet对象
(3)初始化:调用init方法初始化
(4)处理客户请求:每当有一个客户请求,容器会创建一个线程来处理客户请求。

服务阶段,执行service()方法,根据用户请求的方法,执行相应的doGet()或是doPost()方法
(5)卸载:调用destroy()方法让servlet自己释放其占用的资源
destroy()方法仅执行一次,即在服务器停止且卸载Servlet时执行该方法

4.作用域分为:page、request 、session 、application

常用方法:

request:getParameter()、request.setAttribute()、request.getAttribute()

getAttribute和getParameter区别:

request.getAttribute()方法返回request范围内存在的对象,而request.getParameter()方法是获取http提交过来的数据(比如jsp表单提交的数据)。

客户端跳转和服务器跳转区别:

客户端跳转:resp.sendRedirect()  ,跳转后浏览器地址栏改变   

服务器跳转:req.getRequestDispatcher().forward(req,resp),跳转后浏览器地址栏不变。
5.Servlet分类:简单Servlet、过滤器Filter、监听器Listener
6.Filter,过滤器。可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。

它使用户可以改变一个request和修改一个response。

Filter不是一个servlet,它不能产生一个response,它能够在一个request到达servlet之前预处理request,也可以在response离开servlet时处理response.

Filter接口定义了三个方法: init() ,  doFilter(), destroy()

FilterChain : 过滤链

init()和destroy()方法只会被调用一次,而且在程序加载或者卸载时调用。而doFilter()方法每次有客户端请求都会被调用一次。

filterChain.doFilter(request,response)将request递交给FilterChain中的下一个Filter,如果所有的Filter都走完了则交给Servlet处理。

 

Filter可用于编码过滤,日志过滤,权限验证,内容替换,文件上传

过滤器的类,需要implements接口Filter,重写doFilter()方法。然后在web.xml里面配置,如下所示:

    <filter>
        <filter-name>ImageRedicrectFilter</filter-name>
        <filter-class>com.filter.ImageRedicrectFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>ImageRedicrectFilter</filter-name>
        <url-pattern>/images/*</url-pattern>
    </filter-mapping>

 7.监听器Listener类似于java swing、安卓界面中的Listener监听事件。

Listener用于监控context,session,request相关的事件.

监听器的类需要实现Listener接口,当触发事件时,就会调用相应的Listener方法.

常见的Listener接口有ServletContextListener

Listener同样需要在web.xml中进行配置.

    <listener>
        <listener-class>
            com.listener.ServletContextListenerDemo
        </listener-class>
    </listener>

 8.forward和redirect的区别?

forward,服务器获取跳转页面内容传给用户,用户地址栏不变
redirect,是服务器向用户发送转向的地址,redirect后地址栏变成新的地址

posted on 2017-03-16 22:53  乐之者v  阅读(191)  评论(0编辑  收藏  举报

导航