JavaWeb中JSP和Servlet的相关知识

2023-11-11

JSP注释代码:<%–(包围)–%>
引入JAVA包(举例):<%page import ‘java.util.*’%>
JSP中的JAVA代码块:
<%(包围)%> 在此代码块中可以定义变量和方法,定义的变量为局部变量
<%!(包围)%> 定义表达式,只能定义变量,且定义的变量为成员变量
<%=(包围)%> 输出表达式,直接向网页显示包含内容的value

局部变量:执行 JSP时,系统都自动给运行的JSP 生成一个类,写在<%%>块里的代码会被当成一个方法生成,在java中,方法中定义的变量在方法结束后就销毁了,所以在<%%>中定义的变量都是局部变量

成员变量:同上系统会为jsp生成一个java类,写在<!%%>中的代码对应生成的是java类中成员变量,只会在对象创建时初始化,再次访问对象不会再次初始化
jsp中最常用的内置对象request和response:

request: 接收并处理从客户端发送过来的请求包,request对象的方法都是对客户端发送过来的信息进行信息提取
处理客户端发送的数据

response: 向客户端发送响应包,可以直接向客户端(浏览器)发出操作指令,例如页面跳转(相当于自动在浏览器地址栏输入URL回车)
给客户端发送数据

请求转跳(服务器转跳):

在客户端,也就是浏览器发送依次请求时,服务端都会新建一个request和response对象,每次请求所生成的对象都是新的,只要有新的请求出现,保存在原request对象中的数据就会丢失,比如使用request.setAttribute保存的信息就无法保存下来,除非使用request的请求跳转(getRequestDispatcher),把当前页面的request和response对象传送给新的页面,就可以保存对象里的信息了
示例:

request.getRequestDispatcher("xxx.jsp").forward(request,response);

相当于发送给原页面的信息被该页面传递给一个新的页面,新的页面不需要重新创建request和response对象,可以保证客户端发送的请求信息不丢失(例如表单信息)但是客户端(浏览器)并不会地址栏不会显示新的网址,因为没有使用到response对象进行操作,不能直接控制客户端浏览器使用response对象可以操作地址栏URL(请求重定向)

在使用请求跳转时,有时一些静态资源(css,js)的访问使用的是相对路径,由于转跳后浏览器的地址不会跟随服务器改变,若使用相对路径,就会在转跳之前的地址上查找资源,资源就可能找不到,所以如果有使用服务器转跳,资源访问推荐使用绝对路径(动态获取的绝对路径):

request.getContextPath()+/...//获得当前路径加上文件名称即可使用绝对路径定位到资源

而服务器端路径使用绝对路径很少会有问题,

请求重定向(客户端转跳):
response.sendRedirect("xxx.jsp");

相当于直接在URL地址输入信息再回车发起请求,只不过这个过程由服务器来控制自动完成,其他没有区别

注意页面转跳之后就不再执行原页面的代码了

服务器端绝对路径和客户端绝对路径(“/”)的区别:
服务器端会识别项目名,所以根目录包含项目名:
例如:https://localhost:8080/web01/
但是客户端不会识别项目名,只会把项目识别成一个路径名称,所以客户端的根目录为:
例如:http://localhost:8080/

如何区分这两个路径?
如果可以是写在html标准的标签里,例如a标签的href属性,那就是客户端路径,如果是写在java代码里,表示的就是服务器路径,可以通过添加el表达式保证客户端和服务器地址一致。

session:
在现实中,每个服务器都要服务多个客户端的,同一个客户端可能多次发起请求时,服务器就会给这些请求统一创建一个session(一个客户端只有一个session),直到离开网页(如果session不活跃,一段时间后session会被服务器销毁,需要时重新创建),所有的jsp都可以访问到(所有的请求合起来称为会话)

application:
比session更高一级,代表整个网页,不管由多少台客户端,application只有一个,不适合数据传输,适合保存全局信息

(不常用)page:
表示当前页面,不能实现数据在页面之间的转化,一个页面对应一个page对象,在JSP的页面中,page和this是等价的,功能不多。
(不常用)pageContext:
页面上下文对象,可以使用它获取request、response、session、application对象:
pageContext.getRequest();
pageContext.getResponse();
pageContext.getSession();
pageContext.getServletContext();
也可以存对象到指定的域(request、response、session、application):
pageContext.setAttribute();
但是使用比较繁琐,且对象一般都不需要获取就可以使用,所以很少使用

servlet:
在jsp里可以直接处理业务逻辑,但是java代码和html代码混在一起,且处理业务逻辑时不需要展示,所以html代码就比较多余,这时可以使用servlet进行业务处理,使用注释@WebServlet("/xxxx")标记访问路径,覆写doPost和doGet方法,在这两个方法里会提供request和response对象,可以像在jsp里操作的一样,如果需要使用application,可以使用this.getServletContext()获取application,在JSP编译后期实际上也是编译成servlet,如果需要使用session,就不可以直接使用this,需要使用request.getSession(),因为application是和服务器绑定的,而session是一个客户端就有一个session,所以需要从客户端的信息中找到session。

servlet生命周期:
当有客户端访问时,servlet会初始化,servlet初始化会调用init(),当有新的客户端访问时,不再调用initial()方法。当客户端发起请求时,会先调用service方法,然后调用对应的doGet和doPost,当服务器重启或关闭时,会调用destroy方法

设置编码:
除了在JSP头部设置encoding,还可以使用request.setCharacterEncoding(“utf-8”);来设置编码格式,比写传统java编码转换代码简单

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JavaWeb中JSP和Servlet的相关知识 的相关文章

随机推荐

  • elementUI-新增,编辑,详情组件

  • oracle的 分表 详解 -----表分区

    此文从以下几个方面来整理关于分区表的概念及操作 1 表空间及分区表的概念 2 表分区的具体作用 3 表分区的优缺点 4 表分区的几种类型及操作方法 5 对表分区的维护性操作 1 表空间及分区表的概念 表空间 是一个或多个数据文件的集合 所有
  • 1分钟解决Prim算法构造最小生成树

    数据结构期末上分必备 前言 Prim 算法构造最小生成树 跟着画一遍就会了 Kruskal 请移步 kruskal 题目 设有如下图所示的无向连通图 从顶点A出发 使用 Prim 算法构造最小生成树 依次画出每次挑选出的边及权值 题解 从顶
  • 评估指标 -- Precision(查准率), Recall(查全率)和F1 score; PR曲线和mAP; ROC曲线和AUC

    Precision Recall 和 F1 score Precision 查准率 精确率 Recall 查全率 召回率 查准率和查全率是互相影响的 理想情况是希望两者都高 但是一般情况下查准率高 查全率就低 查全率高 查准率就低 如果是做
  • 蓝桥杯---算法训练 大等于n的最小完全平方数(Java解法)

    题目 问题描述 输出大等于n的最小的完全平方数 若一个数能表示成某个自然数的平方的形式 则称这个数为完全平方数 Tips 注意数据范围 输入格式 一个整数n 输出格式 大等于n的最小的完全平方数 样例输入 71711 样例输出 71824
  • 组合模式-

    定义 也称为整体 部分模式 它的宗旨是通过将单个对象 叶子节点 和组合对象 树枝节点 用相同的接口进行表示 适用场景 1 希望客户端可以忽略组合对象与单个对象的差异时 2 对象层次具备整体和部分 呈树形结构 如树形菜单 操作系统目录结构 公
  • 电脑只能登录微信?但却打不开网页?不能上网怎么办?ip地址和DNS出问题了无法上网怎么办?

    描述一下问题 昨天使用了一些代理梯子 直接关机 没有关闭那个软件 今天打开电脑就出问题了 只能登录微信 但却打不开网页 今天查了很多资料都没有解决 花了2个多小时 终于可以上网了 解决办法 找到 控制面板 网络和Internet 里面的 网
  • 计算机的桌面的路径,如何设置电脑保存路径在桌面上?

    我们在使用电脑时一般都会把系统安装到C盘 而很多的桌面图标也随之产生在C盘 当桌面文件越来越多是 不仅影响开机速度 同 时我们的电脑会很卡 当系统崩溃需要重装电脑时 我们总是要通过各种办法备份桌面 如果我们把桌面路径改到其他盘符 这些烦恼就
  • 2021-06-30 暑期实训开发日志3——山大云服务器配置anaconda pytorch

    暑期实训开发日志3 山大云服务器配置anaconda pytorch 一 安装anaconda 1 获取Anaconda安装脚本 2 安装 3 环境配置 二 creat新环境并连接pycharm 三 下载pytorch 可能会遇到的问题和解
  • giaogiao教你用c语言在屏幕上打印各种图案

    今天我们用c语言来实现在屏幕上打印用 组成的图案 首先呢 我们从简单的开始 输出自定义行数的矩形 我定义了三个变量 用for循环做了一个嵌套 用n来限制i j 从而控制输出图案的大小 搞定 你看我屌么 哈哈哈哈 这只是开始 我试试来输出自定
  • win8.1 pro-64位下安装配置MinGW—64位

    1 下载MinGW w64位 http mingw w64 org doku php 点击Downloads 说明 这边使用的是在线安装方式 在网站里可以看到他安装后的文件夹 2 安装 运行mingw w64 install exe 欢迎界
  • 如何使用QMessageBox(用法举例)

    如何使用QMessageBox 用法举例 QMessageBox是Qt编程中常用的类 使用方便 下面给出该类的普通用法实例 希望对你有所帮助 1 包含头文件 include
  • 西门子S7-1200实现先进先出(FIFO)循环存储

    目录 一 使用数组存储 通过更改存入和取出的索引实现 使用LAD语言 SCL语言组合实现 1 新建函数块 FB块 2 基础变量声明 3 开始写程序 4 完整程序 END 一 使用数组存储 通过更改存入和取出的索引实现 使用LAD语言 SCL
  • VS 2022 Format on Save

    如果不将上图中的 Enable Format Document 设置为 false 则保存时 会将代码中注释的格式修改
  • 2.mybatis-plus入门案例

    2 mybatis plus入门案例 mybatis plus入门案例 2 mybatis plus入门案例 一 创建并初始化数据库 1 创建数据库 2 创建 User 表 二 初始化工程 三 添加依赖 1 引入依赖 2 idea中安装lo
  • Kali:SYN简单泛洪攻击(DOS攻击)

    Kali SYN简单泛洪攻击 原理解析 工具原理解析 正式攻击思路 攻击演示 原理解析 SYN泛洪攻击 利用三次握手的缺陷 让tcp连接始终处于未成功连接的半连接状态 攻击机仅发出第一次握手 不对返回信息进行确认 服务器由于需要不断处理连接
  • ESP8266教程4 — ESP8266 智能配网

    按照前面的教程演示 如果想要给esp8266模块联网 可以使用AT指令加上SSID和密码即可以让模块连接到无线网络上 但是对于一个投向了市场的产品而言 消费者购买了你的一个可以联网的智能产品 当他们想要使用的时候总不能让消费者也使用AT指令
  • Java多线程技术

    Java多线程技术 Java中如何实现多线程 继承Thread类 实现Runnable接口 实现Callable接口 通过继承Thread类实现多线程 继承Thread类实现多线程的步骤 继承Thread类 重写方法run 来完成其操作的
  • flutter 自定义微信/支付宝密码输入框

    如图 项目需求需要实现以上效果 思路解析 1 可以用dialog来实现 2 可以用一个新statfulWidget实现 因为不大熟悉dialog 故用了一个新的statefulWidget来实现页面效果 直接上代码 功能 描述 设置密码弹框
  • JavaWeb中JSP和Servlet的相关知识

    JSP注释代码 引入JAVA包 举例 JSP中的JAVA代码块 在此代码块中可以定义变量和方法 定义的变量为局部变量 定义表达式 只能定义变量 且定义的变量为成员变量 输出表达式 直接向网页显示包含内容的value 局部变量 执行 JSP时