过滤器
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"; }