当前工作中开发web应用,使用JSF框架。
以前开发的web应用,使用JSP页面。
把JSP页面放到JSF项目中时,JSP页面中的JavaScript在运行时,汉字乱码。
乱码原因找到了,是web.xml中servlet的配置问题。
具体过程描述如下:
一、现象
1、开发工具 NETBeansIDE8.1中
2、新建项目
3、注意,这一步,选的是JavaServer Faces。
4、IDE生成的项目内容如下图。
5、IDE生成的web.xml文件,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>faces/index.xhtml</welcome-file>
</welcome-file-list>
</web-app>
6、新建jsp文件,文件名newjsp.jsp,内容如下:
<%@page contentType="text/html" pageEncoding="GBK"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>JSP Page</title>
<script src="newjavascript.js"></script>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
7、JSP文件中的newjavascript.js文件,内容如下:
alert("狗狗狗");
8、运行newjsp.jsp,弹出的alert,汉字乱码。
二、解决办法
1、NETBEAN IDE 中创建JSF的项目,web.xml中默认这样配置servlet
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
改成
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
2、再运行Jsp,JavaScript中汉字就显示正常了。