登录后跳转经过filter到用户页server.jsp都是乱码
下面是index.jsp登录页面代码:
<%--
Created by IntelliJ IDEA.
User: zhengbinb
Date: 2018/5/15
Time: 15:50
To change this template use File | Settings | File Templates.
--%>
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="./global.jsp" %>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>图书后台管理登录界面</title>
</head>
<body>
<br /><br />
<center>
<h1>登录 | <a href="<%=basePath%>/regist.jsp">注册</a></h1>
<%
String msg = (String) request.getAttribute("msg");
if(msg != null){
%>
<p style="color: red;"><%=msg %></p>
<%
}
%>
<form action="<%=basePath%>/LoginServlet" method="post">
<table width="350px" cellspacing="0px" cellpadding="0px" border="1px">
<tr>
<td>用户名</td>
<td><input type="text" name="username" placeholder="用户名为3-12位字母数字或下划线组合" ></td>
</tr>
<tr>
<td>密 码</td>
<td><input type="password" name="password" placeholder="长度为6-12位的纯数字" ></td>
</tr>
<tr>
<td colspan="2" style="text-align:center">
<input type="submit" value="登录">
<input type="reset" value="取消">
</td>
</tr>
</table>
</form>
</center>
</body>
</html>
下面是LoginServlet的代码:
package book.manage.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@WebServlet(name = "LoginServlet", urlPatterns = "/LoginServlet")
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
String username = request.getParameter("username");
String password = request.getParameter("password");
if((username == null) || (password == null)){
response.sendRedirect("./index.jsp");
return;
}
Pattern pattern = Pattern.compile("[a-zA-Z0-9_]{3,12}");
Matcher matcher = pattern.matcher(username);
boolean matcherResult = matcher.matches();
if (matcherResult == false) {
out.println("用户名:" + username + "格式不正确!<a href='./index.jsp'>返回</a>");
return;
}
pattern = Pattern.compile("\\d{6,12}");
matcher = pattern.matcher(password);
matcherResult = matcher.matches();
if (matcherResult == false) {
out.println("密码格式不正确!<a href='./index.jsp'>返回</a>");
return;
}
if (LibDaoImpl.isUserExist(username) == -1) {
request.setAttribute("msg", "用户名: " + username + " 不存在!");
request.getRequestDispatcher("./index.jsp").forward(request, response);
}
if (LibDaoImpl.login(response, username, password) == -1) {
request.setAttribute("msg", "用户名: " + username + " 登录错误!");
request.getRequestDispatcher("./index.jsp").forward(request, response);
}
response.sendRedirect("./server.jsp");
// request.getRequestDispatcher("/server.jsp").forward(request, response);
}
}
下面是LoginFilter代码:
package book.manage.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.*;
import java.io.IOException;
@WebFilter(filterName = "LoginFilter")
public class LoginFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
// String username = null;
// Cookie[] cookies = request.getCookies();
//
// if(cookies != null){
// for (int i = 0; i < cookies.length; i ++){
// Cookie cookie = cookies[i];
// if("username".equals(cookie.getName())){
// username = cookie.getValue();
// }
// }
// }
//
// if(username == null){
// response.sendRedirect("./notLogin.jsp");
// }
chain.doFilter(request, response);
}
public void init(FilterConfig config) throws ServletException {
}
}
下面是server.jsp代码:
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="./global.jsp" %>
<html>
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>图书后台管理系统</title>
<link rel="stylesheet" type="text/css" href="<%=basePath%>/css/index.css" />
</head>
<body>
<%@ include file="./top.jsp"%>
<div class="content">
<%@ include file="./left.jsp"%>
<div class="right"></div>
</div>
</body>
</html>
下面是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>LoginFilter</filter-name>
<filter-class>book.manage.filter.LoginFilter</filter-class>
</filter>
<filter>
<filter-name>CharsetEncodingFilter</filter-name>
<filter-class>book.manage.filter.CharsetEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/server.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CharsetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
index.jsp登录后LoginServlet跳转经过filter到用户页server.jsp都是乱码,试了好多设置UTF-8的方法都不起作用?

正在回答
在那几个被include进来的jsp中有没有设置如下的内容:
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>
另外,你可以先试一下,如果直接访问left.jsp和top.jsp这些页面是否会出现乱码
祝学习愉快!
// CharsetEncodingFilter代码
package book.manage.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "CharsetEncodingFilter")
public class CharsetEncodingFilter implements Filter {
private String encoding;
public void destroy() {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws ServletException, IOException {
servletRequest.setCharacterEncoding(encoding);
chain.doFilter(servletRequest, servletResponse);
}
public void init(FilterConfig config) throws ServletException {
this.encoding = config.getInitParameter("encoding");
}
}
- 参与学习 716 人
- 提交作业 185 份
- 解答问题 1363 个
会Java?懂前端基础?想学后台开发?那么,赶快来学习《Java Web入门》路径吧。本路径主要介绍Java Web的基础知识,并配有大量案例,定会让你收获多多!
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星