JavaWeb----重定向和请求转发的区别 jstl标签库和EL表达式 servlet控制层

8 篇文章 0 订阅

1.回顾

1. jsp中9大内置对象:
     out: 输出对象
     request: 请求对象
     response: 响应对象
     session: 会话对象
  ========================================   
     application: 应用对象
     pageContext: 上下文对象。 通过这个对象可以获取其他八个对象。
     page:对象 this
     exception:异常对象
     config: 配置对象
 
2. jsp的4大域对象. ---存储到这个四个对象的数据,它的作用范围不同/
    pageContext: 只在当前页面有效。
    request: 同一个请求内有效。
    session: 同一个会话【用户】
    application: 同一个应用。  setAttribute(key,value)  getAttribute(key);
    
3. 页面跳转 【1】重定向跳转  【2】请求转发跳转。   
    response.sendRedirect("地址");
    request.getRequestDispacther("地址").forward(request,response);

2. 重定向和请求转发的区别

重定向:

 请求转发:

 区别:

1. 重定向地址栏会发生改变,而且会产生新的请求对象。无法获取request保存的数据。
2. 请求转发地址栏不会发生改变,而且用的是同一个请求对象。可以获取request保存的数据。

保存周期越长,占用的资源时间也就越长。 一般我们在开发时大部分数据习惯保存到request对象中。 只要少量的数据保存到session会话中。比如登录时用户的信息保存到session会话中。

3.jstl标签库和EL表达式

3.1.EL表达式

EL表达式-->作用: 获取四大域对象中数据。

​ 语法: ${xxxScope.key}

我们原来通过xxx.getAttribute(key)也可以获取到四大域中的数据,为什么还要使用EL表达式,因为EL表达式语法更加简洁。而且后期可以与我们的jstl标签库一起使用。如果EL表达式没有找到对于的key,则返回空字符串 "".
EL表达式属于jsp或者后面讲解thymeleaf的语法

<%--
  Created by IntelliJ IDEA.
  User: ykq
  Date: 2022/5/16
  Time: 14:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <%
       //往四大域存储数据
       pageContext.setAttribute("name","pageContext的内容");
       request.setAttribute("name","request的内容");
       session.setAttribute("name","session的内容");
       application.setAttribute("name","application的内容");
   %>
<hr>
   通过getAttribute()获取四大域对象的内容<br>
<%=pageContext.getAttribute("name")%><br>
<%=request.getAttribute("name")%><br>
<%=session.getAttribute("name")%><br>
<%=application.getAttribute("name")%><br>
<hr>
    通过el表达式获取四大域对象的内容<br>
    ${pageScope.name}<br>
    ${requestScope.name}<br>
    ${sessionScope.name}<br>
    ${applicationScope.name}<br>
</body>
</html>

el表达式 还可以省略scope ${key} 那么它会从哪个对象中获取数据。默认从pageContext扫描有没有对于的key,如果有则不继续往下扫描了,如果没有则继续往下扫描request, 以此类推。

    不指定范围<br>
   ${name}<br>
   ${name}<br>
   ${name}<br>
   ${name}<br>

3.2 jstl标签库

里面提供了一些常用的标签---比如: 循环标签 判断标签。

使用这些标签的作用是为了减少jsp中java脚本代码的添加。 企业不建议大家在jsp中使用太多的<%%> 这样会使得网页比较乱。 这时就有人提供了JSTL标签库。

如何使用jstl标签库:

(1)web工程中引入jstl标签库的依赖

 (2)在使用jstl标签的jsp网页上引入该标签库

<%--jsp网页的头部引入jstl核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

(3)使用

<%@ page import="com.ykq.entity.User" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %><%--
  Created by IntelliJ IDEA.
  User: ykq
  Date: 2022/5/16
  Time: 15:08
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--jsp网页的头部引入jstl核心标签库--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
   <%
       //这里保存数据的目标就是为了操作方便。这些数据都是从数据库中查询。
       List<User> list=new ArrayList<>();
       list.add(new User(1,"张胜男","北京",25,0));
       list.add(new User(2,"李四","杭州",35,1));
       list.add(new User(3,"王五","上海",15,1));
       list.add(new User(4,"赵六","郑州",55,1));
       request.setAttribute("users",list);//把集合保存到request对象中了。
   %>

   <table border="1" width="500">
       <tr>
           <td>编号</td>
           <td>姓名</td>
           <td>地址</td>
           <td>年龄</td>
           <td>性别</td>
       </tr>
       <!--使用jstl标签库循环遍历request中保存的集合
            forEach遍历:
               items:表示要遍历的集合或数组
               var: 表示遍历集合时,把集合中每个元素的只赋值给该变量
       -->
       <%--
           if: 条件判断
             test:表示条件。如果条件成立则if语句块被执行。
       --%>
       <c:forEach items="${users}" var="u">
           <tr>
               <td>${u.id}</td>
               <td>${u.name}</td>
               <td>${u.address}</td>
               <td>${u.age}</td>
               <c:if test="${u.sex==0}">
                    <td>男</td>
               </c:if>
               <c:if test="${u.sex==1}">
                    <td>女</td>
               </c:if>
           </tr>
       </c:forEach>



   </table>

</body>
</html>

4. servlet 控制层

4.1.什么是servlet?

就是java类代码。它可以接收前端页面传递的数据,同时也可以把后端查询的结果响应给前端,以供前端能把数据展示到jsp网页。

MV:模式 只有视图层(view)--jsp和模型层(model) [dao+entity] 。存在的问题: 因为很多java代码都写在网页里面,随着现在技术的不断发展,view视图不仅有pc视图,还有手机视图,平板视图,智能ai视图。 这些在jsp中插入的java代码需要在别的视图再写一遍。

MVC模式: 视图(view ) 模型(dao+entity) 控制层(servlet)

4.2.为什么使用servlet

4.3 如何使用servlet

 (1) 引入servlet-api.jar包

 (2) 创建一个类并继承HttpServlet父类

public class HelloServlet extends HttpServlet {
}

(3) 重写HttpServlet中service方法。---进行业务处理的

  //可以接受前端传递的参数 也可以把后端查询的数据保存并让前端获取
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

(4) 把自定义servlet配置到web.xml文件中

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    
    <!--注册我们自定义的servlet. 表示该servlet交于tomcat容器帮你创建对象了。
         HelloServlet helloServlet =new HelloServlet();//容器创建
    -->
    <servlet>
        <servlet-name>helloServlet</servlet-name>        //servlet的名称可以自定义只要不重名
        <servlet-class>com.ykq.servlet.HelloServlet</servlet-class>
    </servlet>
    
    <!--配置请求路径与servlet的映射关系-->
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

测试:

4.4 通过servlet完成了登录功能

跟之前的登录一样,无非把处理页面 换为 servlet    然后配置web.xml

  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值