JSP全称Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。
从用户角度看待 ,就是是一个网页 , 从程序员角度看待 , 其实是一个java类, 它继承了servlet,所以可以直接说jsp 就是一个Servlet.
html 多数情况下用来显示静态内容 , 一成不变的。 但是有时候我们需要在网页上显示一些动态数据, 比如: 查询所有的学生信息, 根据姓名去查询具体某个学生。 这些动作都需要去查询数据库,然后在网页上显示。 html是不支持写java代码 , jsp里面可以写java代码。
所谓的动态网页,是指跟静态网页相对的一种网页编程技术。静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。而动态网页则不然,页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的。
不要将动态网页和页面内容是否有动感混为一谈。这里说的动态网页,与网页上的各种动画、滚动字幕等视觉上的动态效果没有直接关系,动态网页也可以是纯文字内容的,也可以是包含各种动画的内容,这些只是网页具体内容的表现形式,无论网页是否具有动态效果,只要是采用了动态网站技术生成的网页都可以称为动态网页。
语法 | 描述 |
---|---|
<%-- 注释 --%> | JSP注释,注释内容不会被发送至浏览器甚至不会被编译 |
< !-- 注释 --> | HTML注释,通过浏览器查看网页源代码时可以看见注释内容 |
总结
jsp的注释不会显示在源码上,更加安全 , 所以在jsp页面中推荐使用jsp的注释。
编译阶段
当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。
初始化阶段
加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
// 可以重写此方法,添加初始化逻辑
public void _jspInit() {
}
public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)throws java.io.IOException, javax.servlet.ServletException {
// 分发请求
// doGet
// doPost
}
// 可以重写此方法,添加销毁操作
public void _jspDestroy() {
}
从一个JSP页面到用户能够在浏览器上看到页面效果需要经历几个阶段: JSP ->(Tomcat容器负责) JAVA -> class -> 浏览器(HTML)
① 脚本片段格式
格式:<% Java代码片段 %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
书写java代码的三种方式
<% int x = 10; %>
②脚本片段作用
在jsp翻译后的_jspService方法中,嵌入java代码
③ 脚本片段使用注意事项
脚本片段可以分开书写,最终是组合在一起的,示例:
脚本片段内容
<% for(int j = 0 ; j < 5 ;j++){%>
Hello World!!!
<%}%>
<%!
private int age = 0;
public void sayHello() {
out.println("Hello World!");
}
%>
注:这种使用频率非常低
<%=age %>
<%@ 指令名字 属性名=“属性值” %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
注意:如果指定了此属性, 要继承的这个父类必须继承默认的HttpJspBase(因为Java只能继承一个类),否则JSP页面无法运行
值可选的有true or false .
用于控制在这个jsp页面里面,能够直接使用session对象。
具体的区别是,请看翻译后的java文件 如果该值是true , 那么在代码里面会有getSession()的调用,如果是false : 那么就不会有该方法调用,也就是没有session对象了。在页面上自然也就不能使用session了。
包含另外一个jsp的内容进来。
<%@ include file=“other02.jsp”%>
注:把另外一个页面的所有内容拿过来一起输出。 所有的标签元素都包含进来。
作用:用于引入标签库
语法:<%@ taglib prefix="" uri=""%>
uri: 标签库路径
prefix : 标签库的别名
使用语法:
包含指定的页面, 这里是动态包含。 也就是不把包含的页面所有元素标签全部拿过来输出,而是把它的运行结果拿过来。
<% request.setCharsetEncoding("UTF-8"); %>
前往哪一个页面。
意思是: 在包含某个页面的时候,或者在跳转某个页面的时候,加入这个参数。
在other02.jsp中获取参数
收到的参数是:
<%= request.getParameter("address")%>
这组动作标签用于实例化JavaBean,并且设置、获取属性
这三个标签当成bean包中setterXX和getterXX来理解
所谓内置对象,就是我们可以直接在jsp页面中使用这些对象。 不用创建。
作用:向服务端请求数据
方法名 | 说明 |
---|---|
isUserInRole | 判断认证后的用户是否属于某一成员组 |
getAttribute | 获取指定属性的值,如该属性值不存在返回Null |
getAttributeNames | 获取所有属性名的集合 |
getCookies | 获取所有Cookie对象 |
getCharacterEncoding | 获取请求的字符编码方式 |
getContentLength | 返回请求正文的长度,如不确定返回-1 |
getHeader | 获取指定名字报头值 |
getHeaders | 获取指定名字报头的所有值,一个枚举 |
getHeaderNames | 获取所有报头的名字,一个枚举 |
getInputStream | 返回请求输入流,获取请求中的数据 |
getMethod | 获取客户端向服务器端传送数据的方法 |
getParameter | 获取指定名字参数值 |
getParameterNames | 获取所有参数的名字,一个枚举 |
getParameterValues | 获取指定名字参数的所有值 |
getProtocol | 获取客户端向服务器端传送数据的协议名称 |
getQueryString | 获取以get方法向服务器传送的查询字符串 |
getRequestURI | 获取发出请求字符串的客户端地址 |
getRemoteAddr | 获取客户端的IP地址 |
getRemoteHost | 获取客户端的名字 |
getSession | 获取和请求相关的会话 |
getServerName | 获取服务器的名字 |
getServerPath | 获取客户端请求文件的路径 |
getServerPort | 获取服务器的端口号 |
removeAttribute | 删除请求中的一个属性 |
setAttribute | 设置指定名字参数值 |
作用:封装了jsp产生的响应,然后被发送到客户端以响应客户的请求
方法名 | 说明 |
---|---|
addCookie | 添加一个Cookie对象 |
addHeader | 添加Http文件指定名字头信息 |
containsHeader | 判断指定名字Http文件头信息是否存在 |
encodeURL | 使用sessionid封装URL |
flushBuffer | 强制把当前缓冲区内容发送到客户端 |
getBufferSize | 返回缓冲区大小 |
getOutputStream | 返回到客户端的输出流对象 |
sendError | 向客户端发送错误信息 |
sendRedirect | 把响应发送到另一个位置进行处理 |
setContentType | 设置响应的MIME类型 |
setHeader | 设置指定名字的Http文件头信息 |
主要作用有两个:
方法名 | 说明 |
---|---|
forward | 重定向到另一页面或Servlet组件 |
getAttribute | 获取某范围中指定名字的属性值 |
findAttribute | 按范围搜索指定名字的属性 |
removeAttribute | 删除某范围中指定名字的属性 |
setAttribute | 设定某范围中指定名字的属性值 |
getException | 返回当前异常对象 |
getRequest | 返回当前请求对象 |
getResponse | 返回当前响应对象 |
getServletConfig | 返回当前页面的ServletConfig对象 |
getServletContext | 返回所有页面共享的ServletContext对象 |
getSession | 返回当前页面的会话对象 |
作用:用来保存每个用户的信息,以便跟踪每个用户的操作状态
方法名 | 说明 |
---|---|
getAttribute | 获取指定名字的属性 |
getAttributeNames | 获取session中全部属性名字,一个枚举 |
getCreationTime | 返回session的创建时间 |
getId | 获取会话标识符 |
getLastAccessedTime | 返回最后发送请求的时间 |
getMaxInactiveInterval | 返回session对象的生存时间单位千分之一秒 |
invalidate | 销毁session对象 |
isNew | 每个请求是否会产生新的session对象 |
removeAttribute | 删除指定名字的属性 |
setAttribute | 设定指定名字的属性值 |
作用:对应ServletContext对象, 在整个应用的生命周期内共享数据
方法名 | 说明 |
---|---|
getAttribute | 获取应用对象中指定名字的属性值 |
getAttributeNames | 获取应用对象中所有属性的名字,一个枚举 |
getInitParameter | 返回应用对象中指定名字的初始参数值 |
getServletInfo | 返回Servlet编译器中当前版本信息 |
setAttribute | 设置应用对象中指定名字的属性值 |
作用:向客户端输出数据
方法名 | 说明 |
---|---|
print或println | 输出数据 |
newLine | 输出换行字符 |
flush | 输出缓冲区数据 |
close | 关闭输出流 |
clear | 清除缓冲区中数据,但不输出到客户端 |
clearBuffer | 清除缓冲区中数据,输出到客户端 |
getBufferSize | 获得缓冲区大小 |
getRemaining | 获得缓冲区中没有被占用的空间 |
isAutoFlush | 是否为自动输出 |
作用:表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet
方法名 | 说明 |
---|---|
getServletContext | 返回所执行的Servlet的环境对象 |
getServletName | 返回所执行的Servlet的名字 |
getInitParameter | 返回指定名字的初始参数值 |
getInitParameterNames | 返回该JSP中所有的初始参数名,一个枚举 |
它代表JSP被编译成Servlet,可以使用它来调用Servlet类中所定义的方法
被调用的错误页面的结果,只有在错误页面中才可使用,
即在页面指令中设置:<%@page isErrorPage=“true”%>
表示这些对象可以存值,他们的取值范围有限定。 setAttribute 和 getAttribute
<%
pageContext.setAttribute("name", "page");
request.setAttribute("name", "request");
session.setAttribute("name", "session");
application.setAttribute("name", "application");
%>
<%=pageContext.getAttribute("name")%>
<%=request.getAttribute("name")%>
<%=session.getAttribute("name")%>
<%=application.getAttribute("name")%>
作用域范围大小:
pageContext – request — session – application
作用域仅限于当前的页面。
除了可以存储数据, 还可以获取其他8个内置对象
作用域仅限于一次请求, 只要服务器对该请求做出了响应。 这个域中存的值就没有了。
作用域限于一次会话(多次请求与响应) 当中。
整个工程都可以访问, 服务器关闭后就不能访问了。
在java程序中叫ServletContext;在jsp中叫application。一个意思两种叫法
常与el和jstl表达式一起使用见下篇el和jstl表达式
HTML代码与Java代码共同存在,其中,HTML代码用来实现网页中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为.jsp。
JSP技术所开发的Web应用程序是基于Java的,本质上就是一个Servlet , 它可以用一种简捷而快速的方
法从Java程序生成Web页面,其使用上具有如下几点特征: