作业2-5问题 ,关于页面乱码及进入不了过滤器

作业2-5问题 ,关于页面乱码及进入不了过滤器

问题1:为什么我加了字符集转换的过滤器以后,页面显示乱码,不加的话就正常显示中文

页面:

    http://img1.sycdn.imooc.com//climg/60b0f996096f574306310045.jpg

web.xml

1
<?xml version="1.0" encoding="UTF-8"?><br><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><br>  <display-name>listener</display-name><br>  <welcome-file-list><br>    <welcome-file>index.html</welcome-file><br>    <welcome-file>index.htm</welcome-file><br>    <welcome-file>index.jsp</welcome-file><br>    <welcome-file>default.html</welcome-file><br>    <welcome-file>default.htm</welcome-file><br>    <welcome-file>default.jsp</welcome-file><br>  </welcome-file-list><br>  <br>  <listener><br>      <listener-class>com.imooc.listener.WebListener</listener-class><br>  </listener><br>  <br>  <listener><br>      <listener-class>com.imooc.listener.WebAttributeListener</listener-class><br>  </listener><br>  <br>  <servlet><br>      <servlet-name>login</servlet-name><br>    <servlet-class>com.imooc.servlet.LoginServlet</servlet-class><br>  </servlet><br>  <br>  <servlet-mapping><br>      <servlet-name>login</servlet-name><br>    <url-pattern>/login</url-pattern><br>  </servlet-mapping><br>  <br> <filter><br>     <filter-name>charsetFilter</filter-name><br>      <filter-class>com.imooc.filter.CharsetFilter</filter-class><br>   <init-param><br>        <param-name>charset</param-name><br>          <param-value>UTF-8</param-value><br>      </init-param><br>  </filter><br>  <filter-mapping><br>      <filter-name>charsetFilter</filter-name><br>      <url-pattern>/*</url-pattern><br>  </filter-mapping><br>  <br>   <filter><br>      <filter-name>loginFilter</filter-name><br>    <filter-class>com.imooc.filter.LoginFilter</filter-class><br>  </filter><br>  <filter-mapping><br>    <filter-name>loginFilter</filter-name><br>    <url-pattern>/listener/index.html</url-pattern><br>  </filter-mapping><br>  <br></web-app><br>

CharsetFilter

1
ppackage com.imooc.filter;<br><br>import java.io.IOException;<br><br>import javax.servlet.Filter;<br>import javax.servlet.FilterChain;<br>import javax.servlet.FilterConfig;<br>import javax.servlet.ServletException;<br>import javax.servlet.ServletRequest;<br>import javax.servlet.ServletResponse;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br><br>public class CharsetFilter implements Filter{<br><br> private String charset;<br><br> @Override<br>   public void destroy() {<br>     // TODO Auto-generated method stub<br><br>  }<br><br>   @Override<br>   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)<br>           throws IOException, ServletException {<br>      HttpServletRequest req = (HttpServletRequest)request;<br>       HttpServletResponse resp = (HttpServletResponse)response;<br>       req.setCharacterEncoding(charset);<br>      resp.setContentType("text/html;charset="+charset);<br>      chain.doFilter(request, response);<br><br>  }<br><br>   @Override<br>   public void init(FilterConfig filterConfig) throws ServletException {<br>       charset = filterConfig.getInitParameter("charset");<br><br> }<br><br>}<br>


问题2:当我直接访问index.html的时候,进入不了loginFilter这个过滤器,这个是为什么

LoginFilter:

1
package com.imooc.filter;<br><br>import java.io.IOException;<br><br>import javax.servlet.Filter;<br>import javax.servlet.FilterChain;<br>import javax.servlet.FilterConfig;<br>import javax.servlet.ServletException;<br>import javax.servlet.ServletRequest;<br>import javax.servlet.ServletResponse;<br>import javax.servlet.http.HttpServletRequest;<br>import javax.servlet.http.HttpServletResponse;<br><br>public class LoginFilter implements Filter{<br><br>   @Override<br>   public void destroy() {<br>     // TODO Auto-generated method stub<br><br>  }<br><br>   @Override<br>   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)<br>           throws IOException, ServletException {<br>      HttpServletRequest req = (HttpServletRequest)request;<br>       HttpServletResponse resp = (HttpServletResponse)response;<br>       System.out.println("==="+req.getRequestURI());<br>      if(req.getSession().getAttribute("userName")!=null) {<br>           chain.doFilter(request, response);<br>      }else {<br>         resp.sendRedirect("/listener/login.html");<br>      }<br><br>   }<br><br>   @Override<br>   public void init(FilterConfig filterConfig) throws ServletException {<br>       // TODO Auto-generated method stub<br><br>  }<br><br>}<br>


正在回答 回答被采纳积分+1

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

1回答
好帮手慕小脸 2021-05-29 13:43:45

同学你好,

1、这里应该是编码格式的问题,猜测不乱码时编码格式为GBK,所以当设置字符集转换的过滤器以后(UTF-8)就会产生乱码

2、这里同学可以参考其他同学的思路检查一下自己的判断是否有问题:

https://class.imooc.com/course/qadetail/281374

祝学习愉快~


  • 提问者 RedJoker #1
    1
    <!DOCTYPE html><br><html><br><head><br><meta charset="UTF-8"><br><title>Insert title here</title><br></head><br><body><br>  <form action="/listener/login" method="post"><br>     用户名:<input type="text" id="userName" name="userName"><br>     密码:<input type="password" id="pwd" name="pwd"><br>        <input type="submit"><br> </form><br></body><br></html><br>

    这是我页面的代码,页面上也是UTF-8

    2021-05-29 14:25:34
  • 好帮手慕小脸 回复 提问者 RedJoker #2

    同学你好,页面中按钮上的“提交”并未乱码,同学是在input框中设置的value值吗?这里建议同学将代码贴完整,便于老师在本地进行测试

    祝学习愉快~


    2021-05-29 18:58:39
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
微信客服

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

帮助反馈 APP下载

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

公众号

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

在线咨询

领取优惠

免费试听

领取大纲

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