毕设开始做网页的这部分东西了,想着肯定有伙伴跟我一样有困难,来晒下我走过的坑。
jquery-2.1.4.min.js是引用的网上的连接。
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.4.min.js"></script>
<script type="text/javascript">
$.ajax({
contentType: 'text/json,charset=utf-8', //加上这句,后台会接收参数为null,应该删去
dataType:"json",
//传递的地址
url: ".././SSaveFoodKind",
//传递的方式
type:'post',
//传递的参数
data: {kindname:kindName},
//返回的结果
success: function (result) {
alert(result);
},error:function(){ //页面不正常
alert("您所请求的页面有异常。");
}
});
</script>
说下在这里遇到的问题,刚开始写上这里就开始404,在开发者工具里看到报错,如图
我以为是自己引入jquery-2.1.4.min.js的问题,可是另一个功能就可以运行。 后来找同学帮忙,起初看我的url地址,我自认为没有问题 。(这里说下小问题,引用地址的时候要写servlet-name中的名字,下面是一样的,但具体是什么区别,身为小白的我也不知道)
<?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" version="3.1">
<display-name>AIR</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- 添加饮食种类 -->
<servlet>
<display-name>SSaveFoodKind</display-name>
<servlet-name>SSaveFoodKind</servlet-name>
<servlet-class>scontroller.SSaveFoodKind</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SSaveFoodKind</servlet-name>
<url-pattern>/SSaveFoodKind</url-pattern>
</servlet-mapping>
</web-app>
后来找到问题,却是配置的问题,不过上面的代码是正确的。问题是我的web.xml的位置有问题,因为是我自己建的。
错误示范如下图:
图里web.xml文件是在lib文件夹里面的,这样可能就导致地址错误。
正确的位置如下图:(和lib文件夹在同一个等级)
这下就可以用了。
接下来说后台传中文,jsp接收为乱码的问题,正常情况下,写下面两行代码就没有问题了,but…
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");//防止中文乱码
反正有中文的地方,servlet就出现这两句就对了。
现在说我的But
(生活不止正常的代码流程,还有许多的but…),先看代码
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();//举例
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");//防止中文乱码
System.out.println("lalalal at service");
boolean result;
String kindName = "水果";
System.out.println("。。。。。。。。。。Name "+kindName);
String saveResult=null;
ISFoodKindService foodKindService = new SFoodKindService();
result = foodKindService.addFoodKindInfo(kindName);
System.out.println("result "+result);
Gson gson = new Gson();
if(result){
saveResult ="添加饮食种类成功";
System.out.println(saveResult);
}else{
saveResult ="afff添加饮食种类失败";
}
try{
// response.getWriter().write(saveResult);
out.write(gson.toJson(saveResult));
}catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
response.getWriter().close();
}
}
我不知道从哪里参考的代码,一般写
response.getWriter().write(saveResult);
但是参考的老兄写的是
PrintWrite out = response.getWriter();
out.write(gson.toJson(saveResult));
然后我的中文就依旧乱码显示,把上面那位老兄写的换成一般的response.getWriter().write(saveResult); 中文乱码问题就解决了。
二者有啥不同,我也不晓得
这篇文章介绍一丢丢https://www.cnblogs.com/zhwl/p/3623688.html。
最后友情提示一下:ajax中 dataType:“json” 指定返回值为json,在servlet中如果不返回json,在jsp页面会执行ajax中的error操作的。
小白目前还是小白,文章里的问题希望路过的大佬解答,感激不尽(祝大佬写代码无bug)。