IDEA项目实践——会话跟踪、Web当中的jsp编程以及jsp开发模型和EL与JSTL以及过滤器介绍

news/2024/5/18 13:31:20 标签: java, intellij-idea, 前端, IDEA, JSP, EL, JSTL

系列文章目录 

IDEA项目实践——创建Java项目以及创建Maven项目案例、使用数据库连接池创建项目简介

IDEWA项目实践——mybatis的一些基本原理以及案例

IDEA项目实践——动态SQL、关系映射、注解开发

IDEA项目实践——Spring框架简介,以及IOC注解

IDEA项目实践——Spring当中的切面AOP

IDEA项目实践——Spring集成mybatis、spring当中的事务

IDEA项目实践——JavaWeb简介以及Servlet编程实战

文章目录

系列文章目录 

 三、会话跟踪

3.1 Cookie

【案例1 记住密码】

【案例2 上次访问时间】

3.2 Session

【案例1 登录、退出系统案例】

【案例2 购物车案例】

3.3 隐藏的表单域

3.4 URL重写

JSP%E7%BC%96%E7%A8%8B-toc" style="margin-left:0px;">四、JSP编程

JSP%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95-toc" style="margin-left:40px;">4.1 JSP基本语法

(1)HTML模板数据

JSP%E5%85%83%E7%B4%A0-toc" style="margin-left:80px;">(2)JSP元素

I  Java部分-脚本

II  Java部分-指令

(1)page指令

(2)include指令

(3)taglib指令【标签控制】

IIIJava部分-动作(了解)

JSP%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1-toc" style="margin-left:40px;">4.2 JSP内置对象

(1)九个内置对象

1.out对象

2.pageContext对象

3.exception对象

(2)四个作用域

JSP%E5%BC%80%E5%8F%91%E6%A8%A1%E5%9E%8B-toc" style="margin-left:0px;">五、JSP开发模型

MVC

JSP%2BJavaBean-toc" style="margin-left:40px;">Model1:JSP+JavaBean

JSP%2BJavaBean%2BServlet-toc" style="margin-left:40px;">Model2:JSP+JavaBean+Servlet

EL%E4%B8%8EJSTL-toc" style="margin-left:0px;">六、ELJSTL

EL-toc" style="margin-left:40px;">1.EL

JSP%E8%84%9A%E6%9C%AC%E7%9A%84%E7%BC%BA%E7%82%B9-toc" style="margin-left:80px;">(1).JSP脚本的缺点

EL%E8%A1%A8%E8%BE%BE%E5%BC%8F-toc" style="margin-left:80px;">(2).EL表达式

EL%E8%BF%90%E7%AE%97%E7%AC%A6-toc" style="margin-left:80px;">(3).EL运算符

EL%E7%9A%84%E5%8A%9F%E8%83%BD-toc" style="margin-left:80px;">(4).EL的功能

EL%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F%E8%AE%BF%E9%97%AE%E5%AF%B9%E8%B1%A1-toc" style="margin-left:80px;">(5).EL表达式的作用域访问对象

JSTL-toc" style="margin-left:40px;">2.JSTL

七、过滤器

概念

总结


前言

本文主要介绍会话跟踪、Web当中的jsp编程以及jsp开发模型和ELJSTL以及过滤器。

 三、会话跟踪

3.1 Cookie

【案例1 记住密码】

实现效果 当勾选“记住密码”复选框时,下次访问登录页面,会自动记住账号,密码信息。

【案例2 上次访问时间】

实现效果 首次登录,显示“欢迎您,XXX” 下次登录,显示“欢迎您,XXX,您上次登录时间为 yyyy年MM月dd日 hh:mm:ss”

1. 概念: Cookie是客户端会话技术,将数据保存在客户端,以保留了各种跟踪信息。

2. 识别用户包括三个步骤:

(1)服务器脚本向浏览器发送一组 Cookie。例如:姓名、年龄或识别号码等。 (2)浏览器将这些信息存储在本地计算机上,以备将来使用。 (3)当下一次浏览器向 Web 服务器发送任何请求时,浏览器会把这些 Cookie 信息发送到服务器,服务器将使用这些信息来识别用户。

3. 通过 Servlet 设置 Cookie 包括三个步骤:

(1) 创建一个 Cookie 对象:您可以调用带有 cookie 名称和 cookie 值的 Cookie 构造函数,cookie 名称和 cookie 值都是字符串。

 Cookie cookie = new Cookie("key","value");

请记住,无论是名字还是值,都不应该包含空格或以下任何字符:

 [ ] ( ) = , " / ? @ : ;

(2) 设置最大生存周期:您可以使用 setMaxAge 方法来指定 cookie 能够保持有效的时间(以秒为单位)。下面将设置一个最长有效期为 24 小时的 cookie。

 cookie.setMaxAge(60*60*24); 

setMaxAge的参数有如下三种情况:

  1. 正数:将Cookie数据写到硬盘的文件中。持久化存储。并指定cookie存活时间,时间到后,cookie文件自动失效

  2. 负数:默认值,当浏览器关闭后,Cookie数据被销毁

  3. 零:删除cookie信息

(3) 发送 Cookie 到 HTTP 响应头:您可以使用 response.addCookie 来添加 HTTP 响应头中的 Cookie,如下所示:

 response.addCookie(cookie);

4.通过 Servlet 读取 Cookie 要读取 Cookie,您需要通过调用 HttpServletRequest 的 getCookies( ) 方法创建一个 javax.servlet.http.Cookie 对象的数组。然后循环遍历数组,并使用 getName() 和 getValue() 方法来访问每个 cookie 和关联的值。

java"> Cookie[] cookies = request.getCookies();
 for (Cookie cookie : cookies) {
     if (cookie.getName().equals("username")){
         username = cookie.getValue();
     }
     if (cookie.getName().equals("password")){
         password = cookie.getValue();
     }
 }

5.通过 Servlet 删除 Cookie 删除 Cookie 是非常简单的。如果您想删除一个 cookie,那么您只需要按照以下三个步骤进行:

(1)读取一个现有的 cookie,并把它存储在 Cookie 对象中。

(2)使用 setMaxAge() 方法设置 cookie 的年龄为零,来删除现有的 cookie。

(3)把这个 cookie 添加到响应头。

java">//JSP Cookie 保存中文内容,需要对中文进行编码与解码,方法如下:
 String str = java.net.URLEncoder.encode("中文","UTF-8");            //编码
 String str = java.net.URLDecoder.decode("编码后的字符串","UTF-8");   // 解码

3.2 Session

【案例1 登录、退出系统案例】

实现效果 1.登录系统后可在各个页面可以显示登录用户名。 2.当退出系统后,访问非登录页面,显示“请登录”超链接。 (创建/获取Session,删除Session会话数据)

【案例2 购物车案例】

实现效果 1. 2.

  1. 概念:Session是服务端会话技术,将数据保存在服务端,以保留了各种跟踪信息。 提供了一种跨多个页面请求或访问网站时识别用户以及存储有关用户信息的方式。

  2. 使用步骤

  3. 常用方法 (1)获取Session HttpSession session = request.getSession(); (2)设置属性 session.setAttribute("key",value); (3)获取属性 Object value = session.getAttribute("key");--根据情况,进行类型转换 (4)删除属性 session.removeAttribute("key"); (5)销毁session session.invalidate();

3.3 隐藏的表单域

3.4 URL重写

指的是将Session的会话标识号以参数的形式附加在超链接的URL地址后面。

在HttpServletResponse接口中,定义了两个用于完成URL重写的方法:

<1>encodeURL(String url):用于对超链接和form的action中设置的url重写。

<2>encodeRedirectURL(String url): 用于对要传递给response.sendRedirect方法的url重写。

注意:在重写URL是,前面要通过getSession()方法获取Session对象。

JSP%E7%BC%96%E7%A8%8B">四、JSP编程

JSP%E5%9F%BA%E6%9C%AC%E8%AF%AD%E6%B3%95">4.1 JSP基本语法

JSP=HTML+Java

JSP的本质是Servlet

访问JSP的时候

(1)JSP转换成Servlet

(2)执行Servlet文件

(1)HTML模板数据

JSP%E5%85%83%E7%B4%A0">(2)JSP元素

I  Java部分-脚本

  • (1)脚本段:<% 脚本 %>
  • (2)声明: <%! 声明 %>【声明方法、变量等等】
  • (3)表达式:<%= 表达式 %> 注意:表达式后不能加分号
  • (4)注释:<%-- JSP注释 --%>

案例演示

index.jsp文件:

java"><%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    <%!
        //1.声明 会成为 jsp转换的servlet的 成员变量或者成员方法
        //声明方法
        public void test(){
            System.out.println("jsp声明");
        }

        //声明变量
        int num = 10;
    %>
    <%

        //2.只是service方法中,要执行的一段代码
        System.out.println("脚本端");
        int score = 90;

        Date date = new Date();
    %>

    <%--3.表达式会在页面上输出--%>
    <%= 1+2 %>
    <%=score %>

    <%--JSP的注释--%>
    <!--  HTML的注释 -->

    <%
        int a = 1;
        System.out.println(a);

        request.getMethod();
        response.setContentType("text/html");
        config.getInitParameter("");
        session.getAttribute("");
        application.getRealPath("");
        page.toString();

        out.println();
        pageContext.getAttribute("");

        exception.getMessage();

    %>

    <%=score%>
    <%
        out.println(score);
    %>
</body>
</html>

 jsp注释与HTML注释区别:

II  Java部分-指令

(1)page指令

语法:<%@ page 属性1=值1 属性2=值2... %>

java"> <%@ page language=”java” import=”java.util.*” contentType="text/html; charset=utf-8" session="true/false" errorPage="url" isErrorPage="true/false" buffer="" %>

导包需要放在配置指令里面导入

注意:在一个JSP页面中可以使用多个<%@page %>指令,但其中的属性只能用一次,不过import属性例外,它可以多次出现,引入多个类和包,这和Java中的import语句差不多。

(2)include指令

语法:

<%@ include file="相对的URL" %>

作用:静态包含

注意:

被引入的文件必须遵循JSP语法。

被引入的文件可以使用任意的扩展名,但都会被JSP引擎按照JSP页面的处理方式去处理,为了见名知意,建议使用“.jspf”(JSP fragment,即JSP片段)作为静态引入文件的扩展名。

被引入的文件中不要包含<html></html>、<body></body>等标记,因为这样会影响引入文件中同样的标记。

引入和被引入文件中的指令不能冲突(page指令中的pageEncoding和import属性除外)。

此处做一演示,添加一个total.jsp的文件【这个是总的页面】

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="header.jsp"%>
<style>
    div{
        margin: 0px auto;
        width: 1000px;
        height: 200px;
        background-color: blueviolet;
    }
</style>
<body>
    <div>
        <h1>页面主体内容</h1>
    </div>
</body>
<%@ include file="footer.jsp"%>

写一个header.jsp文件:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        div{
            margin: 0px auto;
            width: 1000px;
            height: 200px;
            background-color: aqua;
        }
    </style>
</head>
<body>
<div><h1>Header</h1></div>
</body>
</html>

编写一个footer.jsp文件:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
    <style>
        div{
            margin: 0px auto;
            width: 1000px;
            height: 200px;
            background-color: antiquewhite;
        }
    </style>
</head>
<body>
    <div>CopyRight:@......</div>
</body>
</html>

运行的效果如上图所示 

(3)taglib指令【标签控制】
 <%@ taglib uri=”” prefix=”” %>

作用:是减少jsp页面中的java代码

IIIJava部分-动作(了解)

(1)<jsp:include>动作元素

语法:

 <jsp:include page="relativeURL" flush="true|false" />
     page属性用于指定被引入资源的相对路径
     flush属性用于指定是否将当前页面的输出内容刷新到客户端。

作用:把其他资源的输出内容插入到当前JSP页面的输出内容中。----动态包含

案例:

<%@--     include.jsp     --%>
 ​
 <%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
                         "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>include</title>
 </head>
 <body>
     <%Thread.sleep(5000);%>
     included.jsp内的中文<br />
 </body>
 </html>
 <%@--     dynamicInclude.jsp     --%>
 ​
 <%@ page language="java" contentType="text/html; charset=UTF-8"
     pageEncoding="UTF-8"%>
 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                           "http://www.w3.org/TR/html4/loose.dtd">
 <html>
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 <title>dynamicInclude page</title>
 </head>
 <body>
     dynamicInclude.jsp内的中文
     <br>
     <jsp:include page="included.jsp" flush="true" />
     <%--对比:flush为true和false的区别。--%>
     <%--<jsp:include page="included.jsp" flush="false" />--%>
 ​
     dynamicInclude.jsp内的中文2
 </body>
 </html>

include指令和<jsp:include>标签有很大的区别:

  • <jsp:include>标签要引入的资源和当前JSP页面是两个彼此独立的执行实体,即被动态引入的资源必须能够被Web容器独立执行。而include指令只能引入遵循JSP格式的文件,被引入文件与当前JSP文件需要共同合并才能翻译成一个Servlet源文件。

  • <jsp:include>标签要引入的资源是在运行时才包含的。而include指令引入的资源是在编译时期包含的,包含的是源代码。

  • <jsp:include>标签运行原理与RequestDispatcher.include()方法类似,即被包含的页面不能改变响应状态码或者设置响应头,而include指令没有这方面的限制。

(2)<jsp:forward>动作元素

语法:

 <jsp:forward page="relativeURL" />

类似:请求转发

JSP%E5%86%85%E7%BD%AE%E5%AF%B9%E8%B1%A1">4.2 JSP内置对象

(1)九个内置对象

jsp的内置对象:JSP内置对象是不需要声明和创建就可以在JSP页面脚本中使用的成员变量。

九个内置对象:

1.out对象

JSP页面中,经常需要向客户端发送文本内容,这时,可以使用out对象来实现。out对象是javax.servlet.jsp.JspWriter类的实例对象,它的作用与ServletResponse.getWriter()方法返回的PrintWriter对象非常相似,都是用来向客户端发送文本形式的实体内容。不同的是,out对象的类型为JspWriter,它相当于一种带缓存功能的PrintWriter。接下来,通过一张图来描述JSP页面的out对象与Servlet引擎提供的缓冲区之间的工作关系,具体如图所示。

从图可以看出,在JSP页面中,通过out隐式对象写入数据相当于将数据插入到JspWriter对象的缓冲区中,只有调用了ServletResponse.getWriter()方法,缓冲区中的数据才能真正写入到Servlet引擎所提供的缓冲区中。

通过一个案例演示out对象的使用:

 <%@ page language="java" contentType="text/html; charset=UTF-8" %>
 <html>
 <head>
 <title>Insert title here</title>
 </head>
 <body>
     <%
         out.println("first line<br />"); //写入JspWriter对象的缓冲区
         response.getWriter().println("second line<br />");//写入servlet引擎提供的缓冲区,即Response缓冲区
     %>
 </body>
 </html>

注意:内容的输出顺序。

多学一招:使用page指令设置out对象的缓冲区大小

<%@ page language="java" contentType="text/html; charset=UTF-8" buffer="0kb"%>

2.pageContext对象

pageContext对象是javax.servlet.jsp.PageContext类的实例对象,它代表当前JSP页面的运行环境。

(1)pageContext对象获取隐式对象的方法:

(2)pageContext对象不仅提供了获取隐式对象的方法,还提供了存储数据的功能。pageContext对象存储数据是通过操作属性来实现的,下表列举了pageContext操作属性的一系列方法,具体如下:

上表列举了pageContext对象操作属性的相关方法,其中,参数name指定的是属性名称,参数scope指定的是属性的作用范围。pageContext对象的作用范围有4个值,具体如下:

  • pageContext.PAGE_SCOPE:表示页面范围

  • pageContext.REQUEST_SCOPE:表示请求范围

  • pageContext.SESSION_SCOPE:表示会话范围

  • pageContext.APPLICATION_SCOPE:表示Web应用程序范围

需要注意的是,当使用findAttribute()方法查找名称为name的属性时,会按照page、request、session和application的顺序依次进行查找,如果找到,则返回属性的名称,否则返回null。

3.exception对象

JSP页面中,经常需要处理一些异常信息,这时,可以通过exception对象来实现。exception对象是java.lang.Exception类的实例对象,它用于封装JSP中抛出的异常信息。需要注意的是,exception对象只有在错误处理页面才可以使用,即page指令中指定了属性<%@ page isErrorPage=”true”%>的页面。

(2)四个作用域

作用: 共享数据

(1)pageContext :数据只能在当前页面使用

(2)request

(3)session

(4)application

附录:

1.使用IntelliJ IDEA编译jsp文档后servlet的存储路径

路径:

C:\Users\Administrator.IntelliJIdea2017.2\system\tomcat\Unnamed_MovieSystem\work\Catalina\localhost\

2.如何修改这个路径参照此文:Idea 临时文件路径修改 - 简书

JSP%E5%BC%80%E5%8F%91%E6%A8%A1%E5%9E%8B">五、JSP开发模型

MVC

1.JSP演化历史

1. 早期只有servlet,只能使用response输出标签数据,非常麻烦

2. 后来有了jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护,难于分工协作

3. 再后来,java的web开发,借鉴mvc开发模式,使得程序的设计更加合理性

2.MVC详解

1. M:Model模型(JavaBean)

* 完成具体的业务操作,如:查询数据库,封装对象

2. V:View视图(JSP

* 展示数据

3. C:Controller控制器(Servlet)

* 获取用户的输入

* 调用模型

* 将数据交给视图进行展示

3.优缺点:

1. 优点:

1. 耦合性低,方便维护,可以利于分工协作

2. 重用性高

2. 缺点:

1. 使得项目架构变得复杂,对开发人员要求高

JSP%2BJavaBean">Model1:JSP+JavaBean

JSP%2BJavaBean%2BServlet">Model2:JSP+JavaBean+Servlet

EL%E4%B8%8EJSTL">六、ELJSTL

EL">1.EL

JSP%E8%84%9A%E6%9C%AC%E7%9A%84%E7%BC%BA%E7%82%B9">(1).JSP脚本的缺点

使用JSP脚本可以实现页面输出显示,那为什么还需要使用EL简化输出呢?这是因为单纯使用JSP脚本与HTML标签混合,实现输出显示的方式存在一些弊端,归纳如下:

  • 代码结构混乱,可读性差。

  • 脚本与HTML标签混合,容易导致错误。

  • 代码不易维护。

核心作用:

减少jsp中的java代码 [注意:el只能用在jsp中]

EL%E8%A1%A8%E8%BE%BE%E5%BC%8F">(2).EL表达式

(1)EL表达式

EL是Expression Language的缩写,它定义了一系列的隐含对象和操作符,使开发人员能够很方便地访问页面内容,以及不同作用域内的对象,而无须在JSP中嵌入Java代码,从而使得页面结构更加清晰,代码可读性更高,也更加便于维护。

(2)EL表达式的语法

语法:${EL表达式}

语法结构中包含"$"符号和”{}“括号,二者缺一不可。

使用EL表达式也非常简单,如${username}就可以实现访问变量username的值。

注意:使用EL表达式获取变量前,必须将操作的对象保存到作用域中。

此外,使用EL表达式还可以访问对象的属性,这就需要使用“.”操作符和“[ ]”操作符来完成。

  • “.”操作符

EL表达式通常由对象和属性两部分组成。因此采用与Java代码一样的方式,用“.”操作符来访问对象的属性。

例如:${news.title}可以访问news对象的title属性。

  • “[ ]”操作符

“[ ]”操作符的使用方法与“.”操作符类似,不仅可以用来访问对象的属性,还可以用于访问数组和集合。例如:

①访问对象的属性:${news["title"]}可以访问news对象的title属性。

②访问数组:${newsList[0]}可以访问newsList数组中的第一个元素。

示例代码:

<%@ page import="java.util.ArrayList" %>
 <%@ page import="java.util.Date" %>
 <%@ page contentType="text/html;charset=UTF-8" language="java"%>
 <html>
 <head>
     <title>EL表达式</title>
 </head>
 <body>
 <h1>EL表达式</h1>
 <%
     String username = "tom";
     //将变量添加到作用域中
     request.setAttribute("username",username);
     request.setAttribute("student.name","张三");
     ArrayList list = new ArrayList();
     list.add("新冠疫情");
     list.add("俄乌战争");
     //将集合添加到作用域中
     request.setAttribute("list",list);
     //将日期对象添加到作用域中
     Date date = new Date();
     request.setAttribute("date",date);
 %>
     //访问变量 <br>
     ${username}<br>
     //含有特殊字符的变量 <br>
     ${requestScope["student.name"]}<br>
     //访问集合 <br>
     ${list[1]}<br>
     //访问对象 <br>
     ${date.date}<br>
     //读取参数 (需要从地址栏传参数,例如:http://localhost:8088/ELDemo.jsp?num=1)<br>
     ${param.num}<br>
     //读取参数 (需要从地址栏传参数,例如:http://localhost:8088/ELDemo.jsp?num=1&hobby=a&hobby=b&hobby=c)<br>
     ${paramValues.hobby[2]}<br>
 </body>
 </html>

运行效果:

提示:

①使用“[ ]”操作符访问数据时,必须在属性名两侧使用双引号

EL表达式区分大小写。

③在使用EL表达式获取变量前,必须先将对象保存到作用域中。

表达式分类:

(1) 普通表达式

(2) 读取单值基本数据类型)

(3) 读取多值对象

EL的隐含对象:

序号隐含对象描述
1pageScopepage 作用域
2requestScoperequest 作用域
3sessionScopesession 作用域
4applicationScopeapplication 作用域
5paramRequest 对象的参数,字符串
6paramValuesRequest对象的参数,字符串集合
7headerHTTP 信息头,字符串
8headerValuesHTTP 信息头,字符串集合
9initParam上下文初始化参数
10cookieCookie值
11pageContext当前页面的pageContext,通过pageContext可以访问ServletContext,Request,Response,Session等

前四个是作用域【使用较多】,第五第六获取参数。

EL%E8%BF%90%E7%AE%97%E7%AC%A6">(3).EL运算符

EL表达式支持多种运算符,这些运算符的使用方法与Java运算符非常类似。另外,在EL表达式中,为了避免一些运算符在使用时与HTML页面标签发生冲突,会采用其他符号进行替代。

操作符描述
.访问一个Bean属性或者一个映射条目
[]访问一个数组或者链表的元素
( )组织一个子表达式以改变优先级
+
-减或负
*
/ or div
% or mod取模
== or eq测试是否相等
!= or ne测试是否不等
< or lt测试是否小于
> or gt测试是否大于
<= or le测试是否小于等于
>= or ge测试是否大于等于
&& or and测试逻辑与
|| or or测试逻辑或
! or not测试取反
empty测试是否空值

EL的运算符: (1) 算术运算符 (2) 关系运算符 (3) 逻辑运算符 (4) Empty运算符 (5) 条件运算符 例子:${2 > 1 ? "yes" : "no" }

EL%E7%9A%84%E5%8A%9F%E8%83%BD">(4).EL的功能

对于EL的特点和作用,归纳总结如下:

  • 可用于获取JavaBean的属性。

  • 能够读取集合类型对象中的元素。

  • 可使用运算符进行数据处理。

  • 可屏蔽一些常见异常。

  • 可自动实现类型转换。

EL%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E4%BD%9C%E7%94%A8%E5%9F%9F%E8%AE%BF%E9%97%AE%E5%AF%B9%E8%B1%A1">(5).EL表达式的作用域访问对象

JSP提供了4种作用域,分别是page、request、session和application。为了能够访问这4个作用域内的数据,EL表达式也分别提供了4种作用域访问对象来实现数据的读取。这4个作用域访问对象的比较如下:

名称说明
pageScope与页面作用域(page)中的属性相关联的Map类,主要用于获取页面范围内的属性值
requestScope与请求作用域(request)中的属性相关联的Map类,主要用于获取请求范围内的属性值
sessionScope与会话作用域(session)中的属性相关联的Map类,主要用于获取会话范围内的属性值
applicationScope与应用程序作用域(application)中的属性相关联的Map类,主要用于获取应用程序范围内的属性值

当使用EL表达式访问某个属性值时,应当指定查找的范围。如果程序中未指定查找的范围,那么系统会自动按照page → request → session → application的顺序进行查找。

使用作用域访问对象读取属性值非常简单,只需要使用“作用域名称 .”方式即可实现。

总结:

EL作用域/参数/信息头/初始化参数/cookie中获取数据,显示到JSP页面。

JSTL">2.JSTL

使用EL表达式已经实现了页面输出显示的优化,为什么还需要使用JSTL呢?这是因为使用EL表达式无法实现逻辑处理,如循环、条件判断等,因此还需要与Java代码混合使用,而JSTL则可以实现逻辑控制,从而进一步优化代码。

(1).JSTL简介

概念:JSTL(Java Server Pages Strandard Tag Library,JSP标准标签库)包含了在开发JSP时经常用到的一系列标准标签。这些标签提供了一种不用嵌套Java代码就可以实现复杂JSP开发的途径。

主要功能:实现JSP页面中的逻辑控制

分类:JSTL按照不同的用途又可以划分为多个分类:

标签库名称资源标示符(uri)前缀(prefix)
核心标签库http://java.sun.com/jsp/jstl/corec
国际化/格式化标签库http://java.sun.com/jsp/jstl/fmtfmt
XML标签库http://java.sun.com/jsp/jstl/xmlx
数据库标签库http://java.sun.com/jsp/jstl/sqlsql
函数标签库http://java.sun.com/jsp/jstl/functionsfn

JSTL使用步骤:

1.下载jstl.jar和standard.jar包

Index of /dist/jakarta/taglibs/standard/binaries

2.将这两个包复制到WEB-INF\lib目录,并添加到项目中。

3.在JSP页面中添加指令

 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

标签总结:

标签名称作用
<c:out />输出文本内容到out对象,常用于显示特殊字符,显示默认值
c:set/在作用域中设置变量或对象属性的值
c:remove/在作用域中移除变量的值
c:if/实现条件判断结构
c:forEach/实现循环结构
c:url/构造url地址
c:param/在url后附加参数
c:import/在页面中嵌入另一个资源内容
fmt:formatDate/格式化时间
fmt:formatNumber/格式化数字

七、过滤器

概念

过滤器,顾名思义,就是在源数据和目的数据之间起过滤作用的中间组件

过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理

过滤器可以实现以下目的:

  • 在客户端的请求访问后端资源之前,拦截这些请求。

  • 在服务器的响应发送回客户端之前,处理这些响应。

过滤器要实现的接口是Filter(javax.servlet包中) 过滤器的三个重要方法: (1) Init(FilterConfig config) (2) doFilter(ServletRequest request,ServletResponse response,FilterChain chain) chain.doFilter(request,response);//将请求传给下一个过滤器或目标资源。 (3) destory()销毁

过滤器的配置:

(1)xml配置

javascript">   <filter>
     <filter-name>EncodingFilter</filter-name>
     <filter-class>com.ambow.filter.EncodingFilter</filter-class>
     <init-param>
             <param-name>encoding</param-name>
             <param-value>utf-8</param-value>
     </init-param>
   </filter>
   <filter-mapping>
     <filter-name>EncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>

Servlet和过滤器不同的在URL里面,过滤器一般写的是*,指的拦截大多数的url

(2)注解配置 在Servlet3.0之后,可以使用注解进行配置

javascript"> @WebFilter( filterName = "LoginFilter",urlPatterns = { "/jsps/cart/*", "/jsps/order/*" }, servletNames = { "CartItemServlet", "OrderServlet" })
 public class LoginFilter implements Filter {
                ...
 }

注解配置参考:https://www.cnblogs.com/ooo0/p/10360952.html

重点应用:

统一字符编码

统一权限验证

过滤放行之前,每次都要被先执行

过滤链filterchain去调用请求

总结

以上就是今天的内容~

欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

最后:转载请注明出处!!!


http://www.niftyadmin.cn/n/4960869.html

相关文章

在mac下,使用Docker安装达梦数据库

前言&#xff1a;因为业务需要安装达梦数据库 获取官网下载tar包&#xff08;达梦官网的下载页面https://www.dameng.com/list_103.html&#xff09;&#xff0c;或者通过命令 一、下载tar包 命令下载&#xff1a;wget -O dm8_docker.tar -c https://download.dameng.com/eco/…

SpringBoot+WebSocket搭建多人在线聊天环境

一、WebSocket是什么&#xff1f; WebSocket是在单个TCP连接上进行全双工通信的协议&#xff0c;可以在服务器和客户端之间建立双向通信通道。 WebSocket 首先与服务器建立常规 HTTP 连接&#xff0c;然后通过发送Upgrade标头将其升级为双向 WebSocket 连接。 WebSocket使得…

使用IDEA把Java程序打包成jar

点击左上角File,选择Project Structure 左侧选中Artifacts,点击右侧的号 选择JAR->From modules with dependencies 选择你要运行的main方法所在的类,选好了点击OK Artifacts添加完成后点击右下角OK 在工具栏中找到Build,选择Build Artifacts 刚才创建好的Artifacts,选择Bui…

运维作业7

1、使用mysql:5.6和 owncloud 镜像&#xff0c;构建一个个人网盘。 1&#xff09;拉取mysql5.6和owncloud镜像 2)登录本机ip地址&#xff0c;输入用户名密码 2、安装搭建私有仓库 Harbor 1)安装docker-compose编排工具 2&#xff09;安装harbor [rootserver ~]# tar xf harbor-…

SQL Server 数据库优化分享

随着数据量和业务复杂性的增加&#xff0c;数据库优化变得越来越重要。通过对 SQL Server 数据库进行优化&#xff0c;您可以提高查询性能、减少资源消耗&#xff0c;从而改善整体系统性能。以下是一些优化技巧&#xff0c;可帮助您实现更高效、更可靠的数据库操作。 使用恰当的…

Vue的Ajax请求-axios、前后端分离练习

Vue的Ajax请求 axios简介 ​ Axios&#xff0c;是Web数据交互方式&#xff0c;是一个基于promise [5]的网络请求库&#xff0c;作用于node.js和浏览器中&#xff0c;它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.js http模块, 而在…

LLM赋能产业数智化业务系统升级的思考

1概述 2022年是人工智能的一个分水岭&#xff0c;ChatGPT&#xff0c;DALL E[ DALL E&#xff1a;是一款可以根据文本描述创建图像的AI工具。]和Lensa[ Lensa&#xff1a;是一款AI美图软件。]等几个面向消费者的应用程序发布了&#xff0c;它们的共同主题是使用生成式人工智能&…

【Linux】socket编程(一)

目录 预备知识 理解源ip地址和目的ip地址 认识端口号 理解"端口号"和"进程ID" 认识TCP和UDP协议 网络字节序 socket编程接口 socket常见API socket bind listen accept conncet sockaddr与sockaddr_in socket的使用(简易UDP网络程序的编…