美文网首页Java Web
day13_7-WEB组件交互相关

day13_7-WEB组件交互相关

作者: 建国同学 | 来源:发表于2020-04-09 23:56 被阅读0次

一、请求转发:forward.

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

1.请求转发的特点:

  • 1.地址栏不会发生变化.还是s1.
  • 2.只会有目标资源s2的响应,s1的响应不生效(不要在s1组价中写响应的操作,无效).
  • 3.请求转发只会发出一次请求.可以在请求转发中,在多个组件中进行请求相关信息的数据共享.
    能共享当前请求中的数据
  • 4.请求转发可以访问WEB-INF中的资源,访问WEB-INF也只能使用请求转发.
  • 5.请求转发不可以访问别人(域外)的资源.
      • 相对路径:相对于当前资源所在的路径找对应的资源 如:a在/forward/路径下 直接找名称为b的资源是直接在/forward/下找
      • 绝对路径:从根路径开始找对应的资源 如:a在/forward/路径下 使用/forward/b找资源,此时和a的路径无关
请求转发

2.示例:

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 设置请求和响应的编码,设置了响应的MIME类型
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html ; charset=UTF-8");
        
        // 获取一个请求参数username
        String username = req.getParameter("username");
        System.out.println("begin... a");
        System.out.println(username);
        
        // 获取到请求分发器,请求转发,跳转到BServlet 去完成剩下的工作,后面不执行
        req.getRequestDispatcher("/forward/b").forward(req, resp);
        
        // 请求转发可以进入WEB-INF下的资源
        //req.getRequestDispatcher("/WEB-INF/hello.jsp").forward(req, resp);;
        
        System.out.println("end... a");
        
        // 给浏览器响应
        PrintWriter out  = resp.getWriter();
        out.println("end a,username="+username);

    }

二、重定向:redirect.

常用API: 在HttpServletResponse对象中

    void sendRedirect(java.lang.String location) : 重定向,
        location: 重新定位的资源的地址.

1.重定向的特点:

  • 1.地址栏会发生变化.是s2.
  • 2.只会有目标资源s2的响应,s1的响应不生效.
  • 3.重定向会发送两次请求.在多个组件不能共享请求数据.
  • 4.重定向,不能访问WEB-INF中的资源,相当于是把目标资源放在浏览器的地址栏敲回车.
  • 5.重定向可以访问别人(域外)的资源.

三、 请求转发和重定向的选用

  • 1.如果想在一次请求的多个组件之间可以共享数据,使用请求转发.
  • 2.如果想请求到WEB-INF中的资源,使用请求转发.
  • 3.如果想要访问到域外的资源,使用重定向.

其他的,可以使用请求转发和重定向的,都使用重定向. 通常选中重定向

四、 三大作用域对象

1.作用域对象

作用域 类型 描述以及对象的创建
request HttpServletRequest 在一次请求过程中可以共享数据
session HttpSession 在一次会话过程中,不同的多个请求都可以共享数据.
application HttpSession 在服务器启动过程中,都可以共享的数据.关闭服务器,application消失.(创建到销毁都只有一个ServletContext对象)

2.共享数据的基本操作

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):通过共享数据(属性)的唯一名字,找到对应的值.

五、 EL表达式

EL表达式:可以简化JSP获取共享作用域对象中的数据.

1.目的:

就是从作用域对象中获取数据.从page作用域开始,一直找到,直到找到为止,如果找到,直接返回,如果没找到,返回的是空字符串.

2.语法格式:

${共享数据的属性名.属性名.属性名} request.setAttribute(“共享数据的属性名”,new Employee())
${属性名[“属性名”]}------->属性名不规范的时候使用   如:包含.   -   +

3.EL 表达式获取JavaBean

使用. 的方式:              ${对象.属性} 推荐使用
使用getter 的方式 :   ${对象.getter}
使用[] 的方式:             ${对象[“属性名”]}
推荐使用点的方式,主要,属性命名不能带点等特殊符号

4.示例:

    EL 表达式: ${applicationScope.student} ---> <br/>
    <!-- tomcat7以上支持getName() -->
    <br/>name: ${student.name} --- - ${student.getName()}---${student["name"]}
    <br/>age:  ${student.age}
    <br/>hobby: [爱好2:${student.hobby[1]}]
    <br/>list: ${student.list[0]}
    <br/>map: ${student.map}
    <br/>map.host: ${student.map.host}
    <br/>map.wolfcode.cn: ${student.map["wolfcode.cn"]}

5.EL其他细节

    1. 使用pageContext内置对象来获取上下文路径:


      pageContext内置对象
  • 2.其他内置对象:


    其他内置对象
    指定在session作用域对象中获取数据
  • 3.EL表达式支持运算:

${1+1 /2} <br/>
${1 eq 1} <br/>
<%
    List<String> list = new ArrayList<String>();

    list.add("a");
    request.setAttribute("list",list);
%>
<!-- 判断集合是否为空 -->
${empty list}

六、 JSTL标签库

1.解决什么:

在JSP中写了java代码.使用JSTL消除JSP中的java代码,并优雅的完成数据的显示

  • 常见的标签库:
    核心标签库
    格式化标签库

2.引入方式

JSTL的jar包

3.增加指令

<%@ taglib %>

语法:
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
注意:prefix属性的c 为该标签库起的一个别名,代表uri

4.条件判断

    <c:if test="${num>5}">num 大于5</c:if>
    <c:if test="${num<5}">num 小于5</c:if>
    <c:if test="${num eq 5}">num 等于5</c:if> 
<hr>
    <c:choose>
        <c:when test="${num>5}">num 大于5</c:when>
        <c:when test="${num<5}">num 小于5</c:when>
        <c:when test="${num eq 5}">num 等于5</c:when>
    </c:choose>

5.循环标签

<c:forEach var="num" begin="0" end="20" step="1">
    ${num}
</c:forEach>

<hr/>

<!-- 遍历集合 -->
<c:forEach var="student" items="${list}">
    ${student.name} -> ${student.age}<br/>
</c:forEach>

6.时间格式化标签

<!-- jstl时间标签库 -->
<%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>

<%
    request.setAttribute("date",new java.util.Date());
%>
<fmt:formatDate value="${date}" pattern="yyyy/MM/dd"/>

相关文章

  • day13_7-WEB组件交互相关

    一、请求转发:forward. 常用API: 在HttpServletRequest对象中: 1.请求转发的特点:...

  • Android 的四大组件

    Activity:Activity 是一个负责与用户交互的组件,Activity 中所有操作都与用户密切相关,可以...

  • Angular2 父子组件通信方式

    Angular2官方文档对组件交互这块有详细的介绍-->文档--组件之间的交互。按文档介绍,组件间交互的方式一共有...

  • Activity 详解

    activity是Android四大组件之一,其中所有的操作都与用户密切相关,是一个负责与用户交互的组件,可以通过...

  • [Flutter]flutter基础之组件基础(四)

    一、Button Widget 按钮是开发中常用的可与用户交互的组件,在 Flutter 中,提供了很多跟按钮相关...

  • 设计前的要点-活动设计要点

    交互组件库作用 提高个人小效率 方便多人协作 交互文档样式统一 好的交互组件库 自己愿意用 别人也愿意用 交互设计...

  • VUE组件系统极速入门1

    如何你没有下面几个问题,那这篇文章真的是一无是处。 组件的创建与引用 父组件与子组件的交互 组件与组件间的交互 0...

  • 常用交互组件(一)

    常用交互组件(一) 交互设计中,我们经常会遇到一些通用的组件,这些组件几乎会在每一个app中用到,表面上看这些组件...

  • react-native 初体验

    react-native 常用组件 基础组件: 交互组件(跨平台) TabBarIos 常用属性: TabBarI...

  • 组件 Components丨Framer 文档 Code

    Code 组件相当于把有预定交互的图层打包,下次在用的时候直接调用这个组件,就不用每次都从头创建这个交互。组件可以...

网友评论

    本文标题:day13_7-WEB组件交互相关

    本文链接:https://www.haomeiwen.com/subject/gydkmhtx.html