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总结的主要内容,如果未能解决你的问题,请参考以下文章

JavaWeb:Servlet技术

[JavaWeb] Servlet Filter

JavaWeb----Servlet和servlet-mapping

JavaWeb----servlet

[JavaWeb-Servlet]Servlet相关配置

[JavaWeb-Servlet]Servlet的体系结构