Java Web

day13_7-WEB组件交互相关

2020-04-09  本文已影响0人  建国同学

一、请求转发:forward.

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

1.请求转发的特点:

请求转发

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.作用域对象

作用域 类型 描述以及对象的创建
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+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"/>
上一篇 下一篇

猜你喜欢

热点阅读