servlet无法获得ajax传过来的数据
答案:2 悬赏:50 手机版
解决时间 2021-03-21 13:42
- 提问者网友:我是我
- 2021-03-20 21:42
这是jsp部分,很简单就是按按钮把数据传输过去;话说我上次大概是三天之前弄这个程序完全没问题啊<br><%@ page language="java" import="java.util.*"<br> contentType="text/html; charset=UTF-8 " pageEncoding="UTF-8"%><br><%<br> request.setAttribute("base", request.getContextPath()); //获得站点根目录<br>%><br><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><br><html><br><head><br><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><br><script type="text/javascript" src="${base}/js/jquery-1.3.2.min.js"></script><br><script type="text/javascript"><br> $(document).ready( <br> function(){<br> $("#registerBT").click( <br> function(){ <br> var studentName=$("#studentName").val();<br> var passWard=$("#passWard").val();<br> $.ajax(<br> {<br> url:"${base}/LoginServlet",<br> type:"post",<br> data:"username="+studentName+"&passward="+passWard,<br> dataType:"json",<br> success:successInfo<br> }<br> ); <br> }<br> );<br> }<br>);<br> function successInfo(json){<br> var success=json.success;//tipDiv<br> if(success!=null){<br> alert("注册成功,请登录!");<br> window.location.href = "welcome.jsp";<br> }<br> }<br> </script><br> <title>Insert title here</title><br></head><br><body><br>用户名 <input type="text" id="studentName" name="studentName" size="20"><br><br>密 码 <input type="text" id="passWard" name="passWard" size="20"><br><br><input type="button" id="registerBT" name="register" value="注册"> <br></body><br></html> <br>这是相应的servlet代码<br>package servlets;<br>protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {<br>String name=(String) request.getAttribute("username");//这个地方我看了name是null<br><br> String address=(String) request.getAttribute("passward");<br>}
最佳答案
- 五星知识达人网友:上分大魔王
- 2021-03-20 23:13
1. 将你js中获取到得username,password输出看是否有获取到值。
2. 请求type,dataType与实际发送的data不一致。
type:"post",
data:"username="+studentName+"&passward="+passWard,
dataType:"json",
a. 如果要使用你目前的data来传递值,建议修改为
type: "get",
data:"username="+studentName+"&passward="+passWard,
[dataType]删掉该属性
b. 如果要使用json形式
type: "post"/"get",
data: "{'username':" + studentName+",'password':" + passWard + "}",
dataType: "json"
希望能帮助你解决问题,如果不能请继续追问。
2. 请求type,dataType与实际发送的data不一致。
type:"post",
data:"username="+studentName+"&passward="+passWard,
dataType:"json",
a. 如果要使用你目前的data来传递值,建议修改为
type: "get",
data:"username="+studentName+"&passward="+passWard,
[dataType]删掉该属性
b. 如果要使用json形式
type: "post"/"get",
data: "{'username':" + studentName+",'password':" + passWard + "}",
dataType: "json"
希望能帮助你解决问题,如果不能请继续追问。
全部回答
- 1楼网友:一把行者刀
- 2021-03-21 00:29
1.原生ajax代码
get请求:
//创建xhr,ie低版本不支持
var xhr = new xmlhttprequest();
//servlet地址
var url="/website01/index.view";
xhr.open("get", url, true);
//xhr处理事件,异步
xhr.onreadystatechange = function() {
if (xhr.readystate == 4 && xhr.status == 200) {
//在这里进行相关处理,通过xhr.responsetext获取后台反馈的文本
...
}
};
//xhr发送数据
xhr.send();
post请求:
post请求需注意要设置请求头(setrequestheader)
xhr.setrequestheader(“content-type”, “application/json”);针对json数据
在xhr.send()中写需要发送的json数据,例如:
xhr.send(json.stringify(data));1
2.servlet基础知识
servlet是用java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态web内容。狭义的servlet是指java语言实现的一个接口,广义的servlet是指任何实现了这个servlet接口的类,一般情况下,人们将servlet理解为后者。
servlet运行于支持java的应用服务器中(tomcat)。从原理上讲,servlet可以响应任何类型的请求,但绝大多数情况下servlet只用来扩展基于http协议的web服务器。
在java中,新建servlet类继承自httpservlet,重写doget方法处理get请求,重写dopost方法,处理post请求,通过
printwriter out = response.getwriter();通过out.write()输出数据到前台的xhr.responsetext,通过out.println()输出页面。
3.servlet处理请求
处理请求通过httpservletrequest类型,get请求时查询字符串直接编码在请求链接中,格式为url+”?key1=value1&key2=value2”,通过getparameter(“key1”)来获取值。
4.前后端传递json数据
前端传递json给servlet
//程序片段,请求头不能少
xhr.setrequestheader("content-type", "application/json");
var data={"name":"tom","age":20};
xhr.send(json.stringify(data));1234
后端接受前端传递的json数据
//读取请求传递过来的json格式数据,返回json字符串
private string readjsondata(httpservletrequest request) {
stringbuffer json=new stringbuffer();
string linestring=null;
try {
bufferedreader reader=request.getreader();
while ((linestring=reader.readline())!=null) {
json.append(linestring);
}
} catch (exception e) {
system.out.println(e.tostring());
}
return json.tostring();
}
string json=readjsondata(request);
//将json字符串转为java对象
gson gson=new gson();
person person=gson.fromjson(json, person.class);
说明
gson为google处理json格式数据的jar包,可将json字符串转换为对应的java对象,也可将相应的java对象序列化为json字符串。person为定义的类,包含name和age字段。readjsondata函数将前端请求中的json数据转为java对象。
后端输出json到前端
//后端程序片段,传递json数据给前端
person person=new person("tom",20);
gson gson=new gson();
string json=gson.tojson(person);
out.write(json);
//前端程序片段,通过ajax获取json数据
var xhr = new xmlhttprequest();
var url="/website01/index.view";
xhr.open("get", url, true);
xhr.onreadystatechange = function() {
if (xhr.readystate == 4 && xhr.status == 200) {
//获取后台传递过来的字符串并转换为json
var responsejson=json.parse(xhr.responsetext);
var name=responsejson.name;
var age=responsejson.age;
}
};
xhr.send(null);
5.表单数据的处理
12345
表单数据可以直接在form属性中定义请求方法和请求路径,在点击submit按钮后数据会直接提交并跳转。如上的表单,在点击按钮提交后,后台使用request.getparameter(“key”)获取数据,key值为input标签的name值,而非id值.,即通过以下代码获取表单提交的数据。
string name=request.getparameter("name");
string age=request.getparameter("age");12
以上。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯