Servlet交互/作用域/EL/JSTL的使用

Servlet交互/作用域/EL/JSTL

Servlet交互

请求转发请求转发以及请求转发的特点

常用API:

在HttpServletRequest对象中.
RequestDispatcher getRequestDispatcher(String path):获取请求分发器,path: 请求转发到的目标资源
void forward(ServletRequest request, ServletResponse response) :请求转发的动作.
不要忘记forward!!!

请求转发的特点
  1. 地址栏不会发生变化.还是/a.

  2. 只会有目标资源 /b 的响应,a 的响应不生效(不要在 /a 组价中写响应的操作,无效).

  3. 请求转发只会发出一次请求.可以在请求转发中,在多个组件中进行请求相关信息的数据共享,能共享当前请求中的数据

  4. 请求转发可以访问WEB-INF中的资源,访问WEB-INF也只能使用请求转发

  5. 请求转发不可以访问别人(域外)的资源

  6. 相对路径:相对于当前资源所在的路径找对应的资源 如: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: 重新定位的资源的地址.

重定向的特点
  1. 地址栏会发生变化.是b

  2. 只会有目标资源b 的响应,a的响应不生效

  3. 重定向会发送两次请求.在多个组件不能共享请求数据

  4. 重定向,不能访问WEB-INF中的资源,相当于是把目标资源放在浏览器的地址栏敲回车

  5. 重定向可以访问别人(域外)的资源

    注意:因为请求转发只能访问当前项目内的资源,所以可以不用添加上下文路径.其他的地方,都需要添加上下文路径.比如:
    重定向

    <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);
    	}
    

作用域

作用域的作用就是用来共享数据的(相当于容器)

三大种作用域:

作用域类型描述以及对象的创建
requestHttpServletRequest在一次请求过程中可以共享数据,tomcat在调用这个生命周期方法的时候,就会创建
requestHttpSession在一次会话中共享数据(一次会话就是浏览器打开访问站点到浏览器关闭),HttpSession session = request.getSession();
applicationServletContext在服务器启动过程中,都可以共享的数据.关闭服务器,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,就是一堆标签,这些标签,可以完成常见的操作:使用标签来完成循环,完成判断,时间格式

引入方式:

  1. 导入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.jarjstl.jar 文件拷贝到 /WEB-INF/lib/ 下。

  1. 增加指令:<%@ 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代表循环状态的变量名称
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小云很优秀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值