servlet配置多个路径访问,包括注解和xml,javaweb之过滤器,

时间:2021-08-11
本文章向大家介绍servlet配置多个路径访问,包括注解和xml,javaweb之过滤器,,主要包括servlet配置多个路径访问,包括注解和xml,javaweb之过滤器,使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

过滤器

1.处理中文乱码

  • xml配置实现

  • web.xml

  • <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
             version="4.0">
    
    
        <!--注册过滤器-->
        <filter>
            <filter-name>CharacterEncodingFilte</filter-name>
            <filter-class>com.ding.filter.CharacterEncodingFilte</filter-class>
        </filter>
    
        <filter-mapping>
            <filter-name>CharacterEncodingFilte</filter-name>
            <!--只要是/servlet下的所有请求,都会走这个过滤器-->
            <url-pattern>/servlet/*</url-pattern>
        </filter-mapping>
    
    
        <servlet>
            <servlet-name>ShowServlet</servlet-name>
            <servlet-class>com.ding.servlet.ShowServlet</servlet-class>
        </servlet>
    
        <!--经过过滤器-->
        <servlet-mapping>
            <servlet-name>ShowServlet</servlet-name>
            <url-pattern>/servlet/show</url-pattern>
        </servlet-mapping>
    
        <!--不经过过滤器-->
        <servlet-mapping>
            <servlet-name>ShowServlet</servlet-name>
            <url-pattern>/show</url-pattern>
        </servlet-mapping>
        
        <welcome-file-list>
            <welcome-file>shouye.jsp</welcome-file>
        </welcome-file-list>
    
    
    
    
    </web-app>
    
  • Filter

  • package com.ding.filter;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    /**
     * @Description 过滤器处理乱码
     * @Author 丁帅帅
     * @Date 21/08/10 10:02
     * @Version 1.0
     */
    public class CharacterEncodingFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest Request, ServletResponse Response, FilterChain filterChain) throws IOException, ServletException {
                   //处理中文乱码
                    Request.setCharacterEncoding("UTF-8");
                    Response.setCharacterEncoding("UTF-8");
                    Response.setContentType("text/html;charset=utf-8");
    
                    filterChain.doFilter(Request,Response);
        }
    
        @Override
        public void destroy() {
    
        }
    }
    
    
  • servlet

  • package com.ding.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Description TODO
     * @Author 丁帅帅
     * @Date 21/08/10 10:11
     * @Version 1.0
     */
    public class ShowServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            resp.getWriter().write("你好 ,世界!");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doGet(req, resp);
        }
    }
    
    
  • 注解实现

  • Filter

  • package com.ding.filter;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import java.io.IOException;
    
    /**
     * @Description 过滤器处理乱码
     * @Author 丁帅帅
     * @Date 21/08/10 10:02
     * @Version 1.0
     */
    @WebFilter("/fun/*")
    public class CharacterEncodingFilter_2 implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest Request, ServletResponse Response, FilterChain filterChain) throws IOException, ServletException {
                   //处理中文乱码
                    Request.setCharacterEncoding("UTF-8");
                    Response.setCharacterEncoding("UTF-8");
                    Response.setContentType("text/html;charset=utf-8");
    
                    filterChain.doFilter(Request,Response);
        }
    
        @Override
        public void destroy() {
    
        }
    }
    
    
  • package com.ding.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Description TODO
     * @Author 丁帅帅
     * @Date 21/08/10 10:11
     * @Version 1.0
     */
    @WebServlet(urlPatterns = {"/fun","/funn"})
    public class ShowServlet_2 extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
            resp.getWriter().write("你好 ,世界!");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            super.doGet(req, resp);
        }
    }
    
    
  • pom

  • <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>org.example</groupId>
        <artifactId>javaweb-filter</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>war</packaging>
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
        </properties>
    
        <dependencies>
            <!-- servlet3.0规范的坐标 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.1.0</version>
                <scope>provided</scope>
            </dependency>
    
            <!--jsp坐标-->
            <dependency>
                <groupId>javax.servlet.jsp</groupId>
                <artifactId>jsp-api</artifactId>
                <version>2.1</version>
                <scope>provided</scope>
            </dependency>
            <!-- JSTL表达式的依赖 -->
            <dependency>
                <groupId>javax.servlet.jsp.jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <!-- standard标签库 -->
            <dependency>
                <groupId>taglibs</groupId>
                <artifactId>standard</artifactId>
                <version>1.1.2</version>
            </dependency>
            <!-- 数据库 -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.47</version>
            </dependency>
        </dependencies>
    
    
    
        <!--构建-->
        <build>
            <!--设置插件-->
            <plugins>
                <!--具体的插件配置-->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.1</version>
                    <configuration>
                        <port>80</port>
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    
    </project>
    

2.验证用户登录

用户登录之后才能进入主页!用户注销后就不能进入主页了!

  • login

  • <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>登录</title>
    </head>
    <body>
    <h1>登录</h1>
    <form action="/servlet/login">
        <input type="text" name="username">
        <input type="submit">
    </form>
    </body>
    </html>
    
    
  • error

  • <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>error</title>
    </head>
    <body>
    <h1>错误</h1>
    <h3>没有权限,或用户名错误</h3>
    
    <a href="/login.jsp">返回登录页面</a>
    </body>
    </html>
    
    
  • success

  • <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>主页</h1>
    <p>
        <a href="/servlet/logout">注销</a>
    </p>
    </body>
    </html>
    
    
  • LoginFilter

  • package com.ding.filter;
    
    import com.ding.util.Constant;
    
    import javax.servlet.*;
    import javax.servlet.annotation.WebFilter;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    /**
     * @Description TODO
     * @Author 丁帅帅
     * @Date 21/08/11 00:14
     * @Version 1.0
     */
    @WebFilter("/sys/*")
    public class LoginFilter implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
            //如果没有登录,则重定向到错误页面
            Object userSession = request.getSession().getAttribute(Constant.USER_SESSION);
            if (userSession == null) {
                response.sendRedirect("/error.jsp");
            }
            chain.doFilter(req, resp);
        }
    
        @Override
        public void destroy() {
    
        }
    }
    
    
  • LoginServlet

  • package com.ding.servlet;
    
    import com.ding.util.Constant;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Description TODO
     * @Author 丁帅帅
     * @Date 21/08/10 23:50
     * @Version 1.0
     */
    @WebServlet("/servlet/login")
    public class LoginServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //获取前端请求的参数
            String username = req.getParameter("username");
            if (username.equals("admin")) {
                //登录成功,保存sessionId到session中
                req.getSession().setAttribute(Constant.USER_SESSION, req.getSession().getId());
                //重定向到成功页面
                resp.sendRedirect("/sys/success.jsp");
            } else {
                //登录失败,重定向到错误页面
                resp.sendRedirect("/error.jsp");
            }
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
  • Logout

  • package com.ding.servlet;
    
    import com.ding.util.Constant;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    /**
     * @Description TODO
     * @Author 丁帅帅
     * @Date 21/08/11 00:18
     * @Version 1.0
     */
    @WebServlet("/servlet/logout")
    public class LogoutServlet extends HttpServlet {
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            Object userSession = req.getSession().getAttribute(Constant.USER_SESSION);
            if (userSession != null) {
                //注销登录
                req.getSession().removeAttribute(Constant.USER_SESSION);
                //重定向回登录页面
                resp.sendRedirect("/login.jsp");
            }
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }
    
  • util

  • package com.ding.util;
    
    /**
     * @Description 常量单独放到一个类中,容易后期更改
     * @Author 丁帅帅
     * @Date 21/08/11 00:19
     * @Version 1.0
     */
    public class Constant {
        private Constant() {
        }
    
        public static final String USER_SESSION = "USER_SESSION";
    }
    
    
世界不会因为你的疲惫,而停下它的脚步

原文地址:https://www.cnblogs.com/dss-99/p/15127307.html