一. 前言
之前我们的jsp文件中包含大量Java代码,通过JSTL和Servlet,我们就可以将之前的项目jsp文件中的Java代码全部替换掉。下面我们通过几个例子来简单了解一下如何使用Servlet和JSTL来完成之间的JSP中Java代码的相关操作,中间还会用到一些EL表达式,我们的目标
二. 添加和修改
1. 获取Web根目录
在之前的操作中,我们都是通过表达式可以获取Web的根目录
<%=request.getContextPath()%>
在EL表达式中,我们需要首先使用pageContext获取request对象后才能获取Web根目录
${pageContext.request.contextPath}
2. 更改标题
假如我们修改数据和添加数据采用的是同一个页面,如果URL中传入了ID这个参数,则该页面标题显示修改数据,如果URL中没有传入ID这个参数,则该页面的标题显示添加数据,在之前我们是通过表达式操作的:
<title><%=request.getParameter("id") == null? "添加":"修改"%>数据</title>
上面的操作也可以使用JSTL来完成:
<c:if test="${param.id == null}"> <title>添加单车</title> </c:if> <c:if test="${param.id != null}"> <title>修改单车</title> </c:if>
3. 获取数据
在之前的JSP页面中,比如我们想查询数据中获取一辆自行车的数据,都是在小脚本中操作的:
<% BikeDao bikeDao = new BikeDaoImpl(); boolean isAdd = request.getParameter("id") == null; int id = -1; if (!isAdd) { id = Integer.parseInt(request.getParameter("id")); } Bike bike = bikeDao.queryById(id); %>
有了Servlet,我们便可以将上面的小脚本用Servlet来完成。
新建一个FromServlet类,重写doGet方法,在该方法里获取请求参数id,并根据该id查找指定单车,然后将该单车添加到request,并转发到表单页面即可。
package io.zhangjia.servlet; import dao.BikeDao; import dao.impl.BikeDaoImpl; import entity.Bike; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet("/form") public class FromServlet extends HttpServlet { private BikeDao bikeDao = new BikeDaoImpl(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String id = req.getParameter("id"); if(id != null) { Bike bike = bikeDao.queryById(Integer.parseInt(id)); req.setAttribute("bike",bike); } //转发 req.getRequestDispatcher("/admin/updateAndAdd.jsp").forward(req,resp); } }
转发后,我们就可以请求Servlet(也就是访问/form)来显示数据,而不是和以前那样直接访问updateAndAdd.jsp
将 <a href="${pageContext.request.contextPath}/admin/updateAndAdd.jsp?id=${bike.id}" class="btn btn-success"> 修改</a> 修改为: <a href="${pageContext.request.contextPath}/form?id=${bike.id}" class="btn btn-success"> 修改</a>
请登录之后再进行评论