java web-04-filter
Filter:过滤器,用来过滤网站的数据;
- 处理中文乱码
- 登录验证......
1、简单介绍
public class EncodingFilter implements Filter {
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化");
}
//filterChain:过滤链
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
System.out.println("EncodingFilter执行前");
chain.doFilter(request,response);
System.out.println("EncodingFilter执行后");
}
//销毁
public void destroy() {
System.out.println("销毁");
}
}
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("hello servlet!!! 你好,服务!!!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
<servlet>
<servlet-name>helloservlet</servlet-name>
<servlet-class>com.feng.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloservlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>helloservlet</servlet-name>
<url-pattern>/servlet/hello</url-pattern>
</servlet-mapping>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.feng.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
分别访问发现什么区别!!!
2、例题
登录页面:
<head>
<title>login</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="username">
<input type="submit">
</form>
</body>
判断登录用户:
public class LoginServlet extends HelloServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
if (username.equals("admin")){
req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
resp.sendRedirect("/sys/success.jsp");
}else {
resp.sendRedirect("/error/error.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
过滤器:
public class SysFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request1 = (HttpServletRequest) request;
HttpServletResponse response1 = (HttpServletResponse) response;
Object user_session = request1.getSession().getAttribute("USER_SESSION");
if (user_session == null) {
response1.sendRedirect("/login.jsp");
}
chain.doFilter(request1,response1);
}
public void destroy() {
}
}
注意:过滤器写完后一定要记得到配置!!!
<head>
<title>success</title>
</head>
<body>
<h1>登录成功,this is success</h1>
<a href="/logout">注销</a>
</body>
public class LogoutServlet extends HelloServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object user_session = req.getSession().getAttribute("USER_SESSION");
if (user_session != null){
req.getSession().removeAttribute("USER_SESSION");
resp.sendRedirect("/login.jsp");
}else {
resp.sendRedirect("/login.jsp");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
添加映射,注册过滤器。
访问测试,发现不登录访问被拦截了!

浙公网安备 33010602011771号