servlet乱码问题

servlet乱码问题 出现乱码无非与页面的编码格式,servlet的编码格式,数据库编码格式和是用doGet方法还是doPost方法有关。页面出现乱码: 修改<%@ page language=”java” import=”java.util.*” pageEncoding=”utf-8″%>中的编码格式。 在servlet中出现乱码, 解决办法:确保页面,servlet,数据库的编码格式一致,servlet的编码格式最好用过滤器转换,可减少代码冗余。 确保页面,servlet编码格式一致具体如下:页面:<%@ page language=”java” contentType=”text/html; charset=utf-8″%><!DOCTYPE html PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN” “http://www.w3.org/TR/html4/loose.dtd”><html><head><meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″><title>Insert title here</title><style>body,input,textarea { font-size: 12px;}textarea { width: 400px; height: 50px;}</style></head><body><pre><b>您输入了</b>:${ param.text }</pre><!–<form action=”” method=”post”>–><form action=”${ param.request.requestURL }” method=”post”> <textarea>${ param.text }</textarea> <br /> <textarea>222222</textarea> <br /> <input type=”submit”></form></body></html>过滤器:package com.wcl.servlet.filter;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class CharacterEncodingFilter implements Filter { private String characterEncoding; private boolean enabled; @Override public void init(FilterConfig config) throws ServletException { // TODO Auto-generated method stub characterEncoding = config.getInitParameter(“characterEncoding”); enabled = “true”.equalsIgnoreCase(characterEncoding.trim()); } @Override public void destroy() { // TODO Auto-generated method stub characterEncoding = null; } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub if(enabled || characterEncoding != null){ request.setCharacterEncoding(characterEncoding); response.setCharacterEncoding(characterEncoding); } chain.doFilter(request, response); }}在web.xml 中配置<!–encoding过滤器–> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>com.wcl.servlet.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>characterEncoding</param-name> <param-value>utf-8</param-value> </init-param> <init-param> <param-name>enable</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 这样就实现了页面和servlet的编码格式一致。数据库的格式可在数据库的配置文件中设置,详细请大家上网查阅。如果大家用的是doPost方法那么乱码问题到这里已经解决了。而用doGet方法请看下面内容:在做servlet的时候遇到这样一个问题:用doPost获得的参数只要加上“request.setCharacterEncoding(“utf-8”)”这样一行,则显示中文不会乱码,但是用doGet获得的参数加上“request.setCharacterEncoding(“utf-8″)”这一行后却依然乱码,解决方法如下: 在你的Tomcat服务器根目录下找到conf/server.xml文件,在文件中找到这样一行,将其中的URIEncoding=””双引号内改为utf-8,即红色字体处。 如下: <Connector port=”8080″ protocol=”HTTP/1.1″ connectionTimeout=”20000″ redirectPort=”8443” URIEncoding=”utf-8″/>struts框架出现的问题同样可以如此解决。————————————————————-${param.text}的问题param不是JSP的内置对象, 是EL中的${param.name}等价于request.getParameter(“name”),{param[name]}也是一样的${params.name}等价于request.getParameterValues(”name”)${id} 意思是取出某一范围中名称为id的变量。它的取值范围Page,Request,Session,Application。${param.id} 与输入有关,相对于 request.getParameter(“id”)。意思是获得输入的参数id。因为a.jsp提交到b.jsp过程中,id不属于Page,Request,Session,Application任何范围中的一个,所以取不到。而id是a.jsp传给b.jsp的一个参数,所以${param.id}取到值。Request的范围是指一个jsp页面发送请求到另一个jsp页面之间。在a.jsp里<%request.setAttribute(“key”,”Test”)%>当a.jsp转向b.jsp时,b.jsp可以得到a.jsp的变量key的值,而别的jsp页面是得不到值的。这里面的关键是a.jsp要转向b.jsp,在a.jsp加上<jsp:forward page=”b.jsp”/>表示要转向b.jsp.否则b.jsp得不到a.jsp设置的key的值。 两个jsp页面之间如何传递一个对象?比如一个List或者HashMap?答:用request.setAttribute(“name”,Object),request.getAttribute(“name”);或者session.setAttribute(“name”,Object),session.getAttribute(“name”);注意问题: 如果用request,要注意request的范围仅限于同一个request对象;如果使用了form的”action”或者response.sendRedirect(“xxx.jsp”)等转发, 则不再是同一个request对象,,即用request.getAttribute(“name”)将取不到值。 换成request.getRequestDispatcher(“xxx.jsp”).forward(request,response); 才能共享request中数据 如果用session,程序太慢,存在效率问题。

有时,明知错了,却欲罢不能,

servlet乱码问题

相关文章:

你感兴趣的文章:

标签云: