• 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>

  • 相关阅读:
    Java中XML的四种解析方式(二)
    Java中XML的四种解析方式(一)
    Java反射机制
    创建线程的三种方式(Thread、Runnable、Callable)
    GBK和UTF-8的区别
    selenium的其他方法
    selenium
    XPath
    mysqldump / MySQL 备份与恢复语句
    MySQL 增删改查语句/SELECT INSET INTO UPDATE
  • 原文地址:https://www.cnblogs.com/xpfei/p/7450804.html
Copyright © 2020-2023  润新知