JavaWeb资源间数据的传递总结
一. js与jsp之间的数据传递
(一). jsp获得js的值
因为jsp本质上是servlet,在服务器中运行。所以无法直接获取js的值。
需要先把客户端的变量提交给服务器,服务器中再接收该变量。
在一个jsp页面中:
(1)在jsp中设置表单,或节点(隐藏/不隐藏)
<form id="jsp_form" action="#" method="post">
<input id="jspEle" type="hidden name="jspEle">
</form>
(2)js代码中,提交表单
<script>
function setElevalue(){
var tmp = "jsEle";
document.getElementById("jspEle").value = tmp; // 将JS变量值存储到jsp的控件中
}
function submit(){
var jsp_form = document.getElementById("jsp_form"); // 获取表单
jsp_form.submit(); // 对表单进行提交
}
</script>
(3)表单提交后,在jsp中设置值。这时就获得了js中的变量值
<%
String jsP_js = request.getParameter("jspEle"); // jspEle为隐藏控件名
%>
(二). js获得jsp的值
可以借助服务器中的变量,如request。
<%
int num = 5;
request.setAttribute("num", num);
%>
var num = <%= request.getAttribute("num") %>; //5
num = ${requestScope.num}; //5
二. jsp与servlet之间的数据传递
(一)jsp数据传入servlet
1.方式1: 异步请求
使用ajax,发送异步请求,将数据传入servlet。
(异步请求时,也可以把参数写在url中)
$.post("ajaxServlet",{username:"jack"},function(data){
alert(data);
},"text"); //type不设置时,默认为智能判断
提交表单时,可以将表单序列化提交
例: 提交登录表单
$("#login_form").submit(function () {
//发送异步请求
$.post("userServlet", $(this).serialize(), function (data){
})
})
2.方式2: 直接提交表单,为表单设置action
<form id="regist_form" method="post" action="userServlet" >
<input id="rname" type="text" name="uname" placeholder="用户名" ">
<input id="rpassword" type="password" name="password" placeholder="密码" />
<input id="rsubmit" type="submit" value="注册"/>
</form>
(二)servlet数据传入jsp
1.方式1: 将变量存入域中
如: 存入session,cookie。
request.getSession.setAttribute("user",user);
也可以存入request,然后进行转发,访问jsp
request.getServletContext().getRequestDispatcher("/index.jsp").forward(request, response);
2.方式2: 在异步请求中,返回数据
注意: 返回数据类型要与异步请求预设的数据类型相同
例.返回json数据:
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
response.setContentType("application/json;charset=utf-8");
response.getWriter().write(json);
(三)jsp处理servlet传入的数据
1.对于request,session中存储的值,直接获取即可
User user = (User)request.getAttribute("user");
2.`异步请求中返回的数据
直接通过返回的数据data,获取即可。对于json类型数据,使用获取json数据的方法。
(四)servlet处理jsp传入的数据
1.异步请求传入的参数
String id = request.getParameter("id");
对于提交表单的异步请求:
可以使用BeanUtils工具类,将其封装到一个对象中(注意: 表单的name要与对象中变量名相同)
//获取参数
Map<String, String[]> map = request.getParameterMap();
//封装参数
User registUser = new User();
try {
BeanUtils.populate(registUser, map);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
2.在url中设置的参数
String params = request.getQueryString();
补充: 接收数据时的中文乱码问题,可以通过该语句解决:
(常常是页面中用户输入的数据)
String title = request.getParameter("title");
title = new String(title.getBytes("iso-8859-1"),"utf-8");//当然UTF-8可以换成GBK,unicode
三. jsp与jsp之间的数据传递
可以使用location.href,来完成jsp与jsp之间的跳转。在url中传递参数。
例:
location.href = "index.jsp?id="+ 1 +"";
//在index.jsp中
var id = ${param.id};
四. html与servlet之间的数据传递
(一) html数据传入servlet
1.方式1: 使用a标签的href
格式: 在超链接通过?+要传的属性名=属性值 ,多个属性需要用&连接
注意: 不要在a标签的访问URL前面加/,否则无法找到资源
<a href="userServlet?username=jack&password=123"></a>
2.方式2: 使用ajax(jsp与servlet数据交互处已说明)