zoukankan      html  css  js  c++  java
  • 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后地址栏变成新的地址
  • 相关阅读:
    理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,是理解消息的关键)
    Javascript 的addEventListener()及attachEvent()区别分析
    鼠标拖拽
    鼠标右键菜单
    keydown
    一串跟随鼠标的DIV
    event对象和事件冒泡
    发表说说
    文档流
    CSS3 @keyframes 规则
  • 原文地址:https://www.cnblogs.com/expiator/p/6562124.html
Copyright © 2011-2022 走看看