Java server pages。 Java 服务器端页面。 是在服务器端执行的
实现了在 Java 当中使用HTML 标签
技术特点:Java平台, 安全性高, 适合开发大型的, 企业级的 Web应用程序
基础语法 jsp指令 page指令通常位于jsp页面的顶端, 同一个页面可以有多个page 指令
<%@ page language="java" contentType="text/html; charset=utf-8"
%>
| 属性 | 作用 |
|---|---|
| language | 设置jsp执行的语言 |
| import | 当前页面引入的库文件 |
| contentType | 设置页面的编码格式 |
**pageEncoding=”UTF-8”**的作用是设置JSP编译成Servlet时使用的编码。
**contentType=”text/html;charset=UTF-8”**的作用是指定服务器响应给浏览器的编码。
表示的是HTML标签的编码 - [request](https://so.csdn.net/so/search?q=request&spm=1001.2101.3001.7020).setCharacterEncoding(“UTF-8”)的作用是设置对客户端请求和数据库取值时的编码 ,可以解决post请求的中文乱码问题 - 如何解决get请求传参的中文乱码问题修改tomcat配置的server.xml的URLEncoding
include指令将一个外部文件嵌入到当前的 JSP 文件中, 同时解析这个页面的 JSP 语句
taglib指令使用标签库定义新的自定义标签, 在JSP页面中启用定制行为
jsp注释html 注释:
//客户端可见
jsp脚本注释:
<%-- html注释 --%> //客户端不可见
JSP脚本注释:
<% // 单行注释 %>jsp脚本
就是标签内置执行代码
语法:
<% Java代码 %>jsp声明
在JSP页面中定义变量或者方法
语法:
<%! Java代码 %>
例子:
<%!
String s = '张三'; // 声明了一个字符串变量
int add(int x,int y) { // 声明了一个返回整形的函数
return x + y;
}
%>
jsp表达式
在jsp页面中执行的表达式
语法:
<% =表达式 %> // 表达式不以分号结束jsp页面生命周期
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fLURrhP4-1647329905250)(JSP%E5%AD%A6%E4%B9%A0.assets/1646197348574.png)]
jsp内置对象jsp内置对象是Web 容器创建的一组对象, 不适用new关键字就可以使用内置对象。
缓冲区buffer就是内存的一块区域用来保存临时数据
out对象out对象是JspWriter类的实例,是向客户端输出内容的常用对象
常用方法如下:
void println() 向客户端打印字符串void clear() 清除缓冲区内容,如果在 flush 之后调用会抛出异常void clearBuffer() 清除缓冲区内容,如果在flush之后调用不会抛出异常void flush() 将缓冲区内容输出到客户端,然后刷新缓冲区int getBufferSize() 返回缓冲区以字节数的大小, 如果不设缓冲区则为0int getRemaining() 返回缓冲区还剩余多少可用boolean isAutoFlush() 返回缓冲区满时, 是自动清空还是抛出异常void close() 关闭输出流 表单提交方式
表格table
| th | td |
|---|---|
| 表头 | 单元格 |
tr 是一行
colspan=”2“ 表示单元格横占几格
get以明文的方式通过url提交数据, 数据在url中可以看到。
提交的数据最多不超过2kb。
安全性较低但效率比post方式高
post将用户提交的信息封装在request header中。适合提交数据量大, 安全性高的用户数据。
request对象客户端的请求信息被封装在request 对象中, 通过它才能了解到客户的需求, 然后做出响应。 它是HttpServletRequest类的实例。 request对象具有请求域, 即完成客户端的请求之前,该对象一直有效。就是每一次请求都是一个request实例。常用方法如下:
String getParameter(String name) 返回name 项的值String[] getParameterValues(String name) 返回所有name项的数组void setAttribute(String,Object) 储存此请求中得属性object getAttribute(String name) 返回指定属性得属性值String getContentType() 得到请求体的MIME类型String getProtocol() 返回请求用的协议类型即版本号String getServerName() 返回接受请求的服务器主机名int getServerPort() 返回服务器接收此请求所用的端口号String getCharacterEncoding() 返回字符编码方式void setCharacterEncoding() 设置请求的字符编码方式int getContentLength() 返回请求体的长度,字节String getRemoveAddr() 返回发送此请求的客户端的IP地址String getRealPath(String path) 返回一条虚拟路径的真实路径String getContextPath() 返回上文路径getRequestDispatcher().forward(req, resp) 重定向 response对象
response对象包含了响应客户请求的有关信息。特使HttpServletResponse类的实例。response对象具有页面作用域。即每一个页面都是一个实例(response对象)
常用方法:
String getCharacterEcoding() 返回响应用的是何种字符编码
void setContentType(String type) 设置响应的MIME 类型
printWriter getWriter() 返回可以向客户端输出字符的一个对象
(与内置out对象的区别: 它的输出总是提前于out对象的输出)
sendRedirect(java.lang.String location) 重新定向客户端的需求
总结:每个页面都有自己的request 和response ,request 封装本页面被请求的信息,response 封装响应给别人的信息。
请求转发与请求重定向请求重定向:客户端行为, response.sendRedirect(“url”), 从本质上来讲等同于两次请求,前一次的请求对象不会保存,地址栏的url地址会改变。
请求转发: 服务器行为, request.getRequestDispatcher(“url”).forward(request, response); 是一次请求, 转发后请求对象会保存,地址栏的url地址不会改变。
问:为什么有flush不能请求重定向?response页面一旦调用一个flush()方法后,代表该response已经提交, 执行完毕,不能再使用
而请求重定向需要这个response 回复客户端。但是这个response 已经不能用了,所以会报错。
a相当于一次请求请求重定向,两次请求不属于一个request。两次回复也不属于一个response。
说明同一个网页有且仅有一个相同的request实例,一个response实例。这次requst 的生命周期等到response输出到前端时才算结束。
使用请求转发是共享request 和 response
session什么是session?
session 表示客户端与服务器的一次会话。
只要有任何页面存在都会被视为是在同一个会话里面。
session对象session 对象是一个 JSP 内置对象session 对象在第一个JSP 页面被装载时自动创建,完成会话期管理session 对象时HttpSession 类的实例
常用方法:
long getCreationTime(): 返回session 创建时间,毫秒级public String getId(): 返回session 创建时JSP 引擎为它设的唯一的 ID 号public Object setAttribute(String name, Object value): 使用指定名称将对象绑定到此对话public Object getAttribute(String name): 返回与此会话中的指定名称绑定在一起的对象, 如果没有对象绑定在该名称下, 则返回nullString[] getValueNames(): 返回一个数组,包含此session 种所有的属性int getMaxInactiveInterval(): 返回session过期的时间int setMaxInactiveInterval(): 设置session的过期时间 session的生命周期
1.创建
当客户端第一次访问某个jsp 或者Servlet 时候,服务器会为当前会话创建一个SessionId,每次客户端向服务端发送请求时,都会将此SessionId携带过去,服务端会对此SessionId进行校验
2.活动
某次会话当中通过超链接打开新页面属于同义词会话只要当前会话页面没有全部关闭, 重新打开新的浏览器窗口访问同一项目资源时属于同一次会话。除非本次会话的所有页面都关闭后再重新访问某个Jsp或者Servlet 将会创建新的会话。
注意:关闭以后,其实原有会话还存在, 只是这个旧的SessionId还存在于服务端,只不过再也没有客户端携带它然后交予服务端校验。
3.销毁
Session 的销毁只有三种方式:
调用了session.invalidate() 方法Session 过期服务器重新启动 application 对象
application 对象实现了用户间数据的共享,可存放全局变量
application 开始于服务器的启动, 终止于服务器的关闭
在任何地方对application 对象属性的操作,都将影响到其它用户对此的访问
application 对象时ServletContext类的实例
常用方法:
public void setAttribute(String name, Object value) 使用指定名称将对象绑定到此会话public Object getAttribute(String name) 返回此会话中的指定名称绑定在一起的对象Enumeration getAttributeNames 返回所有可用属性名的枚举String getServerInfo() 返回JSP(servlet)引擎名及版本号 page 对象
page 对象就是指当前JSP 页面本身,有点像类中的this 指针
page 对象是jaga.lang.Object 类的实例
常用方法:
class getClass() 返回此Object的类int hashCode() 返回此Object的hash 码boolean equals(Object obj) 判断此Object是否与指定的Object 对象相等void copy(Object obj) 把此Object拷贝到指定的Object 对象中Object clone() 克隆此Object对象String toString() 把此Object对象转换为String类的对象void notify 唤醒一个等待的线程void notifyAll() 唤醒所有的等待线程void wait(int timeout) 使一个线程处于等待直到timeout结束或被唤醒void wait() 使一个线程处于等待直到被唤醒 pageContext 对象
pageContext 对象提供了对JSP页面内所有的对象及名字空间的访问
pageContext 对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值
pageContext 对象相当于页面中所有功能的集大成者
pageContext对象是 pageContext类的实例
常用方法:
JSPWriter getOut() 返回当前客户端响应被使用的JspWriter流(out)HttpSession getSession() 返回当前页面中的HttpSession对象(session)Object getPage() 返回当前页中的pageServletRequest getRequest() 返回当前页的requestServlerResponse getResponse() 返回当前页的responsevoid setAttribute(String name,Object attribute)设置属性和属性值Object getAttribute(String name,int scope) 在指定范围内取属性的值int getAttributeScope(String name) 返回某属性的作用范围void forward(String relativeUrlPath) 使当前页面重导到另一页面void include(String relativeUrlPath) 在当前位置包含另一文件,包括HTML内容都会显示 exception 对象
exception 对象是一个异常对象,当一个页面运行过程中发生了异常,就产生了该对象。
它是java.lang.Throwable的对象。
常用方法:
String getMessage()返回描述异常的消息String toString() 返回关于异常的简短描述消息void printStackTrace() 显示异常及其栈轨迹Throwable FillInStackThrce() 重写异常的执行栈轨迹
注意:处理异常时,需要在头文件中指定处理异常的页面。而在处理异常页面的头文件中需要声明isErrorPage为true. 具体代码如下
异常页面:
errorPage="doexception.jsp"
处理异常页面:
isErrorPage="true"Javabean
Javabeans 就是符合某种特定的规范的Java 类。
使用Javabeans 的好处是解决了代码重复编写,减少代码冗余,功能区分明确, 提高了代码的维护性。
设计原则公有类无参的公有构造方法属性私有getter 和 setter 方法 Jsp动作元素
动作元素为请求处理阶段提供信息。动作元素遵循 XML 元素的语法,有一个包含元素名的开始标签,可以有属性、可选的内容、与开始标签匹配的结束标签。
在jsp页面中如何使用Javabeans
像使用普通的Java 类一样,创建javabean 实例。
先构造一个JavaBean的类,实例化Users user = new Users();用set方法创建数据
使用jsp 动作标签使用javabean。
useBean 动作
作用:在jsp 页面中实例化或者在指定范围内使用javabean
setProperty 动作 作用: 给已经实例化的Javabean 对象的属性赋值,一共有四种形式。 getProperty 动作 作用:获取指定Javabean 对象的属性值。 使用代码: 使用useBeans的scope属性可以用来指定javabean 的作用范围 page 在当前页面有效request 可以通过HttpRequest.getAttribute() 方法取得JavaBean 对象session 可以通过HttpSession.getAttribute() 方法取得JavaBean 对象application 可以通过 application.getAttribute() 方法取得JavaBean 对象
问题:useBean 的意思是拿到一个class类的实例,如果没有,则创建一个 https://blog.csdn.net/allway2/article/details/111018118 JavaBean 的出现可以使jsp 页面中使用JavaBean 封装的数据或者调用JavaBean 的业务逻辑代码, 这样大大提升了程序的可维护性。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BAbKGFmC-1647329905251)(JSP%E5%AD%A6%E4%B9%A0.assets/1646705232203.png)] 就是指浏览器二次发送请求时,服务器并不知道它就是第一次发送请求的那个浏览器。 中文名称为 ‘小甜饼’, 是web 服务器保存在客户端的一系列[数组]文本信息。 作用: 对特定对象的追踪保存用户网页的浏览记录与习惯简化登录 安全风险: 容易泄露用户信息 创建cookie对象 写入cookie 读取cookie 对象 void setMaxAge(int expiry) 设置cookie 的有效期,以秒为单位void setValue(String value) 在cookie 创建后,对cookie进行赋值String getName() 获取cookie 的名称String getValue() 获取cookie 的值int getMaxAge() 获取cookie 的有效时间,以秒为单位
session 和 cookie的对比
语法:<%@ include file="URL"> 语法: page: 要包含的页面 flush: 被包含的页面是否从缓冲区读取
用户名:
Javabean 的四个作用域范围
密码: session cookie
常用方法:
cookie newcookie = new cookie(String key, Object value);
response.addcookie(newcookie);
cookie[] cookies = request.getcookies();
指令与动作
include 指令
session cookie 在服务器端保存用户信息 在客户端保存用户信息 保存的是Object类型 保存的是String类型 随会话的结束而将其存储的数据销毁 cookie可以长期(生存期限)保存在客户端 保存重要的信息 保存用户不重要用户信息



