当前位置: 首页 > article >正文

JSP简述

JSP

JSP的本质是一个Servlet,JSP主要负责与用户进行交互,将最终的界面呈现给用户,HTML+JS+CSS+JAVA的混合文件

当服务器接收到一个后缀是JSP的请求时,将该请求交给JSP引擎去处理,每一个JSP页面第一次被访问时,JSP引擎会将他翻译成Servlet文件,由Web容器调用servlet完成响应。

从开发的角度看,JSP就是在HTML中嵌入Java程序

嵌入方式

1.JSP脚本:执行逻辑代码

 <%
         JAVA代码
 %>

其中的Java代码在控制台输出

2.JSP声明:定义Java方法

 <%!
     声明Java方法
 %>

3.JSP表达式:把Java对象直接输出到HTML页面

 <%=
     JAVA遍历
 %>

JSP内置对象

JSP提供的可以直接使用的对象 一共有九个

1.request 2.response 3.pageContext 4.session 5. application 6.config 7.out 8.page 9.exerption

1.request 表示一次请求,由httpservletRequest

2.response 表示一次响应,由httpservletResponse

3.pageContext 页面上下文,获取页面信息 由pageContext

4.session 表示一次会话 ,用来保存用户信息 HttpSession

5.application 表示当前的web应用,全局对象,保存所有用户信息ServletContext

6.config 表示当前JSP对应Servlert 的servletconfig 对象,获取servlet 信息

7.out 向浏览器输出数据 JSPWriter

8.page 当前 JSP 对应的 servlet 对象 servlet

9.exerption 表示jsp 页面发生的异常 Exception

常用的 request response session application pagecontest

request 常用方法:

1、String getParameter(String key) 获取客户端传来额的参数

2、void setAttribute(String key object value) 通过键值对的形式保存数据

3.object getAttribute(String key) 通过key值取出value

4.getrequestDispatcher(String path) 返回一个requestdispatcher对象,该对象的forword方法用于转发请求

5.String[] getparametervalues() 获取客户端传来的多个同名参数

6.void setcharaterEncoding(String charset) 指定每个请求的编码

http码: 200 正常但不显示

404 资源找不到

400 请求类型不匹配

500 Java程序抛出异常

response常用方法:

  • 1.sendredirect(string path) 重定向,页面之间的跳转

转发(getrequestdispispatcher)与重定向(sendredirect):

转发是将同一个请求传给下个页面

重定向是将一个新请求传给下个对象,之前的请求结束

转发:同一个请求在服务器之间传递,地址栏不变,也叫服务器跳转

重定向:由客户端发送一次新的请求来访问跳转之后的目标资源,地址栏改变,客户端请求.

如果两个页面之间需要request来传值,则必须使用转发,不能使用重定向

  • 2.setContentType(String type): 设置响应的内容类型,例如text/htmlapplication/json

  • 2.getWriter(): 获取一个PrintWriter对象,用于向客户端发送文本数据。

  • 3.setStatus(int status): 设置HTTP响应的状态码,例如200 OK404 Not Found

  • 4.addCookie(Cookie cookie): 向响应中添加一个cookie。

  • 5.setHeader(String name, String value): 设置指定响应头的值。

  • 6.sendError(int sc): 发送一个错误响应到客户端。

session常用方法:

用户会话 服务器无法识别每一个HTTP请求的出处(不知道来自哪个终端),他只会接受到一个请求信号,所以就存在将用户的想用请求发给其他人,必须有一种技术来让服务器知道请求来自呢,

会话:就是客户端与服务器之间发生的一系列连续的请求和响应的过程.

会话状态:指服务器和浏览器在会话过程中产生的状态信息,借助于会话状态,服务器能够把属于同一次会话的一系列请求和响应关联起来

实现会话的两种方式:

session: 储存客户信息,服务端

cookie: 存储用户信息,客户端

属于同意会话的请求都有一个相同的标识符,sessionID

String getid() 获取当前会话的ID

void setmaxInactiveinterval(int interval) 设置session的失效时间,单位为秒

int getmaxInactiveinterval() 获取当前session失效时间

void invalidate() 设置session立即失效 一般在退出登录是使用

void setattribute(string key object value) 通过键值对的形式储存数据

object getattribute(string key) 通过键值获取对应的数据

void removeattribute(string key) 删除

cookie

实现会话的一种机制,

Cookie 是服务端在 HTTP 响应中附带传给浏览器的一个小文本文件,一旦浏览器保存了某个 Cookie,在之后的请求和响应的过程中,会将其 Cookie 来回传递,这样就可以通过 Cookie 这个载体完成客户端和服务端的数据交互。

创建cookie

 Cookie cookie = new Cookie("name", "tom");
 response.addCookie(cookie);
  • void setMaxAge(int age) 设置 Cookie 的有效时间,单位为秒

  • int getMaxAge() 获取 Cookie 的有效时间

  • String getName() 获取 Cookie 的 name

  • String getValue() 获取 Cookie 的值

Cookie常用的方法

  • void setMaxAge(int age) 设置 Cookie 的有效时间,单位为秒

  • int getMaxAge() 获取 Cookie 的有效时间

  • String getName() 获取 Cookie 的 name

  • String getValue() 获取 Cookie 的值

Session和Cookie的区别

  • session:保存在服务器

    • 保存的数据是 Object

    • 会随着会话的结束而销毁

    • 保存重要信息

  • cookie:保存在浏览器

    • 保存的数据是 String

    • 可以长期保存在浏览器中,无会话无关

存储用户信息:

session: setAttribute("name","admin") 存 getAttribute("name") 取 生命周期:服务器端:只要WEB应用重启就销毁,客户端:只要浏览器关闭就销毁。 退出:sessioninvalidate

cookie: response.addCookie(new Cookie(name,"admin"))

代码部分:

 Cookie[] cookies = request.getCookies();
 for (Cookie cookie:cookies){
      if(cookie.getName().equals("name")){
          out.write("欢迎回来+"+cookie.getValue());
      }
 }

退出:setmaxage(0) 生命周期:不随服务器端的重启而销毁,客户端:默认是只要浏览器关闭浏览器就销毁,我们通过setMaxAge()方法设置有效期,一旦设置了有效期,则不随浏览器的关闭而销毁,而是由设置的时间来决定

JSP内置对象的作用域

  • 4个

    • page, request, session, application

    • setAttribute, getAttribute

  • page 作用域:对应的内置对象是 pageContext。

  • request 作用域:对应的内置对象是 request。

  • session 作用域:对应的内置对象是 session。

  • application 作用域:对应的内置对象是 application。

  • page < request < session < application

page只在当前页面有效

request在同一请求中有效

根据你提供的图片内容,这里是提取的文字:

  • 顶部文字:

    • "session 在一次会话内有效。"

    • "application 对应整个WEB应用的。"

    • "● 网站访问量统计"

  • 代码内容:

     Integer count = (Integer) application.getAttribute("count");
     if(count == null){
         count = 1;
         application.setAttribute("count", count);
     } else{
         count++;
         application.setAttribute("count", count);
     }

EL表达式

expression language 表达式语言,替代JSP页面中数据访问时的复杂编码,可以非常便捷的取出域对象中保存的数据,前提是一定要先把setattribute,EL就相当于简化的getattribute

表达式

 $变量名就是setattribute 对应的key值
  1. EL对于4种域对象的默认查找顺序: pageContext.request.session.application 按照上述的顺序进行查找,找到立即返回,在application 中也无法找到,则返回 null

  2. 指定作用域进行查找 pageContext: $(pageScope.name) request: $(requestScope.name) session: $(sessionScope.name) application: $(applicationScope.name)

以及EL表达式操作符的说明:

 && and
 || or
 ! not
 == eq
 != ne
 < lt
 > gt
 <= le
 >= ge
 ​
 null empty变量为null,长度为0的string size 为零的的集合

JSTL

JSP Standard Tag Library JSP 标准标签库,JSP 为开发者提供的一系列标签,使用这些标签可以完成一些逻辑处理,比如循环遍历集合,让代码更加简洁,不再出现 JSP 脚本穿插的情况。

实际开发过程中 EL 和 JSTL 结合起来使用,JSTL负责逻辑处理 EL负责展示

JSTL的使用

  1. 需要导入 jar 包(两个 jstl.jar standard.jar)存放位置web里的web-inf

  1. 在JSP页面开始的地方导入JSTL标签库

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  1. 在需要的地方使用

<c:forEach items="${list}" var="user">
    <tr>
        <td>${user.id}</td>
        <td>${user.name}</td>
        <td>${user.score}</td>
        <td>${user.address.value}</td>
    </tr>
</c:forEach>

JSTL优点:

1.提供了统一的标签

2.可以用于编写各种动态的功能

常用标签:

  • set、out、remove、catch

标签:
set: 向域对象中添加数据

<%
request.setAttribute(key,value)
%>
<c:set var="name" value="tom" scope="request"></c:set>
${requestScope.name}
<%
User user = new User(1,"张三",66.6,new Address(1,"科技路"));
request.setAttribute("user",user);
%>
${user.name}
<hr/>
<c:set target="${(user)}" property="name" value="李四"></c:set>
${user.name}

out: 输出域对象中的数据
<c:set var="name" value="tom"></c:set>
<c:out value="${(name)}" default="未定义"></c:out>
${user,name}

remove: 删除域对象中的数据
<c:remove var="name" scope="page"></c:remove>
<c:out value="${name}" default="未定义"></c:out>

catch: 捕获异常
<c:catch var="error">
    <%
     int a = 10/0;
     %>
</c:catch>

条件标签


http://www.kler.cn/a/282655.html

相关文章:

  • 聊聊Flink:Flink的分区机制
  • Array数组方法
  • H.265流媒体播放器EasyPlayer.js H.264/H.265播放器chrome无法访问更私有的地址是什么原因
  • LeetCode面试经典150题C++实现,更新中
  • 【JavaEE初阶 — 多线程】死锁的产生原因和解决方法
  • LeetCode题解:5.最长回文子串【Python题解超详细,中心拓展、动态规划、暴力解法】
  • 数据结构-单链表-详解-1
  • 外包干了两年,快要废了。。。
  • react学习之useState和useEffect
  • java一键生成数据库说明文档html格式
  • 多项目同时进行:如何做好进度管理
  • 阿里龙晰系统上将yum安装的myql_8.0.36升级到mysql_8.4.0的过程
  • Ubuntu下修改Ollama的模型存储路径
  • Qt与SVG
  • Vue3-win7搭建vue3环境
  • FGF23:家族靶向治疗先行者
  • 【Rust光年纪】保护用户数据安全隐私:探秘Rust机密计算与安全库
  • Ubuntu24.04 安装向日葵远程访问工具
  • nginx部署前端vue项目
  • LaViT:Less-Attention Vision Transformer的特性与优点
  • 【Python机器学习】NLP分词——利用分词器构建词汇表(五)——将词汇表扩展到n-gram
  • Linux操作系统su命令详解,附代码
  • 牛客小白月赛99 F-自爆机器人
  • Java 集合Collection(List、Set)Map
  • 高级java每日一道面试题-2024年8月28日-基础篇-ArrayList的底层工作原理?
  • SELF-INSTRUCT: Aligning Language Modelswith Self-Generated Instructions 学习