登录后跳转经过filter到用户页server.jsp都是乱码

登录后跳转经过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>密&nbsp;码</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的方法都不起作用?

http://img1.sycdn.imooc.com//climg/5b067b9a00017e8d09451047.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

在那几个被include进来的jsp中有没有设置如下的内容:

<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>

另外,你可以先试一下,如果直接访问left.jsp和top.jsp这些页面是否会出现乱码

祝学习愉快!

  • 蓝壳 提问者 #1
    按您说的问题解决了,困惑了我好几天,谢谢。
    2018-05-25 11:29:30
提问者 蓝壳 2018-05-25 11:31:55

按老师说的问题解决了,困惑了我好几天,慕课网老师好厉害。


http://img1.sycdn.imooc.com//climg/5b0783600001d9c309290954.jpg

提问者 蓝壳 2018-05-24 19:12:31

// 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");
   }
}

好帮手慕阿莹 2018-05-24 18:59:35

请同学贴一下CharsetEncodingFilter的代码,帮你看一下。祝学习愉快。

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
Java Web基础入门2018版
  • 参与学习       716    人
  • 提交作业       185    份
  • 解答问题       1363    个

会Java?懂前端基础?想学后台开发?那么,赶快来学习《Java Web入门》路径吧。本路径主要介绍Java Web的基础知识,并配有大量案例,定会让你收获多多!

了解课程
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师