最近在写一个项目,用JAVA EE框架,tomcat8.0,遇到了一些问题,在这里记录一下。
JAVA EE7 Servlet 3.1新规范
大家一定要注意版本,这是2.5的web.xml的头信息:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
<strong><span style="color:#cc0000;">version="2.5</span></strong>">
</web-app>
这是3.1版本web.xml的头信息:
</pre><pre name="code" class="html"><?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" <strong><span style="color:#cc0000;">version="3.1"</span></strong>>
</web-app>
servlet 3.1与原来的 2.x 注册servlet方式不同,2.x需要在WEB-INF目录下的web.xml里自己添加需要的servlet,格式如下:
<servlet>
<servlet-name>MapServlet</servlet-name>
<servlet-class>com.map.MapServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name><span style="font-family: Arial, Helvetica, sans-serif;">MapServlet</span><span style="font-family: Arial, Helvetica, sans-serif;"></servlet-name></span>
<url-pattern>/<span style="font-family: Arial, Helvetica, sans-serif;">MapServlet</span></url-pattern>
</servlet-mapping>
具体含义就不多说。
在3.0/3.1版本下,我们不需要自己去web.xml里部署servlet,系统提供了注解(annotation)方法,那么我们就不需要在新建web项目的时候勾选 generate web.xml这个选项了。
只需要新建servlet就好,
这里URL mappings 可以设置你自己希望的URL。然后就会自动生成servlet的Java文件,下面红字部分就是所谓的注解,
<span style="color:#cc0000;"><strong>@WebServlet("/test")</strong></span>
public class test extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/.........
这样前端的AJAX就可以和原来一样方式访问到servlet,
var url="/MapPlan/test?";
xmlhttp.onreadystatechange=callback;
xmlhttp.open("GET",url,false);
xmlhttp.send(null);
JSP和servlet的中文乱码问题
我需要通过response对象将一些值返回给前端浏览器,但是我返回的中文字符在浏览器里或是在JS里得到的都是乱码,显示为 '??????',这是因为response的getWriter()方法返回的PrintWriter对象默认用“ISO-8859-1”字符集编码进行Unicode字符串到字节数组的转换,由于ISO8859-1字符集中根本就没有包含中文字符,所以Java在进行转换的时候会将无效的字符编码输出给客户端,所以显示为乱码。
我们只需要在调用getWriter()之前加上这两句话就ok了:
<span style="font-size:14px;color:#cc0000;">response.setContentType("text/html;charset=utf-8");
</span><pre><span style="font-size:14px;"><span style="color:#cc0000;">response. setCharacterEncoding("UTF-8");</span>
response.getWriter().append("哈哈哈");</span>