jsp 提交 action 中文乱码 之filter

1, index.jsp
<html>  
<!--中文乱码问题
解决的方法是建立一个Filter,代码在tomcat的example里可以找到。
...\Tomcat 5.0\webapps\servlets-examples\WEB-INF\classes\filters\SetCharacterEncodingFilter.java
以及...\Tomcat 5.0\webapps\servlets-examples\WEB-INF\web.xml
-->
<body>
     <form id="index" name="index" method="post" action="/riskprj/login.do">
       <input type="text" name="username">   
       <input type="submit" id="btnokpost" name="postok" value="提交">

    </form>
</body>  
</html>

2, LoginAction.java
public ActionForward execute(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response) {

   // 假如Action要 传值到 JSP 页面,中文不需要做特殊处理
   System.out.println("action:username"+request.getParameter("username"));
   request.setAttribute("ggmm", "Action里面的中文");
   return mapping.findForward("love");
  
}
3, love.jsp
<html>
   <body>
    开开心心<br>
    <%=request.getParameter("username") %>   
<jsp:forward page="home.jsp" />
</body>
</html>

<!-- 转向home.jsp的时候,仍然可以获取 MyJsp.jsp 的参数
<jsp:forward page="home.jsp" />
-->
<!--转向home.jsp的时候, 无法获取MyJsp.jsp 的参数 -->
<%--response.sendRedirect("/riskprj/home.jsp"); --%>

4, home.jsp
<html>
    <body>
    欢迎来到!<%=request.getParameter("username") %>
    XX:<%=request.getAttribute("ggmm") %>
</body>
</html>

5, web.xml 的设置

<!--定义Filter -->
<filter>
        <filter-name>Set Character Encoding</filter-name>
        <filter-class>enc.fil</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>GBK</param-value>
        </init-param>
    </filter>
   
<!-- 定义Filter 拦截地址 -->
   <filter-mapping>
        <filter-name>Set Character Encoding</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

6, filter 的设置
public class fil implements Filter {

    protected String encoding = null;
    protected FilterConfig filterConfig = null;
    protected boolean ignore = true;
    public void destroy() {

        this.encoding = null;
        this.filterConfig = null;

    }

    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain)
throws IOException, ServletException {

        // Conditionally select and set the character encoding to be used
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null)
                request.setCharacterEncoding(encoding);
        }

// Pass control on to the next filter
        chain.doFilter(request, response);

    }

    public void init(FilterConfig filterConfig) throws ServletException {

this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null)
            this.ignore = true;
        else if (value.equalsIgnoreCase("true"))
            this.ignore = true;
        else if (value.equalsIgnoreCase("yes"))
            this.ignore = true;
        else
            this.ignore = false;

    }

    protected String selectEncoding(ServletRequest request) {

        return (this.encoding);

    }
}

转载于:https://www.cnblogs.com/qinhaijun/archive/2011/08/26/2154381.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值