页面与服务器的交互与数据传递
一、页面与Servlet交互的几种方式
1.表单项,提交<button>
按钮
1.输入书籍的表单信息,点击提交,到 bookServlet 的 add方法中
<form action="manager/bookServlet" method="get">
<input type="hidden" name="action" var="add">
</form>
2.点击提交按钮,调用servlet方法的update方法,用隐性表单传递参数id
<form action="manager/bookServlet" method="get">
<input type="hidden" name="id" value="${requestScope.book.id}">
</form>
2.绑定事件中,设置location.href
直接跳转
通过绑定单击事件,响应跳转servlet调用page方法并且传递pageNo实现
$("#inputbtn").click(function(){
var pageNumber = $("#pn_input").val();
location.href ="${pageScope.basePath}manager/bookServlet?action=page&pageNo="+pageNumber;
});
3.超链接跳转
<a href="bookServlet?action=list">图书管理</a>
表示这个超链接的请求由 bookServlet处理并且调用的是 bookServlet 中的list方法
点击删除时,链接到servlet的delete功能,并且传递要删除的id
<a href="bookServlet?action=delete&id=${book.id}">删除</a>
点击首页时,链接到servlet的page功能,并且要传递pageNo
<a href="manager/bookServlet?action=page&pageNo=1">首页</a>
二、页面与Servlet
数据传递的几种方式
1.servlet
将查询到的数据保存在request
域中
2.将查询到的Book记录在request中,消息转发给book_edit.jsp
Book book = bookService.queryBook(id);
req.setAttribute("book",book);
req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);
在jsp页面
中可以直接使用${requestScope.book}
得到数据内容
补充:param.name
与requestScope.name
的区别
${param.name} 等价于 request.getParamter("name"),
用于服务器从页面或者客户端获取的内容。
比如浏览器网址上带的参数,可以直接用param.name进行获取回显到页面中
${requestScope.name} 等价于 request.getAttribute("name") 等价于等价于 ${name},
用于服务器传递结果到页面,在页面中取出服务器保存的值。
比如servlet处理之后的数据,利用setAttribute设置之后直接在页面中利用requestScope.name取出
2.servlet
将查询到的数据保存到session
域中
1.获取当前的session,并将数据存到session域中
req.getSession().setAttribute("cart",cart);
2.获取session域中存的数据
Cart cart = (Cart) req.getSession().getAttribute("cart");
3.利用响应头信息直接跳转回原页面
resp.sendRedirect(req.getHeader("Referer"));
靠 session 来传递消息,sessionScope来获取,注意:这里存的cart.items的数据类型是map
<c:if test="${not empty sessionScope.cart.items}">
<c:forEach items="${sessionScope.cart.items}" var="entry">
<tr>
<td>${entry.value.name}</td>
<td>${entry.value.count}</td>
<td>${entry.value.price}</td>
<td>${entry.value.totalPrice}</td>
<td><a href="#">删除</a></td>
</tr>
</c:forEach>
</c:if>