JSP 学习笔记

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的字符编码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值