web组件
在web应用中,servlet/jsp就是web的组件
跳转:
请求转发和重定向
共享数据:
作用域对象
jsp页面取数据
EL表达式
优雅的显示数据
JSTL
请求转发
1.请求转发:forward
2.重定向:redirect
3.请求包含:include
常用api:
在HttpServletRequest对象中
RequestDispatcher getRequestDispatcher(String path):获取请求分发器.
String path: 请求转发到的目标资源
void forward(ServletRequest request, ServletResponse response) :请求转发的动作.
1 | //获取到请求分发器,请求转发到WEB-INF/view/product/table.jsp资源上 |
url重定向
在HttpServletResponse对象中.
void sendRedirect(java.lang.String location) : 重定向,
String location: 重新定位的资源的地址.1
2//url重定向
resp.sendRedirect("/pro?cmd=list");
1.地址栏会发生变化.是s2.
2.只会有目标资源s2的响应,s1的响应不生效.
3.重定向会发送两次请求.在多个组件不能共享数据.
4.重定向,不能访问WEB-INF中的资源,相当于是把目标资源放在浏览器的地址栏敲回车.
5.重定向可以访问别人(域外)的资源.
请求转发和url重定向选择
请求转发:
共享数据
请求到WEB-INF中的资源
url重定向:
访问域外资源
都能使用的情况,使用重定向
三大作用域对象
作用域 | 类型 | 描述 |
---|---|---|
request | HttpServletRequest | 在一次请求中,多个组件都共享数据,需要使用请求.request在service方法中,tomcat在调用这个生命周期方法的时候,就会创建. |
session | HttpSession | HttpSession session = request.getSession(); 使用请求对象获取session对象 |
application | ServletContext | ServletContext application = getServletContext(); ServletContext application = request.getServletContext(); |
共享数据的基本操作
1.新增数据:
void setAttribute(java.lang.String name, java.lang.Object o): 保存数据,包含唯一的名字,和可重复值.
2.删除数据:
void removeAttribute(java.lang.String name):根据共享属性名.来删除共享数据
3.修改数据:
void setAttribute(java.lang.String name, java.lang.Object o):同新增
4.查询数据:
java.lang.Object getAttribute(java.lang.String name):通过共享数据(属性)的唯一名字,找到对应的值.
三大作用域范围
1.请求作用域对象:1
req.setAttribute("MSG_IN_REQUEST","request");
只能在一次请求中共享数据,如果不是同一个请求,是多次请求,一定不能共享.
如果想要在一次请求过程中的多个组件,要共享,需要使用请求转发.
2.会话作用域对象:1
req.getSession().setAttribute("MSG_IN_SESSION","session");
想在访问站点之后,多次请求都需要共享.可以使用session对象.从访问开始到浏览器关闭为止.
3.应用作用域对象:1
req.getServletContext().setAttribute("MSG_IN_APPLICATION","application");
只要服务器开启,都可以共享.
上下文对象:环境.整个应用的生命周期.从服务器启动,到服务器关闭,只有一个.
对象的获取方式:
1.当前servlet中,可以调用getServletContext来获取.
2.request对象可以调用getServletContext获取.
3.session对象可以调用getServletContext来获取.
不管用什么对象来获取到的上下文对象,都是同一个对象.
常用的API:
java.lang.String getRealPath(java.lang.String path) :传递一个地址,可以得到真正的磁盘地址.
负责把路径直接拼接到webapp根的后面,不负责去校验是否合法.
String getContextPath();获取上下文路径.
EL表达式:
语法格式:
${共享数据的属性名.属性名.属性名}.从page作用域开始,一直找到application为止,如果找到,直接返回,如果没找到,返回的是空字符串.
JSTL
使用JSTL标签库消除JSP中的java代码
条件判断
1.if单条件判断1
2
3<c:if test="${用EL表达式取出来的值}"
//如果test返回true,执行
</c:if>
2.choose多条件判断1
2
3
4
5
6
7
8<c:choose>
<c:when test="${用EL表达式取出来的值}">
//
</c:when>
<c:otherwise>
//TODO...
</c:otherwise>
</c:choose>
循环标签
1 | <c:forEach var="stu" items="${result.listData}" varStatus="vs"> |
items代表源数据,需要使用EL表达式去取
var代表每一个变量,该变量将会存储到PageContext作用域中
varStatus代表迭代状态.vs.index:从0开始,vs.count:从1开始
时间格式化标签
1 | <fmt:formatDate value="${date}" pattern="yyyy-MM-dd"/> |