zoukankan      html  css  js  c++  java
  • servlet基础及过滤器简介

    1. Servlet是运行在web服务器的Java应用程序,可以生成动态的web页面,属于客户与服务器响应的中间层。Jsp在底层就是一个servlet。
    2. 编写servlet

    servlet中的方法有以下几种:


    1. init()方法。
      一个servlet在服务器上最多只会驻留一个实例。所以第一次调用servlet时,将会创建一个实例,在实例化过程中,HttpServlet中的init()方法会被调用,因此可以将一些初始化代码放在该函数内。

    2. doGet()/doPost()/service()方法

      • doGet()方法在以get方式请求servlet时运行。常见get请求方式有链接、get方式的表单提交、直接访问servlet。
      • doPost()方法是在以post方式请求servlet时运行的。常见的post请求为post方式表单提交。
      • 事实上,客户端对servlet发送一个请求过来,服务器端将会开启一个线程,该线程调用service方法,service方法根据收到的客户端的请求类型来决定是调用doGet()方法还是doPost方法,但是一般不用覆盖service()方法,使用doGet()与doPost()方法同样可以达到处理的目的。
      • destory()方法,destory()方法在servlet实例消亡的时候自动调用。在web服务器运行servlet实例的时候,因为一些原因servlet对象会消亡,但是在servlet消亡之前还必须进行某些操作,例如:释放数据库连接以节省资源等,这个时候就需要重写destory()方法。

    //让创建的类继承HttpServlet,重写其中的方法。
    package servlet;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     *@author xpengfei
     *@creat  5:17:08 PM   May 16, 2017
     */
    public class DealWithServlet extends HttpServlet {
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
    //      super.doGet(req, resp);
            doPost(req, resp);
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp)
                throws ServletException, IOException {
            // TODO Auto-generated method stub
    //      super.doPost(req, resp);
            String studentName=req.getParameter("studentName");
            System.out.println("学生姓名:"+studentName);
    
        }
    }
    
    1. web.xml中servlet的配置,为防止中文乱码问题的出现,可以使用过滤器进行过滤。
      web.xml文件
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
      <display-name>servletLearning</display-name>
      <!-- 设置全局参数,相当于全局变量,所有的servlet都可以访问 -->
      <context-param>
        <!-- 变量名 -->
        <param-name>name</param-name>
        <!-- 变量值 -->
        <param-value>xpf</param-value>
      </context-param>
    
    
      <!--      欢迎界面的配置      -->
      <welcome-file-list>
        <!-- 所要设置的欢迎界面  -->
        <welcome-file>validate.jsp</welcome-file>
        <welcome-file>welcome.jsp</welcome-file>
        <welcome-file>Filter.jsp</welcome-file>
      </welcome-file-list>
    
      <!--          servlet的配置       -->
      <servlet>
        <!--        给servlet取得名字         -->
        <servlet-name>WelcomeToServlet</servlet-name>
        <!--        servlet对应的包名及类名  -->
        <servlet-class>servlet.WelcomeServlet</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <!--        给servlet取的名字     -->
        <servlet-name>WelcomeToServlet</servlet-name>
        <!--    servlet类所在的目录    -->
        <url-pattern>/servlet/WelcomeServlet</url-pattern>
      </servlet-mapping>
    
    
      <!-- 配置InitServlet类的servlet -->
      <servlet>
        <servlet-name>Initservlet</servlet-name>
        <servlet-class>servlet.InitServlet</servlet-class>
        <!-- 给该servlet设置局部参数 -->
        <init-param>
            <param-name>nickname</param-name>
            <param-value>fei</param-value>
        </init-param>
      </servlet>
      <servlet-mapping>
        <servlet-name>Initservlet</servlet-name>
        <url-pattern>/servlet/InitServlet</url-pattern>
      </servlet-mapping>
    
      <servlet>
        <servlet-name>DealWithServlet</servlet-name>
        <servlet-class>servlet.DealWithServlet</servlet-class>
      </servlet>
      <servlet-mapping>
        <servlet-name>DealWithServlet</servlet-name>
        <url-pattern>/servlet/DealWithServlet</url-pattern>
      </servlet-mapping>
    
      <!-- 配置过滤器(过程和配置servlet是一样的,,过滤器也是一种servlet) -->
      <filter>
        <!--  设置过滤器的名字 -->
        <filter-name>EncodingFilter</filter-name>
        <!-- 设置类路径 -->
        <filter-class>servlet.EncodingFilter</filter-class>
      </filter>
      <filter-mapping>
        <filter-name>EncodingFilter</filter-name>
        <!-- 用于指定过滤模式
            1.  *符号代表所有文件
            2. 写出某个servlet或jsp的路径的时候,是过滤那个指定的servlet或者jsp
            3. 写出一个 目录/* 是对指定目录下的所有文件、资源进行过滤
            说明:<url-pattern> 内部如果以/开头,这个/表示的是虚拟目录根目录;
        -->
        <url-pattern>/*</url-pattern>
      </filter-mapping>
    </web-app>

    过滤器代码

    package servlet;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    /**
     *@author xpengfei
     *@creat  5:28:28 PM   May 16, 2017
     */
    public class EncodingFilter implements Filter{
        @Override
        public void init(FilterConfig arg0) throws ServletException {
            // TODO Auto-generated method stub
    
        }
        @Override
        public void doFilter(ServletRequest request, ServletResponse response,
                FilterChain chain) throws IOException, ServletException {
            // TODO Auto-generated method stub
            request.setCharacterEncoding("utf-8");
            chain.doFilter(request, response);
        }
        @Override
        public void destroy() {
            // TODO Auto-generated method stub
    
        }
    
    }

    过滤器的配置有以下几个步骤


    1. 用元素定义过滤器,该标签下有两个必要元素

      • 元素,用来设定过滤器的名字。
      • 元素,用来设定过滤器的类路径
    2. 用配置过滤器的映射
      在元素中,用来设定过滤器的名字,另外,配置过滤器的映射主要的是元素,用于指定过滤模式。常见的过滤模式有以下三种:

      • 过滤所有文件
     <filter-mapping>
         <filter-name>FilterName</filter-name>
         <url-pattern>/*</url-pattern>
     </filter-mapping>
    • 过滤一个或者多个servlet(jsp)
     <filter-mapping>
         <filter-name>FilterName</filter-name>
         <url-pattern>要过滤的servlet或jsp的路径</url-pattern>
     </filter-mapping>
    
    <filter-mapping>
         <filter-name>FilterName</filter-name>
         <url-pattern>要过滤的servlet或jsp的路径</url-pattern>
     </filter-mapping>
    
    • 过滤一个或者多个文件目录
    <filter-mapping>
         <filter-name>FilterName</filter-name>
         <url-pattern>要过滤的文件路径</url-pattern>
     </filter-mapping>
    //下面的代码是过滤path目录下的所有资源
    <filter-mapping>
         <filter-name>FilterName</filter-name>
         <url-pattern>/path/*</url-pattern>
     </filter-mapping>

  • 相关阅读:
    古谚、评论与论断、名篇与名言
    重读《西游记》
    重读《西游记》
    命名之法 —— 时间、季节、地点
    命名之法 —— 时间、季节、地点
    文言的理解 —— 古时的称谓、别称、别名
    文言的理解 —— 古时的称谓、别称、别名
    Oracle GoldenGate for Oracle 11g to PostgreSQL 9.2.4 Configuration
    瀑布 敏捷 文档
    POJ 1325 ZOJ 1364 最小覆盖点集
  • 原文地址:https://www.cnblogs.com/xpfei/p/7450804.html
Copyright © 2011-2022 走看看