JSP是什么
Java Server Page- 响应客户端请求,根据需求生成相应的HTML/XML等web网页标准。
- 为服务器端的Java库单元提供了一个接口来服务于 HTTP的应用。
JAVA环境变量的作用
JAVA_HOME
顾名思义,就是JAVA所在的地方也就是我们把它安装在了什么地方,之所以设置这样一个变量的目的主要有两个:- 方便,有了这样一个变量以后再进行引用的时候不必输入完整的安装路径,仅需要%JAVA_HOME%即可,并且在更换了JDK的时候,只需要更改JAVA_HOME的值即可,不需要再更改引用的地方。
- 这是诸多第三方软件(如eclipse、tomcat、weblogic)引用JAVA的时候默认使用的变量名称。
CLASSPATH
这个变量标明的是JAVA字节码(.class)文件的路径,例如,在import其他类库中的类时,编译器就是通过这个变量的值来寻找类的,一般JDK的.class文件放在JDK/bin下,也就是.:%JAVA_HOME%/lib- PATH
PATH是系统用来寻找相关命令(如cmd,javac)程序的变量值,在JAVA中经常用到的JAVAC一般位于JDK/bin下,也就是.:%JAVA_HOME%/bin
JSP文件处理流程
Servlet,运行在服务器端的小程序。
- 用户发送HTTP请求给服务器
- web服务器识别出这是一个对JSP页面的请求,将其传递给JSP引擎(web应用中一个处理JSP的容器)
- JSP引擎首先根据请求载入相应的JSP文件,然后将他们转化为Servlet,这种转化只是简单地将所有模板改println()语句,并将JSP元素转化为JAVA代码。
- JSP引擎将Servlet编译成可执行类,并将原始请求传递给Servlet引擎.
- Web服务器会调用Servlet引擎,然后载入并执行Servlet类。在执行过程中,servlet产生HTML格式的输出并将其置于Response中交给Web服务器。
- Web服务器将HTML的形式Reponse回给用户。
- 浏览器解释显示HTML文件。
JSP语法
- <% 代码片段 %>
- JSP声明:<%! int i = 0; %>
- JSP表达式:<%= 表达式 %>
- JSP注释:<%– JSP注释 –>
语法 | 描述 |
---|---|
<%– 注释 –> | JSP注释,不会被发送到浏览器甚至不会被编译 |
《!– 注释 –> | HTML注释,在浏览器的源码中可以看到 |
<\% | 代表静态<%常量 |
\’ | 在属性中使用单引号 |
\” | 在属性中使用双引号 |
- JSP指令(用来设置页面信息)
指令 | 描述 |
---|---|
<%@ page… %> | 定义页面的依赖属性,比如脚本语言,error页面,缓存需求等 |
<%@ include… %> | 包含其他文件 |
<%@ taglib… %> | 引入标签库的定义,可以是自定义的 |
- JSP行为
JSP行为标签使用XML语法结构来控制servlet引擎.它能够动态插入一个文件,重用JavaBean组件,引导用户去另外一个页面,为Java插件产生相关HTML等。
语法 | 描述 |
---|---|
jsp:include | 用于在当前页面包含静态或动态资源 |
jsp:useBean | 寻找和初始化一个javaBean组件 |
jsp:setProperty | 设置Javabean组件的值 |
jsp:getProperty | 将JavaBean的值插入output中 |
jsp:forward | 从一个JSP文件传递一个包含用户请求的request对象 |
jsp:plagin | 用于在生成的HTML页面中包含Applet和JavaBean对象 |
jsp:element | 动态创建一个XML元素 |
jsp:attribute | 定义动态创建的XML元素的属性 |
jsp:body | 动态创建XML元素的主体 |
jsp:text | 用于封装模板数据 |
- JSP隐含对象
JSP支持九个自动定义的变量,称为隐含对象。
对象 | 描述 |
---|---|
request | HttpServletRequest类的实例 |
reponse | HttpServletReponse类的实例 |
out | PrintWriter类的实例,用于把结果输出到网页上 |
session | HttpSession类的实例 |
application | ServletContext类的实例,与应用上下文有关 |
config | ServletConfig类的实例 |
pageContext | PageContext类的实例,提供对jsp页面所有对象和命名空间的访问 |
page | 类似于Java中的this关键字 |
Exception | Exception类的对象,代表发生错误的jsp页面对应的异常对象 |
- 1.request对象
request对象是javax.servlet.http.HttpServletRequest类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求,request对象提供了一系列方法来获取HTTP头信息,cookie,HTTP方法等。 - 2.resoponse对象
是javax.serclet.http.HttpServletReponse类的实例,当服务器创建request对象时会同时创建用于响应这个客户端的response对象。reponse对象也定义了处理HTTP头模块的接口,通过这个对象,开发者可以添加新的cookies,时间戳,HTTP状态码等等。 - 3.out对象
是javax.servlet.jsp.JspWriter类的实例,用来在response对象中写入内容。
最初的JspWriter对象根据页面是否有缓存来进行不同的实例化操作。可以再page指令中使用buffered=”false”来关闭缓存。JspWriter类包含了大部分java.io.PrintWriter类中的方法。不过,JspWriter新增了一些专为处理缓存而设计的方法,还有就是JspWriter会抛出IOException异常而PrintWriter不会。
方法 | 描述 |
---|---|
out.print(dataType, dt) | 输出Type类型的数据 |
out.println(dataType, dt) | 输出Type类型的数据,然后换行 |
out.flush() | 刷新输出流 |
session对象
session对象时javax.servlet.http.HttpSession类的实例。和Java Servlet中的session对象有一样的行为
session对象用来跟踪在每个客户端请求间的对话。application对象
application对象直接包装了servlet的ServletContext类的对象。
这个对象在JSP页面的整个生命周期都代表这个JSP页面,这个对象在JSP初始化时被创建,随着jspDestroy()方法的调用而被移除。
通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。config对象
config对象是javax.servlet.ServletConfig类的实例。
这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。
config.getServletName();
- pageContext对象
用来代表整个JSP页面。
这个对象主要用来访问页面信息。同是过滤掉大部分实现细节。
这个对象存储了request对象和response对象的引用。application对象,config对象,session对象,out对象可以通过访问这个对象的属性来导出。
pageContext对象也包含了传给JSP页面的指令信息,包括缓存信息,ErrorPage URL,页面scope等。
PageContext类定义了一些字段,包括PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE, APPLICATION_SCOPE。它也提供了40余种方法,有一半继承自javax.servlet.jsp.JspContext 类。
其中一个重要的方法就是removeArribute(),它可接受一个或两个参数。比如,pageContext.removeArribute(“attrName”)移除四个scope中相关属性,但是下面这种方法只移除特定scope中的相关属性
page对象
这个对象就是页面实例的引用,它可以被看做是整个JSP页面的代表。
page对象就是this对象的同义词。exception对象
Exception对象包装了从先前页面抛出的异常信息,它通常被用来产生对出错条件的适当相应。JSP客户端请求
当浏览器请求一个网页时,它会向网络服务器发送一系列不能被直接读取的信息,因为这些信息是作为HTTP信息头的一部分来传送的。JSP服务器响应
Response响应对象主要将JSP容器处理后的结果传回客户端。可以通过response变量设置HTTP的状态和向客户端发送数据HTTP状态码
JSP表单处理
- GET方法
- POST方法
- JSP读取表单数据
- getparameter():使用request.getParameter()来获取表单参数的值。
- getParameterValues():获得如checkbox类(名字相同,但值有多个)的数据。
- getParameterNames():该方法可以取得所有变量的名称。该方法返回一个Emumeration.
- getInputStream():获取来自客户端的二进制数据流。