EL和JSTL标签库以及servlet 控制层

本文介绍了Web开发中的几个关键概念:重定向与请求转发的区别,包括它们在地址栏显示和数据获取上的不同;EL表达式的使用,用于从四大域对象中获取数据,并演示了如何在JSP中使用EL表达式;JSTL标签库的引入和应用,展示了如何使用循环和条件判断标签简化JSP代码;最后,概述了Servlet的作用及其在处理请求和响应中的流程,强调了使用Servlet进行业务处理的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、重定向和请求转发

重定向:

请求转发 :

区别

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

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

 

2、EL表达式

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

语法: ${xxxScope.key}

<%@ 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、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" %>
<%@ 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 控制层

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

使用servlet的好处:

使用servlet的流程:

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

public class HelloServlet extends HttpServlet {
}

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

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

    }

(3) 把自定义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>

 

5、使用servlet完成了登录功能

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值