过滤器与监听器 ----【javaweb-10】
2021-04-04 02:27
标签:nts on() setattr 创建 des form 次数 red img 过滤器:阻碍一些不符合要求的数据。 常用在处理中文乱码、登录验证等 案例:我们将会通过Filter处理中文乱码 代码展示: 在这里,要注意继承的Filter接口是servlet的!以及三个固定的方法要写,还有filterChain也要写(作为中间商) 在web.xml中注册filter 这里注意 1.2、简单的登录案例 首先,我们先编写一个静态初始化参数,用来进行登录时对用户的验证 然后,我们编写过滤器:用来建议用户名是否为空 之后,我们开始依次编写Servlet(登录检验、注销后的跳转) 注册Servlet和Filter 最后,依次编写网页(登录网页、登录后的网页、错误网页) 运行Tomcat后,结果展示: 1、登录成功的效果
2、登录失败的效果
监听器用的比较少,这里用一个简单的案例来展示一下即可。 案例:监听访问该网页的次数,并打印内容次数至网页上 代码展示: 注册listener(这里注意,注册只需要写代码的路径即可) 网页设计 结果展示:
过滤器与监听器 ----【javaweb-10】 标签:nts on() setattr 创建 des form 次数 red img 原文地址:https://www.cnblogs.com/Charles-H/p/Learning_Web_10.htmlFilter && Listener
1、过滤器
1.1、初步使用Filter
package com.charles.fillter;
import javax.servlet.*;
import java.io.IOException;
public class CharacterEncodingFillter implements Filter {
// 初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("CharacterEncoding初始化");
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("执行前");
// 让我们的请求继续走,不写则停下(中间商)
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("执行后");
}
// 销毁
public void destroy() {
System.out.println("CharacterEncoding销毁");
}
}
filter>
filter-name>CharacterEncodingFillterfilter-name>
filter-class>com.charles.fillter.CharacterEncodingFillterfilter-class>
filter>
filter-mapping>
filter-name>CharacterEncodingFillterfilter-name>
url-pattern>/servelet/*url-pattern>
filter-mapping>
package com.charles.util;
public class Constant {
public final static String Servelet_Name = "Servelet_Name";
}
package com.charles.fillter;
import com.charles.util.Constant;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class SysFillter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
if (request.getSession().getAttribute(Constant.Servelet_Name) == null){
response.sendRedirect("/error.jsp");
}
filterChain.doFilter(request,response);
}
public void destroy() {
}
}
package com.charles.servelet;
import com.charles.util.Constant;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServelet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
if (username.equals("admin")){ // 登陆成功
req.getSession().setAttribute(Constant.Servelet_Name, 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);
}
}
package com.charles.servelet;
import com.charles.util.Constant;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginOut extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object attribute = req.getSession().getAttribute(Constant.Servelet_Name);
if (attribute != null){
req.getSession().removeAttribute(Constant.Servelet_Name);
resp.sendRedirect("/Login.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
servlet>
servlet-name>LoginServeletservlet-name>
servlet-class>com.charles.servelet.LoginServeletservlet-class>
servlet>
servlet-mapping>
servlet-name>LoginServeletservlet-name>
url-pattern>/servlet/loginurl-pattern>
servlet-mapping>
servlet>
servlet-name>LoginOutServletservlet-name>
servlet-class>com.charles.servelet.LoginOutservlet-class>
servlet>
servlet-mapping>
servlet-name>LoginOutServletservlet-name>
url-pattern>/servlet/loginouturl-pattern>
servlet-mapping>
filter>
filter-name>SysFilterfilter-name>
filter-class>com.charles.fillter.SysFillterfilter-class>
filter>
filter-mapping>
filter-name>SysFilterfilter-name>
url-pattern>/sys/*url-pattern>
filter-mapping>
@ page contentType="text/html;charset=UTF-8" language="java" %>
html>
head>
title>Titletitle>
head>
body>
form action="/servlet/login" method="post">
用户名:input type="text" name="username">
input type="submit" value="登陆">
form>
body>
html>
@ page contentType="text/html;charset=UTF-8" language="java" %>
html>
head>
title>Titletitle>
head>
body>
h1>登陆成功!!h1>
p> a href="/servlet/loginout">注销a> p>
body>
html>
@ page contentType="text/html;charset=UTF-8" language="java" %>
html>
head>
title>Titletitle>
head>
body>
h1>登陆失败!h1>
h3>失败原因:1.无权限 2.用户名错误h3>
a href="Login.jsp">返回登录页面a>
body>
html>
2、监听器
package com.charles.listener;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
// 统计网站在线人数: 方法:统计session
public class OnlineCountListener implements HttpSessionListener {
// 创建session监听
public void sessionCreated(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
Integer onlineCount =(Integer) ctx.getAttribute("OnlineCount");
if (onlineCount == null){
onlineCount = new Integer(1);
} else {
int count = onlineCount.intValue();
onlineCount = new Integer(count++);
}
ctx.setAttribute("onlineCount", onlineCount);
}
// 销毁session监听
public void sessionDestroyed(HttpSessionEvent se) {
ServletContext ctx = se.getSession().getServletContext();
Integer onlineCount =(Integer) ctx.getAttribute("OnlineCount");
if (onlineCount == null){
onlineCount = new Integer(0);
} else {
int count = onlineCount.intValue();
onlineCount = new Integer(count--);
}
ctx.setAttribute("onlineCount", onlineCount);
}
}
listener>
listener-class>com.charles.listener.OnlineCountListenerlistener-class>
listener>
@ page contentType="text/html;charset=UTF-8" language="java" %>
html>
head>
title>$Title$title>
head>
body>
h1>当前有 span style="color: red">=this.getServletConfig().getServletContext().getAttribute("onlineCount")%>span>人在线h1>
body>
html>
文章标题:过滤器与监听器 ----【javaweb-10】
文章链接:http://soscw.com/index.php/essay/71915.html