JAVA EE7 Servlet 3.1新规范与中文乱码问题

最近在写一个项目,用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>

 




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值