JSP系列之页面跳转编码设置

网友投稿 253 2022-09-24

JSP系列之页面跳转编码设置

在做JSP系统时经常遇到的就是编码问题

而这个服务器可以是Tomcat、Weblogic,Tomcat服务器默认的编码为iso-8859-1,Weblogic默认的编码为UTF-8,所以程序运行时要注意编码设置

现在我们以一个jsp页面的代码,解释这些编码设置pageEncoding="UTF-8"说的是页面的编码,比如标题栏还有其它内容等等</p><p><%@page import="java.net.URLDecoder"%><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'test.jsp' starting page <% request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=GBK"); String newsbody = new String(request.getParameter("editorValue").getBytes("iso-8859-1"),"UTF-8"); %>

<%=newsbody%>

String newsbody = new String(request.getParameter("editorValue").getBytes("iso-8859-1"),"UTF-8");

给一个编码过滤器参考

import java.io.IOException;import java.nio.charset.Charset;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.javax.servlet.org.apache.commons.lang.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * @description: 编码过滤器, 解决get或post方式的乱码问题 */@WebFilter(filterName = "encodingFilter", urlPatterns = "/*")public class EncodingFilter implements Filter { private static final Logger logger = LoggerFactory.getLogger(EncodingFilter.class); private String encode = "UTF-8";// 默认编码集 private String containers_encode="ISO8859-1";//web容器编码 @Override public void destroy() { logger.info("====过滤器正在销毁===="); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest = (HttpServletRequest) request; if ({ logger.debug("post请求,直接设置编码"); // 直接设置编码 request.setCharacterEncoding(encode); } else { // 重写HttpServletRequestWrapper进行内部转码 logger.debug("get请求,尝试转码"); request = new Request( } // 设置返回客户端编码 response.setCharacterEncoding(encode); chain.doFilter(request, response);// 交替权利给下一个过滤器或servlet服务 } class Request extends HttpServletRequestWrapper { /* 构造函数 */ public Request(HttpServletRequest request) { super(request); } private HttpServletRequest getHttpServletRequest() { return (HttpServletRequest) super.getRequest(); } /** * 转换由表单读取的数据的内码 * * @param str * @return */ private String changeEncode(String str) { if (needEncoding(str)) { try { byte[] bytes = str.getBytes(containers_encode); logger.debug("数据:{} 转码结果:{}", str, new String(bytes, encode)); return new String(bytes, encode); } catch (Exception e) { e.printStackTrace(); } return null; } return str; } /* 判断字符串是否需要转码 */ private boolean needEncoding(String str) { /* 如果为汉字,则不需要转码 */ return Charset.forName(containers_encode).newEncoder().canEncode(str); } @Override /* 单个参数 */ public String getParameter(String arg) { String value = getHttpServletRequest().getParameter(arg); if (value != null) { return changeEncode(getHttpServletRequest().getParameter(arg)); } return getHttpServletRequest().getParameter(arg); } @Override /* 多个参数 */ public String[] getParameterValues(String arg) { String values[] = getHttpServletRequest().getParameterValues(arg); if (values != null) { for (int i = 0; i < values.length; i++) { values[i] = changeEncode(values[i]); } } return values; } } @Override public void init(FilterConfig config) throws ServletException { logger.debug("====编码过滤器启动===="); /* 读取配置参数的编码集 */ String encoding = config.getInitParameter("encode"); if (StringUtils.isNotBlank(encoding)) { this.encode = encoding; } }}



版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:PHP系列之集成Ajax实现登录验证
下一篇:从天才童星到自己跑组找戏拍,曹骏:小看我的人会被打脸!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~