request对象是javax.servlet.http.HttpServletRequest 类的实例。HttpServletRequest是ServletRequest接口的子接口。
request内置对象是使用最多的一个对象,每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。
主要作用是接收客户端发送而来的请求信息,如请求的参数、发送的头信息等都属于客户端发来的信息。
request对象提供了一系列方法来获取HTTP头信息,COOKIEs,HTTP方法等等。
客户端的请求信息被封装在request对象中,通过他才能了解到客户端需求,然后做出响应。request对象具有请求域,即完成客户端的请求之前,该对象一直有效。
当服务器端想得到客户端信息时就会使用request对象来完成。
常用场景介绍:
首先介绍什么是会话:从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个浏览器结束,称此为一个会话。
session表示客户端与服务器的一次会话,也就是用户浏览这个网站所花费的时间。
服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。
session对象内部使用Map类来保存数据,因此保存数据的格式为 “Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。
当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要session对象。
实际上在开发中session对象最主要的用处就是完成用户的登录(login)、注销(logout)等常见功能,每一个session对象都表示不同的访问用户。
常见的应用场景
String pusername = config.getInitParameter("username");String pencoding = config.getInitParameter("encoding");
pageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问。
pageContext对象可以访问到本页所在的session,也可以取本页面所在的application的某一属性值。
pageContext对象的本类名也叫pageContext。pageContext对象是javax.servlet.jsp.PageContext类的实例,主要表示一个JSP页面的上下文。
这个对象主要用来访问页面信息,同时过滤掉大部分实现细节。
这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。
pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。
常见应用场景
pageContext.getRequest();
pageContext.getResponse();
pageContext.getServletConfig();
pageContext.getServletContext();
pageContext.getSession();
pageContext.getOut();
pageContext.getPage();
pageContext.getException();
//对默认作用域的属性进行操作。pagepageContext.getAttribute(name); //获得page作用域数据pageContext.setAttribute(name,value); //给page作用域设置内容pageContext.removeAttribute(name); //给page作用域移除内容
findAttribute(name); //依次从page、request、session、application 获得内容
out对象用于向客户端发送文本数据。
out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。
JSP页面中的out对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。
只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:
1、设置page指令的buffer属性关闭了out对象的缓存功能
2、out对象的缓冲区已满
3、整个JSP页面结束
out对象的工作原理
这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。
page 对象就是this对象的同义词。
属性 | 描述 |
---|---|
buffer | 指定缓存大小&#xff0c;当autoFlush设为true时有效&#xff0c;例如<%&#64; page buffer&#61;10kb%> |
autoFlush | 是否运行缓存&#xff0c;如果为true&#xff0c;则使用out.println()等方法输出的字符串并不是立刻到达客户端服务器的&#xff0c;而是暂时存到缓存里&#xff0c;缓存满了或者程序执行完毕或者执行out.flush()操作时才到客户端&#xff0c;默认为true。 |
contentType | 指定当前JSP页面的MIME类型和字符编码&#xff0c;户端浏览器根据该属性判断文档类型&#xff0c;例如 HTML格式为text/html、纯文本格式为text/plain等 |
errorPage | 指明一个错误页面&#xff0c;如果该JSP程序抛出一个未捕捉的异常&#xff0c;则转到errorPage指定的页面&#xff0c;errorPage指定的页面通常 |
isErrorPage | 指定该页面是否为错误显示页面&#xff0c;如果为true&#xff0c;则该JSP内置有一个Exception对象exception&#xff0c;可直接使用&#xff0c;否则没有&#xff0c;默认为false |
extends | 编译该JSP文件时继承哪个类&#xff0c;JSP为Servlet&#xff0c;因此当指明继承普通类时需要实现Servlet的init、destroy等方法 |
import | 引入该JSP中用到的类、包等&#xff0c;import是唯一可以声明多次的page指令属性&#xff0c;一个import可以引用uogelei&#xff0c;中间用英文逗号隔开&#xff0c;如<%&#64; page import&#61;“java.util.List,java.util.ArrayList”%> |
info | 指明JSP的信息&#xff0c;该信息可以通过Servlet.getServletInfo()方法获取到 |
isThreadSafe | 指定对JSP页面的访问是否为线程安全 |
language | **解释该JSP文件时采用的语言&#xff0c;一般为java语言&#xff0c;默认为java ** |
session | 该JSP内是否内置Session对象&#xff0c;如果为true&#xff0c;则内置Session对象&#xff0c;可直接使用&#xff0c;否则反之&#xff0c;默认为true |
isELIgnored | 指定是否执行EL表达式 |
isScriptingEnabled | 确定脚本元素能否被使用 |
JSP API允许用户自定义标签&#xff0c;一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义&#xff0c;包括库路径、自定义标签。
Taglib指令的语法&#xff1a;
<%&#64; taglib uri&#61;"uri" prefix&#61;"prefixOfTag" %>
uri属性确定标签库的位置&#xff0c;prefix属性指定标签库的前缀。
等价的XML语法&#xff1a;
JSP可以通过include指令来包含其他文件。被包含的文件可以是JSP文件、HTML文件或文本文件。包含的文件就好像是该JSP文件的一部分&#xff0c;会被同时编译执行。
Include指令的语法格式如下&#xff1a;
<%&#64; include file&#61;"文件相对 url 地址" %>
include 指令中的文件名实际上是一个相对的 URL 地址。
如果您没有给文件关联一个路径&#xff0c;JSP编译器默认在当前路径下寻找。
等价的XML语法&#xff1a;
属性 | 描述 |
---|---|
id | id属性是动作元素的唯一标识&#xff0c;可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用 |
scope | 该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系&#xff0c;scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值&#xff1a; (a) page, (b)request, ©session, 和 (d) application。 |
属性 | 描述 |
---|---|
id&#xff08;必须的&#xff09; | id属性是动作元素的唯一标识&#xff0c;可以在JSP页面中引用。 该名称大小写敏感&#xff0c;必须符合JSP页面中脚本语言的命名规则。假如你使用的是Java语言&#xff0c;则该名称遵守的是Java命名规范。动作元素创建的id值可以通过PageContext来调用 |
class | 指定Bean的完整包名。 |
scope | 该java bean对象的作用范围&#xff0c;可以写的就四个&#xff0c;也就是JSP的四大作用域&#xff0c;page、request、session、application |
type | 指定将引用该对象变量的类型 |
beanName | beanName属性值要么是一个完整类名&#xff0c;要么是一个可以转化为完整类名的表达式。用来传给Beans.instantiate方法。type属性值可和beanName属性值同&#xff0c;或为其超类、接口。beanName和type属性所指定的包名&#xff0c;类名均大小写敏感。 |
<--此时&#xff0c;不管jsp:useBean是找到了一个现有的Bean&#xff0c;还是新创建了一个Bean实例&#xff0c;jsp:setProperty都会执行-->
第二种
<--此时&#xff0c;jsp:setProperty只有在新建Bean实例时才会执行&#xff0c;如果是使用现有实例则不执行jsp:setProperty。-->
对Java Bean对象进行属性的设置
属性 | 描述 |
---|---|
name | java bean对象的名称&#xff0c;它表示要设置属性的是哪个Bean。也就是在useBean行为中的id |
property | property属性是必需的。它表示要设置哪个属性。对象中的属性名&#xff0c;有一个特殊用法&#xff1a;如果property的值是"*"&#xff0c;表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。 |
value | value 属性是可选的。要对其属性进行赋值的值&#xff0c;字符串数据会在目标类中通过标准的valueOf方法自动转换 |
param | param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数&#xff0c;则什么事情也不做&#xff0c;系统不会把null传递给Bean属性的set方法 |
语法格式如下&#xff1a;
<--jsp:getProperty动作提取指定Bean属性的值&#xff0c;转换成字符串&#xff0c;然后输出-->
属性 | 描述 |
---|---|
name | 要检索的Bean属性名称。Bean必须已定义。 |
property | 表示要提取Bean属性的值 |
jsp:useBean、jsp:setProperty、jsp:getProperty的举例&#xff1a;
cn.syj.Myclass.Bean包下面的Student.java类和/day07/WebRoot/JSP下的jspAction.jsp&#xff1a;
Student.java
package cn.syj.Myclass.Bean;
public class Student {private String username;private String password;public Student() {super();}public Student(String username, String password) {super();this.username &#61; username;this.password &#61; password;}public String getUsername() {return username;}public void setUsername(String username) {this.username &#61; username;}public String getPassword() {return password;}public void setPassword(String password) {this.password &#61; password;}
}
jspAction.jsp
<%&#64; page language&#61;"java" contentType&#61;"text/html; charset&#61;UTF-8"pageEncoding&#61;"UTF-8"%>
可以查看jspAction.jsp变为servlet后的源代码&#xff0c;看看我们写的javabean行为会被转换为何种语句:
源码位于&#xff1a;Tomcat9.0\apache-tomcat-9.0.13\work\Catalina\localhost\day07\org\apache\jsp\JSP
属性 | 描述 |
---|---|
page | 包含在页面中的相对URL地址。 |
flush | 布尔属性&#xff0c;定义在包含资源前是否刷新缓存区。 |
<--jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性pagg-->
属性 | 描述 |
---|---|
page | page属性包含的是一个相对URL。page的值既可以直接给出&#xff0c;也可以在请求的时候动态计算&#xff0c;可以是一个JSP页面或者一个 Java Servlet. |
jsp:include、jsp:forward、jsp:param的例子&#xff1a;
访问forwordMain.jsp
includeMain.jsp
head.jsp
<%&#61;new Date() %>
<%&#61;request.getParameter("num") %>
结果展示&#xff1a;
实现请求转发功能&#xff0c;Servlet中通过request.getRequestDispatcher(“someServlet”).forward(request,response);而在JSP中也能够实现相同的功能&#xff0c;只不过用的是
地址值并没有发生变化&#xff1a;
来自菜鸟教程
jsp:element 、 jsp:attribute、 jsp:body动作元素动态定义XML元素。动态是非常重要的&#xff0c;这就意味着XML元素在编译时是动态生成的而非静态。
<%&#64; page language&#61;"java" contentType&#61;"text/html; charset&#61;UTF-8"pageEncoding&#61;"UTF-8"%>
结果展示&#xff1a;
jsp:plugin动作用来根据浏览器的类型&#xff0c;插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。
如果需要的插件不存在&#xff0c;它会下载插件&#xff0c;然后执行Java组件。 Java组件可以是一个applet或一个JavaBean。
plugin动作有多个对应HTML元素的属性用于格式化Java 组件。param元素可用于向Applet 或 Bean 传递参数。
建议参考&#xff1a;https://blog.csdn.net/liuchang54/article/details/48245721
来自菜鸟教程
语法格式如下&#xff1a;
text.jsp
运行结果展示