JSP java server page
1 配置开发工具 jdk 设置web服务器 Tomcat
2jsp生命周期
编译阶段:servlet容器编译servlet源文件,生成servlet类
初始化阶段:加载与jsp对应的servlet类,创建其实例,并调用它的初始化方法
执行阶段:调用与jsp对应的servlet实例的服务方法
销毁阶段:调用jsp对应的servlet实例的服务方法
3jsp 语法
脚本程序 <% 代码片段%> <% out.println("address"+request.getRemoteAddr) %>
jsp声明: <%! int i = 0; %>
jsp表达式 日期的处理例子 <p>Today's date: <%= (new java.util.Date()).toString() %></p>
jsp 注释: <%-- 注释内容 --%>
jsp指令:用来设置与整个jsp页面相关的属性
<%@ page 定义页面的依赖属性...%>
<%@includefile="relative url"包含其它文件...%>
<%@tagliburi="http://java.sun.com/jsp/jstl/core" prefix="c"引入标签库的定义 %>
JSP隐含对象
request 是HttpServletRequest 的实例request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。
response通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。
ps:状态码
状态码 | 消息 | 描述 |
---|---|---|
100 | Continue | 只有一部分请求被服务器接收,但只要没被服务器拒绝,客户端就会延续这个请求 |
101 | Switching Protocols | 服务器交换机协议 |
200 | OK | 请求被确认 |
201 | Created | 请求已完成,新的资源被创建 |
202 | Accepted | 请求被接受,但未处理完 |
203 | Non-authoritative Information | |
204 | No Content | |
205 | Reset Content | |
206 | Partial Content | |
300 | Multiple Choices | 一个超链接表,用户可以选择一个超链接并访问,最大支持5个超链接 |
301 | Moved Permanently | 被请求的页面已经移动到了新的URL下 |
302 | Found | 被请求的页面暂时性地移动到了新的URL下 |
303 | See Other | 被请求的页面可以在一个不同的URL下找到 |
304 | Not Modified | |
305 | Use Proxy | |
306 | Unused | 已经不再使用此状态码,但状态码被保留 |
307 | Temporary Redirect | 被请求的页面暂时性地移动到了新的URL下 |
400 | Bad Request | 服务器无法识别请求 |
401 | Unauthorized | 被请求的页面需要用户名和密码 |
402 | Payment Required | 目前还不能使用此状态码 |
403 | Forbidden | 禁止访问所请求的页面 |
404 | Not Found | 服务器无法找到所请求的页面 |
405 | Method Not Allowed | 请求中所指定的方法不被允许 |
406 | Not Acceptable | 服务器只能创建一个客户端无法接受的响应 |
407 | Proxy Authentication Required | 在请求被服务前必须认证一个代理服务器 |
408 | Request Timeout | 请求时间超过了服务器所能等待的时间,连接被断开 |
409 | Conflict | 请求有矛盾的地方 |
410 | Gone | 被请求的页面不再可用 |
411 | Length Required | "Content-Length"没有被定义,服务器拒绝接受请求 |
412 | Precondition Failed | 请求的前提条件被服务器评估为false |
413 | Request Entity Too Large | 因为请求的实体太大,服务器拒绝接受请求 |
414 | Request-url Too Long | 服务器拒绝接受请求,因为URL太长。多出现在把"POST"请求转换为"GET"请求时所附带的大量查询信息 |
415 | Unsupported Media Type | 服务器拒绝接受请求,因为媒体类型不被支持 |
417 | Expectation Failed | |
500 | Internal Server Error | 请求不完整,服务器遇见了出乎意料的状况 |
501 | Not Implemented | 请求不完整,服务器不提供所需要的功能 |
502 | Bad Gateway | 请求不完整,服务器从上游服务器接受了一个无效的响应 |
503 | Service Unavailable | 请求不完整,服务器暂时重启或关闭 |
504 | Gateway Timeout | 网关超时 |
505 | HTTP Version Not Supported | 服务器不支持所指定的HTTP版本 |
outout对象是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容。
exception
application是javax.servlet.ServletContext 类的实例。
page
pagecontextpageContext对象是javax.servlet.jsp.PageContext 类的实例,用来代表整个JSP页面。
configconfig对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。
session是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。
流程控制:switch…case块,与if…else块有很大的不同,它使用out.println(),并且整个都装在脚本程序的标签中
JSP常量:字符串(string):以单引号或双引号开始和结束,其他类型和java一样
jsp动作元素 id 和scope属性 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命
id属性是动作元素的唯一标识
scope属性:用于识别动作元素的生命周期: scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d) application。
JSP读取表单数据:request.getParameter()读取表单的参数的值
request.getParameterValues(): 获得如checkbox类(名字相同,但值有多个)的数据。 接收数组变量 ,如checkobx类型
JSP过滤器:Servlet和JSP中的过滤器都是Java类1在请求访问后端资源时,拦截他 (登录验证,认证过滤,加密过滤等等)2管理从服务器返回 给客户端的响应
JSP Cookies 设置:Cookies是存储在客户机的文本文件,它们保存了大量轨迹信息。
coolkie的常用方法
1 | public void setDomain(String pattern) 该方法设置 cookie 适用的域,例如 w3cschool.cn。 |
2 | public String getDomain() 该方法获取 cookie 适用的域,例如 w3cschool.cn。 |
3 | public void setMaxAge(int expiry) 该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。 |
4 | public int getMaxAge() 该方法返回 cookie 的最大生存周期(以秒为单位),默认情况下,-1 表示 cookie 将持续下去,直到浏览器关闭。 |
5 | public String getName() 该方法返回 cookie 的名称。名称在创建后不能改变。 |
6 | public void setValue(String newValue) 该方法设置与 cookie 关联的值。 |
7 | public String getValue() 该方法获取与 cookie 关联的值。 |
8 | public void setPath(String uri) 该方法设置 cookie 适用的路径。如果您不指定路径,与当前页面相同目录下的(包括子目录下的)所有 URL 都会返回 cookie。 |
9 | public String getPath() 该方法获取 cookie 适用的路径。 |
10 | public void setSecure(boolean flag) 该方法设置布尔值,表示 cookie 是否应该只在加密的(即 SSL)连接上发送。 |
11 | public void setComment(String purpose) 该方法规定了描述 cookie 目的的注释。该注释在浏览器向用户呈现 cookie 时非常有用。 |
12 | public String getComment() 该方法返回了描述 cookie 目的的注释,如果 cookie 没有注释则返回 null。 |
通常有三个步骤来识别是否请求过了:
1服务器脚本发送一系列cookies至浏览器。比如名字,年龄,ID号码等等
2浏览器在本地机中存储这些信息,以备不时之需。
3当下一次浏览器发送任何请求至服务器时,它会同时将这些cookies信息发送给服务器,然后服务器使用这些信息来识别用户或者干些其它事情。
1创建 Cookies cookie = new Cookie("k" ,"v");
2设置有效期 cookie.setMaxAge(60*60*24); 一天
3将cookie发送至HTTP响应头中:调用response.addCookie()函数来向HTTP响应头中添加cookies。
response.addCookie(cookie);
ps:使用时读取cookies文本文件request.getCookies() 来读取所有的cook,然后遍历,找到自己想要的Cookie
手动可以从浏览器中删除cookie
JSP Session :每当浏览器发送一个请求,session_id的值就可以用来保存不同浏览器的轨迹。
一个网络服务器可以发送一个隐藏的HTML表单域和一个唯一的session_id
PS:点击<A HREF>标签中的超链接时不会产生表单提交事件,因此隐藏表单域也不支持通用会话跟踪 默认情况下,JSP允许会话跟踪,一个新的HttpSession对象将会自动地为新的客户端实例化(可以在指令中设置session="false")
session对象:可以用它来存储或检索数据
主要是用这个public Object getAttribute(String name) 返回session对象中与指定名称绑定的对象,如果不存在则返回null | |
2 | public Enumeration getAttributeNames() 返回session对象中所有的对象名称 |
3 | public long getCreationTime() 返回session对象被创建的时间, 以毫秒为单位,从1970年1月1号凌晨开始算起 |
4 | public String getId() 返回session对象的ID |
5 | public long getLastAccessedTime() 返回客户端最后访问的时间,以毫秒为单位,从1970年1月1号凌晨开始算起 |
6 | public int getMaxInactiveInterval() 返回最大时间间隔,以秒为单位,servlet 容器将会在这段时间内保持会话打开 |
7 | public void invalidate() 将session无效化,解绑任何与该session绑定的对象 |
8 | public boolean isNew( 返回是否为一个新的客户端,或者客户端是否拒绝加入session |
9 | public void removeAttribute(String name) 移除session中指定名称的对象 |
10 | public void setAttribute(String name, Object value) 使用指定的名称和值来产生一个对象并绑定到session中 |
11 | public void setMaxInactiveInterval(int interval) 用来指定时间,以秒为单位,servlet容器将会在这段时间内保持会话有效 |
删除 Session 会话数据
当您完成了一个用户的 session 会话数据,您有以下几种选择:
- 移除一个特定的属性:您可以调用 public void removeAttribute(String name) 方法来删除与特定的键相关联的值。 to delete the value associated with a particular key.
- 删除整个 session 会话:您可以调用 public void invalidate() 方法来丢弃整个 session 会话。
- 设置 session 会话过期时间:您可以调用 public void setMaxInactiveInterval(int interval) 方法来单独设置 session 会话超时。
- 注销用户:如果使用的是支持 servlet 2.4 的服务器,您可以调用 logout 来注销 Web 服务器的客户端,并把属于所有用户的所有 session 会话设置为无效。
- web.xml 配置:如果您使用的是 Tomcat,除了上述方法,您还可以在 web.xml 文件中配置 session 会话超时,如下所示:
<session-config>
<session-timeout>15</session-timeout>
</session-config>
PS:维护客户端和服务端的会话方式(三种):cookie sesion 重写url
重写URL
您可以在每个URL后面添加一些额外的数据来区分会话,服务器能够根据这些数据来关联session标识符。
举例来说,http://w3cschool.cn/file.htm;sessionid=12345, session标识符为sessionid=12345,服务器可以用这个数据来识别客户端。
相比而言,重写URL是更好的方式来,就算浏览器不支持cookies也能工作,但缺点是您必须为每个URL动态指定session ID,就算这是个简单的HTML页面。
文件上传:需要导入 FileUpload 和commons io jar包(上传时,确认上传文件的大小,maxFileSize变量的大小)
form标签中 设置:method的属性get、post enctype="multipart/form-data"
上传的路径在可以在代码 中写上,也可以在web.xml配置:如下
<context-param>
<description>文件上传到的地址</description>
<param-name>file-upload</param-name>
<param-value>c:\吕美贺</param-value>
</context-param>
JSP日期处理:日期的处理(Date SimpleDateFormat解析)
JSP重定向:resonse.sendRedirect(String location);
JSP自动刷新:response.setIntHeader(String Refresh,int Value) 通知浏览器在给定的时间后刷新,时间以秒为单位
PS: 引入标准标签库:<%@ taglib uri=" " prefix="c" %>
标签 | 描述 |
---|---|
<c:out> | 用于在JSP中显示数据,就像<%= ... > |
<c:set> | 用于保存数据 |
<c:remove> | 用于删除数据 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
<c:when> | <c:choose>的子标签,用来判断条件是否成立 |
<c:otherwise> | <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach> | 基础迭代标签,接受多种集合类型 |
<c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect> | 重定向至一个新的URL. |
<c:url> | 使用可选的查询参数来创造一个URL |
<%@ uri="" prefix="fmt" %>
格式化 文本 日期 时间 数字 | |
---|---|
<fmt:formatNumber> | 使用指定的格式或精度格式化数字 |
<fmt:parseNumber> | 解析一个代表着数字,货币或百分比的字符串 |
<fmt:formatDate> | 使用指定的风格或模式格式化日期和时间 |
<fmt:parseDate> | 解析一个代表着日期或时间的字符串 |
<fmt:bundle> | 绑定资源 |
<fmt:setLocale> | 指定地区 |
<fmt:setBundle> | 绑定资源 |
<fmt:timeZone> | 指定时区 |
<fmt:setTimeZone> | 指定时区 |
<fmt:message> | 显示资源配置文件信息 |
<fmt:requestEncoding> | 设置request的字符编码 |
描述 | |
---|---|
<fmt:formatNumber> | 使用指定的格式或精度格式化数字 |
<fmt:parseNumber> | 解析一个代表着数字,货币或百分比的字符串 |
<fmt:formatDate> | 使用指定的风格或模式格式化日期和时间 |
<fmt:parseDate> | 解析一个代表着日期或时间的字符串 |
<fmt:bundle> | 绑定资源 |
<fmt:setLocale> | 指定地区 |
<fmt:setBundle> | 绑定资源 |
<fmt:timeZone> | 指定时区 |
<fmt:setTimeZone> | 指定时区 |
<fmt:message> | 显示资源配置文件信息 |
<fmt:requestEncoding> | 设置request的字符编码 |
签库提供了创建和操作XML文档的标签。引用XML标签库的语法如下:
<%@ taglib prefix="x"
uri="http://java.sun.com/jsp/jstl/xml" %>
在使用xml标签前,导包
标签 | 描述 |
---|---|
<x:out> | 与<%= ... >,类似,不过只用于XPath表达式 |
<x:parse> | 解析 XML 数据 |
<x:set> | 设置XPath表达式 |
<x:if> | 判断XPath表达式,若为真,则执行本体中的内容,否则跳过本体 |
<x:forEach> | 迭代XML文档中的节点 |
<x:choose> | <x:when>和<x:otherwise>的父标签 |
<x:when> | <x:choose>的子标签,用来进行条件判断 |
<x:otherwise> | <x:choose>的子标签,当<x:when>判断为false时被执行 |
<x:transform> | 将XSL转换应用在XML文档中 |
<x:param> | 与<x:transform>共同使用,用于设置XSL样式表 |
JSTL函数
JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:
<%@ taglib prefix="fn"
uri="http://java.sun.com/jsp/jstl/functions" %>
函数 | 描述 |
---|---|
fn:contains() | 测试输入的字符串是否包含指定的子串 |
fn:containsIgnoreCase() | 测试输入的字符串是否包含指定的子串,大小写不敏感 |
fn:endsWith() | 测试输入的字符串是否以指定的后缀结尾 |
fn:escapeXml() | 跳过可以作为XML标记的字符 |
fn:indexOf() | 返回指定字符串在输入字符串中出现的位置 |
fn:join() | 将数组中的元素合成一个字符串然后输出 |
fn:length() | 返回字符串长度 |
fn:replace() | 将输入字符串中指定的位置替换为指定的字符串然后返回 |
fn:split() | 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回 |
fn:startsWith() | 测试输入字符串是否以指定的前缀开始 |
fn:substring() | 返回字符串的子集 |
fn:substringAfter() | 返回字符串在指定子串之后的子集 |
fn:substringBefore() | 返回字符串在指定子串之前的子集 |
fn:toLowerCase() | 将字符串中的字符转为小写 |
fn:toUpperCase() | 将字符串中的字符转为大写 |
fn:trim() | 移除首位的空白符 |
描述 | |
---|---|
<fmt:formatNumber> | 使用指定的格式或精度格式化数字 |
<fmt:parseNumber> | 解析一个代表着数字,货币或百分比的字符串 |
<fmt:formatDate> | 使用指定的风格或模式格式化日期和时间 |
<fmt:parseDate> | 解析一个代表着日期或时间的字符串 |
<fmt:bundle> | 绑定资源 |
<fmt:setLocale> | 指定地区 |
<fmt:setBundle> | 绑定资源 |
<fmt:timeZone> | 指定时区 |
<fmt:setTimeZone> | 指定时区 |
<fmt:message> | 显示资源配置文件信息 |
<fmt:requestEncoding> | 设置request的字符编码 |