javaweb-filter过滤器
通过过滤器实现解决中文乱码问题
编写一个过滤器
@WebFilter(urlPatterns = "/filter/*")
public class HelloFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
//chain.doFilter表示继续进行下去,如果不执行这句话直接return,就是中止访问目标了
chain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
编写一个简单的servlet
@WebServlet(urlPatterns = {"/hello","/filter/hello"})
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("hello,你好呀!");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
上面这串代码的意思就是如果说通过/filter/hello访问了HelloServlet,就会经过过滤器,否则不经过过滤器
过滤器的作用是解决乱码问题
也就是只要访问/filter/hello,就不会有中文乱码,而访问/hello会有中文乱码
执行后的效果如下:
使用过滤器来实现权限访问
比如有些资源必须是要登录的时候才能使用
所以可以在Filter中进行验证
一共四个页面,其中success.html文件需要登录之后才能访问
代码如下
过滤器:
@WebFilter(urlPatterns = "/success.html")
public class LoginFilter extends HttpFilter {
@Override
protected void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException {
Object isLoginObject = req.getSession().getAttribute("isLogin");
if(isLoginObject ==null){
res.sendRedirect("/error.html");
}else {
if((boolean) isLoginObject){
chain.doFilter(req,res);
}else {
res.sendRedirect("/error.html");
}
}
}
}
登录Servlet
@WebServlet(urlPatterns = "/login")
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String username = req.getParameter("username");
String password = req.getParameter("password");
HttpSession session = req.getSession();
if(username.equals("kehao")&&password.equals("123456")){
session.setAttribute("isLogin",true);
resp.sendRedirect("/success.html");
}else {
session.setAttribute("isLogin",false);
resp.sendRedirect("/error.html");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
登出Servlet
@WebServlet(urlPatterns = "/logout")
public class LogoutServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
HttpSession session = req.getSession();
session.setAttribute("isLogin",false);
resp.sendRedirect("/login.html");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doGet(req, resp);
}
}
登录页面
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="username" value=""><br>
<input type="password" name="password" value=""><br>
<input type="submit" value="登录">
</form>
</body>
</html>

浙公网安备 33010602011771号