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

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

重定向

请求转发

 区别:

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

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

2.jstl标签库和EL表达式。

2.1.EL表达式

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

​ 语法: ${xxxScope.key}

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

<%@ 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>

2.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 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>

3. servlet 控制层

3.1 什么是servlet?

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

3.1 为什么使用servlet.

 

3.2 如何使用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-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>

3.3 通过servlet完成了登录功能

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Naaaaa.a

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

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

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

打赏作者

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

抵扣说明:

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

余额充值