JavaWeb--Servlet & JSP总结
Posted Z && Y
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb--Servlet & JSP总结相关的知识,希望对你有一定的参考价值。
1. Servlet--总结
用了一两天 用JSP+JDBC+Servlet 写了一个简单的图书管理系统。于我而言,由于之前系统的学习过了JavaWeb,所以上手这种小项目很快。下面就来谈一哈我这一两天的收获吧。
1.1 重定向
重定向最大的特点就是跳转到页面的时候不会携带参数过去,只是简单的跳转过去
1.1.1 直接跳转到页面
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.sendRedirect("static/jsp/addBook.jsp");
}
1.1.2 跳转到另外一个请求
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取前端传递过来的书籍的信息
String bookId = req.getParameter("bookId");
BookServiceImpl bookService = new BookServiceImpl();
try {
bookService.delBook(bookId);
//页面跳转,跳到图书管理页面(index.jsp)
resp.sendRedirect("/books");
} catch (Exception e) {
e.printStackTrace();
}
}
1.2 转发
转发最大的特点就是跳转到页面的时候可以携带参数过去
1.2.1 转发到一个页面
前台获取
通过JSTL表达式
<c:forEach var="book" items="${requestScope.get('books')}">
<tr>
<td>${book.getBookId()}</td>
<td>${book.getBookName()}</td>
<td>${book.getAuthor()}</td>
<td>${book.getInventory()}</td>
<td>
<a href="${pageContext.request.contextPath}/update?bookId=${book.getBookId()}">更改</a>
|
<a href="${pageContext.request.contextPath}/delBook?bookId=${book.getBookId()}">删除</a>
</td>
</tr>
</c:forEach>
直接获取
${books}
EL表达式
<% Book books = (Book) request.getAttribute("books");%>
如果在页面中,一个值需要调用方法才可以得到 则需要使用 <%= 方法()%> 的格式:
<form role="form" action="${pageContext.request.contextPath}/updateBook" method="post">
<% Book book = (Book) request.getAttribute("book");%>
<div class="form-group">
<label>图书编号:</label><input type="text" class="form-control"
name="bookId" readonly value="<%= book.getBookId()%>"/>
</div>
<div class="form-group">
<label>图书名:</label><input type="text" class="form-control"
name="bookName" required value="<%= book.getBookName()%>"/>
</div>
<div class="form-group">
<label>作者:</label><input type="text" class="form-control"
name="author" required value="<%= book.getAuthor()%>"/>
</div>
<div class="form-group">
<label>Pas库存sword</label><input type="text" class="form-control"
name="inventory" required value="<%= book.getInventory()%>"/>
</div>
<button type="submit" class="btn btn-default">提交</button>
</form>
如果在页面中,获取java代码中的值也需要采用 <%= 变量名的形式%>:
<% Book book = (Book) request.getAttribute("book");
bookName = book.getBookName();
%>
<input type="text" class="form-control"
name="author" required value="<%= bookName"/>
1.2.2 转发到另外一个请求
不过可以看到,虽然是请求转发,但是没有携带参数过去,不推荐这样使用
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取前端传递过来的书籍的信息
String bookId = req.getParameter("bookId");
BookServiceImpl bookService = new BookServiceImpl();
try {
bookService.delBook(bookId);
//页面跳转,跳到图书管理页面(index.jsp)
req.getRequestDispatcher("/books").forward(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
1.3 重定向与转发的不同点和相同点
相同点:
- 都可以实现页面的跳转
- 都可以直接跳转到或者请求
不同点:
- 请求转发的时候,url不会产生变化,并且可以携带参数跳转。
- 重定向的时候,url会发生变化,不可以携带参数跳转。
1.4 小结
没有参数要传递给前端,用请求转发。否则用重定向
1.5 后台怎么拿到前台请求传递过来的参数
前端传递时有多种办法,但后台拿数据的方式是统一的
1.5.1 通过href属性
如果有多个参数,中间用 & 符号连接
<a href="${pageContext.request.contextPath}/borrowBook?bookName=${book.getBookName()}&
bookId=${book.getBookId()}&author=${book.getAuthor()}&stuId=${studentSession.stuId}">借书</a>
后台获取
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取前端传递过来的书籍的信息
String bookId = req.getParameter("bookId");
BookServiceImpl bookService = new BookServiceImpl();
try {
bookService.delBook(bookId);
//页面跳转,跳到图书管理页面(index.jsp)
resp.sendRedirect("/books");
} catch (Exception e) {
e.printStackTrace();
}
}
1.5.2 通过form表单提交
后台获取
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取前端传递过来的书籍的信息
String bookName = req.getParameter("bookName");
BookServiceImpl bookService = new BookServiceImpl();
try {
List<Book> books = bookService.getBookByName(bookName);
req.setAttribute("books", books);
req.getRequestDispatcher("static/jsp/index.jsp").forward(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
1.6 补充: 2个Servlet 之间传值
- 发送方: request.setAttribute(key, value)
- 接收方: request.getAttribute(key)
以上是关于JavaWeb--Servlet & JSP总结的主要内容,如果未能解决你的问题,请参考以下文章