一、打开jsp页面无法加载部分或全部图片(统一解决方法)
1.将绝对路径改成相对路径通过${pageContext.request.contextPath }定位到项目主目录下(即与src下的包目录和webroot的子目录)等级相同,再进入文件查找图片
如下:${pageContext.request.contextPath }/resource/images/tab_05.gif
2.检查图片文件大小写
3.更改图片格式,如果是.png的改成.jpg的;如果是jpg的改成.gif或.png(对于部分图片无法显示,通过改变该图片格式,不是所有图片都改)
二、使用request需要注意的问题
1.request只能保证这个action(或,controller,servlet)的参数能传到下一个页面(或action,controller,servlet),如果要让参数能够在下下一个页面显示,就要在下一个action再次设置,或者直接将参数设置成session。
2.页面布局为frameset的时候要特别注意使用request,因为request只能保证一次数据传递,如果页面的总布局是一个页面(例main.jsp),进入分支页面(top.jsp.left.jsp,center.jsp,bottom.jsp)是没有数据传递的,所以此时不能用request
3.实际业务开发就是显示当前登录用户名,登录成功后将用户名设置为request,如果进入的页面布局为frameset是还要进入分支页面,在分支页面(top.jsp)是不会显示用户名,最好将其设置为session,而且这样也可以解决重定向跳转页面request无效的不能传递数据
三、出现乱码
1. 导入项目乱码
(1)先查看开发环境编码:-->window-->preferences-->输入出现乱码的文件(假如html出现乱码在搜索框输入html找到html在工作环境中默认的编码格式并修改为utf-8)
(2)在project explorer直接右击项目中出现乱码的文件-->properties看到相应文件(假如是java代码对应的就是resource)的编码格式统一改为utf-8
2.web层出现乱码
(1)(在action,controller,servlet中)简单手动直接设置,解决单个action的乱码问题
请求统一格式:(只能解决post乱码)
request.setCharacterEncoding("UTF-8");
响应:
返回html格式至前端:
response.setCharacterEncoding("text/html;charset=UTF-8");
返回json格式至前端:
response.setContentType("text/json");
response.setCharacterEncoding("UTF-8");
(2) 运用框架
a.Struts2:在struts.xml文件中,进行常量配置(不是很好用,只能解决post提交,而且有时候post提交还不能解决,struts2低版本配置解决无效)
b.springmvc自带的字符编码过滤器(只能解决post提交)
org.springframework.web.filter.CharacterEncodingFilter
(3).tomcat字符编码配置(解决get提交)
tomcat服务器的默认编码是‘ISO-8859-1’,打开conf目录下的server.xml,在70行
将
connectionTimeout="20000" redirectPort="8443" /> 改成 connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" useBodyEncodingForURI="true" /> 这样tomcat服务器对于get请求的默认编码就变成了utf-8 (4).手动书写过滤器(解决get/post提交,推荐使用) package com.ncu.filter; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.util.Map; 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.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; @WebFilter("/*") public class GenericEncodingFilter implements Filter { /* * * 通用编码解决方案 */ public void destroy() {} public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 转型为与协议相关对象 HttpServletRequest httpServletRequest = (HttpServletRequest) request; // 对request包装增强 HttpServletRequest myrequest = new MyRequest(httpServletRequest); chain.doFilter(myrequest, response); } public void init(FilterConfig filterConfig) throws ServletException {} } // 自定义request对象 @SuppressWarnings({ "unchecked", "rawtypes" }) class MyRequest extends HttpServletRequestWrapper { private HttpServletRequest request; private boolean hasEncode; public MyRequest(HttpServletRequest request) { super(request);// super必须写 this.request = request; } // 对需要增强方法 进行覆盖 @Override public Map getParameterMap() { // 先获得请求方式 String method = request.getMethod(); if (method.equalsIgnoreCase("post")) { // post请求 try { // 处理post乱码 request.setCharacterEncoding("utf-8"); return request.getParameterMap(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else if (method.equalsIgnoreCase("get")) { // get请求 Map if (!hasEncode) { // 确保get手动编码逻辑只运行一次 for (String parameterName : parameterMap.keySet()) { String[] values = parameterMap.get(parameterName); if (values != null) { for (int i = 0; i < values.length; i++) { try { // 处理get乱码 values[i] = new String(values[i].getBytes("ISO-8859-1"), "utf-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } } } hasEncode = true; } return parameterMap; } return super.getParameterMap(); } @Override public String getParameter(String name) { Map String[] values = parameterMap.get(name); if (values == null) { return null; } return values[0]; // 取回参数的第一个值 } @Override public String[] getParameterValues(String name) { Map String[] values = parameterMap.get(name); return values; } } 3.插入数据库中文变成??? 如果是xml文件在数据库名后加上(&在xml上要用&) ?useUnicode=true&characterEncoding=UTF-8 如果是properties文件在数据库名后加上(&实际就是&在xml上要转义) ?useUnicode=true&characterEncoding=UTF-8 4.数据库出现中文乱码 直接右击数据库,将数据库编码格式改为utf-8