Servlet交互/作用域/EL/JSTL
Servlet交互
请求转发请求转发以及请求转发的特点
常用API:
在HttpServletRequest对象中.
RequestDispatcher getRequestDispatcher(String path):获取请求分发器,path: 请求转发到的目标资源
void forward(ServletRequest request, ServletResponse response) :请求转发的动作.
不要忘记forward!!!
请求转发的特点
-
地址栏不会发生变化.还是/a.
-
只会有目标资源 /b 的响应,a 的响应不生效(不要在 /a 组价中写响应的操作,无效).
-
请求转发只会发出一次请求.可以在请求转发中,在多个组件中进行请求相关信息的数据共享,能共享当前请求中的数据
-
请求转发可以访问WEB-INF中的资源,访问WEB-INF也只能使用请求转发
-
请求转发不可以访问别人(域外)的资源
-
相对路径:相对于当前资源所在的路径找对应的资源 如:a在/forward/路径下 直接找名称为b的资源是直接在/forward/下找绝对路径:从根路径开始找对应的资源 如:a在/forward/路径下 使用/forward/b找资源,此时和a的路径无关
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf8"); resp.setContentType("text/html;charset=utf-8"); String username = req.getParameter("username"); System.out.println("begin...a"); System.out.println(username); // 请求转发 不要忘记forward!!! req.getRequestDispatcher("/forward/b").forward(req, resp); // 响应给浏览器 PrintWriter writer = resp.getWriter(); writer.println("end a username"+username); }
重定向以及重定向的特点
常用API
在HttpServletResponse对象中.
void sendRedirect(java.lang.String location) : 重定向,location: 重新定位的资源的地址.
重定向的特点
-
地址栏会发生变化.是b
-
只会有目标资源b 的响应,a的响应不生效
-
重定向会发送两次请求.在多个组件不能共享请求数据
-
重定向,不能访问WEB-INF中的资源,相当于是把目标资源放在浏览器的地址栏敲回车
-
重定向可以访问别人(域外)的资源
注意:因为请求转发只能访问当前项目内的资源,所以可以不用添加上下文路径.其他的地方,都需要添加上下文路径.比如:
重定向<a href="/pss/xxx"> <form action="">
这些位置都可以访问域外的地址,所以如果是访问当前项目中的资源,都需要加上上下文路径
@Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("utf8"); resp.setContentType("text/html;charset=utf-8"); String username = req.getParameter("username"); System.out.println("begin...a"); System.out.println(username); // 重定向 resp.sendRedirect("/redirect/b"); // 响应给浏览器 PrintWriter writer = resp.getWriter(); writer.println("end a username"+username); }
作用域
作用域的作用就是用来共享数据的(相当于容器)
三大种作用域:
作用域 | 类型 | 描述以及对象的创建 |
---|---|---|
request | HttpServletRequest | 在一次请求过程中可以共享数据,tomcat在调用这个生命周期方法的时候,就会创建 |
request | HttpSession | 在一次会话中共享数据(一次会话就是浏览器打开访问站点到浏览器关闭),HttpSession session = request.getSession(); |
application | ServletContext | 在服务器启动过程中,都可以共享的数据.关闭服务器,application消失。ServletContext application = getServletContext(); ServletContext application = request.getServletContext(); |
共享数据的基本操作
每一个作用域对象,都有对象的增删改查的方法
增加 void setAttribute
删除 void removeAttribute
修改 void setAttribute
查询 Object getAttribute
EL
EL表达式主要的作用是获取作用域对象中的数据.而且给我们提供了一些内置对象,可以直接使用.也可以直接在EL表达式中进行运算
格式: ${}
EL 表达式获取JavaBean
使用. 的方式: ${对象.属性} 推荐使用
使用getter 的方式 : ${对象.getter}
使用[] 的方式: ${对象[“属性名”]}
推荐使用点的方式,主要,属性命名不能带点等特殊符号
JSTL(jsp标准标签库)
JSTL,就是一堆标签,这些标签,可以完成常见的操作:使用标签来完成循环,完成判断,时间格式
引入方式:
-
导入jar包
在Tomcat原始项目里,也可去官网下载
http://archive.apache.org/dist/jakarta/taglibs/standard/binaries/
下载 jakarta-taglibs-standard-1.1.2.zip 包并解压,将 jakarta-taglibs-standard-1.1.2/lib/ 下的两个 jar 文件:standard.jar 和 jstl.jar 文件拷贝到 /WEB-INF/lib/ 下。
-
增加指令:<%@ taglib %>
核心标签指令
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
格式化标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
重点标签:
判断标签
<c:if test="<boolean>" var="<string>" scope="<string>">
...
</c:if>
属性:test,判断条件;var,用于存储条件结果的变量;scope,var属性的作用域。Servlet交互/作用域
<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
属性:
- c:choose标签没有属性
- c:when标签只有一个属性,判断条件。
- c:otherwise标签没有属性
循环标签
<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
</c:forEach>
属性 | 描述 |
---|---|
items | 要被循环的信息 |
begin | 开始的元素(0=第一个元素,1=第二个元素) |
end | 最后一个元素(0=第一个元素,1=第二个元素) |
step | 每一次迭代的步长 |
var | 代表当前条目的变量名称 |
varStatus | 代表循环状态的变量名称 |