JSP

学习笔记,参考网站
开发环境:Java JDK,Tomcat,Eclipse J2EE

Eclipse工程文件结构目录解析
deployment descriptor部署的描述
Web App Libraries自己添加的包
build编译后的文件
WebContent放写入的页面

目录中带有(-)字样的条目均未完成,有待补充

生命周期
编译→初始化→执行→销毁

JSP初始化、执行、清理

public void jspInit(){
  // 初始化代码
}

void _jspService(HttpServletRequest request, HttpServletResponse response)
{
   // 服务端处理代码
}

public void jspDestroy()
{
   // 清理代码
}

语法

脚本程序

脚本程序可以包含任意量的Java语句、变量、方法或表达式,只要它们在脚本语言中是有效的。
任何文本、HTML标签、JSP元素必须写在脚本程序的外面

<% 代码片段 %>
//or
<jsp:scriptlet>
   代码片段
</jsp:scriptlet>
中文编码
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
声明

声明一个或多个变量、方法,供Java代码使用,必须先声明这些变量和方法然后才能使用

<%! declaration; [ declaration; ]+ ... %>
//or
<jsp:declaration>
   代码片段
</jsp:declaration>
表达式

脚本语言表达式,转化成String后插入到表达式出现的地方

<%= 表达式 %>
//or
<jsp:expression>
   表达式
</jsp:expression>
控制流语句 循环语句
<% if (day == 1 | day == 7) { %>
      <p>今天是周末</p>
<% } else { %>
      <p>今天不是周末</p>
<% } %>
//--------------------------------------------------------
<% 
switch(day) {
case 0:
   out.println("星期天"); 
   break;
case 1:
   out.println("星期一");
   break;
case 2:
   out.println("星期二");
   break;
//...
default:
   out.println("星期六");
}
%>
//---------------------------------------------------------
<%for ( fontSize = 1; fontSize <= 3; fontSize++){ %>
   <font color="green" size="<%= fontSize %>">
    菜鸟教程
   </font><br />
<%}%>
//----------------------------------------------------------
<%while ( fontSize <= 3){ %>
   <font color="green" size="<%= fontSize %>">
    菜鸟教程
   </font><br />
<%fontSize++;%>
<%}%>
运算符 字面量

JSP常见运算符,优先级从高到低

类别操作符结合性
后缀() [] . (点运算符)
一元++ - - ! ~右到左
可乘性* / %
可加性+ -
移位>> >>> <<
关系> >= < <=
相等/不等== !=
位与&
位异或^
位或|
逻辑与&&
逻辑或||
条件判断?:右到左
赋值= += -= *= /= %= >>= <<= &= ^= |=右到左
逗号,

字面量:boolean、int、float、string、Null

注释

完整注释种类及描述

<%-- 该部分注释在网页中不会被显示--%> 
不同情况下注释语法描述
<%-- 注释 --%>JSP注释,注释内容不会被发送至浏览器甚至不会被编译
<!-- 注释 -->HTML注释,通过浏览器查看网页源代码时可以看见注释内容
<\%代表静态 <%常量
%\>代表静态 %> 常量
\'在属性中使用的单引号
\"在属性中使用的双引号

指令

设置与整个JSP页面相关的属性

<%@ directive attribute="value" %>
指令标签描述
<%@ page ... %>定义页面的依赖属性,比如脚本语言、error页面、缓存需求等等
<%@ include ... %>包含其他文件
<%@ taglib ... %>引入标签库的定义,可以是自定义标签

Page指令

为容器提供当前页面的使用说明,一个JSP页面可以包含多个page指令

<%@ page attribute="value" %>
//orXML格式
<jsp:directive.page attribute="value" />

相关的属性

属性描述
buffer指定out对象使用缓冲区的大小
autoFlush控制out对象的 缓存区
contentType指定当前JSP页面的MIME类型和字符编码
errorPage指定当JSP页面发生异常时需要转向的错误处理页面
isErrorPage指定当前页面是否可以作为另一个JSP页面的错误处理页面
extends指定servlet从哪一个类继承
import导入要使用的Java类
info定义JSP页面的描述信息
isThreadSafe指定对JSP页面的访问是否为线程安全
language定义JSP页面所用的脚本语言,默认是Java
session指定JSP页面是否使用session
isELIgnored指定是否执行EL表达式
isScriptingEnabled确定脚本元素能否被使

Include指令

通过include指令来包含其他文件,被包含的文件可以是JSP文件、HTML文件或文本文件,会被同时编译执行

<%@ include file="文件相对 url 地址" %>
	//相对的URL地址,JSP编译器默认在当前路径下寻找
//or XML
<jsp:directive.include file="文件相对 url 地址" />

Taglib指令

允许用户自定义标签,一个自定义标签库就是自定义标签的集合。
Taglib指令引入一个自定义标签集合的定义,包括库路径、自定义标签。

<%@ taglib uri="uri" prefix="prefixOfTag" %>
	//uri属性确定标签库的位置,prefix属性指定标签库的前缀
//or XML
<jsp:directive.taglib uri="uri" prefix="prefixOfTag" />

行为(动作元素

使用XML语法结构来控制servlet引擎
在请求处理阶段起作用,用XML语法写成,可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码

<jsp:action_name attribute="value" />
行为标签描述
jsp:include用于在当前页面中包含静态或动态资源 / 在页面被请求时引入一个文件
jsp:useBean寻找和初始化一个JavaBean组件
jsp:setProperty设置 JavaBean组件的值 / 属性
jsp:getProperty将 JavaBean组件的值插入到 output中 / 输出某个JavaBean的属性
jsp:forward从一个JSP文件向另一个文件传递一个包含用户请求的request对象 / 把请求转到一个新的页面
jsp:plugin用于在生成的HTML页面中包含Applet和JavaBean对象 / 根据浏览器类型为Java插件生成OBJECT或EMBED标记
jsp:element动态创建一个XML元素 / 定义动态XML元素
jsp:attribute设置动态创建的XML元素的属性
jsp:body设置动态创建的XML元素的主体 / 内容
jsp:text用于封装模板数据 / 在JSP页面和文档中使用写入文本的模板

属性 id scope

  • id:动作元素的唯一标识,可通过PageContext调用
  • scope:用于识别动作元素的生命周期,scope属性有四个可能的值: (a) page, (b)request, ©session,
    和 (d) application

id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命

jsp:include

用来包含静态和动态的文件,该动作把指定文件插入正在生成的页面(即页面被请求时,与include指令区别)

<jsp:include page="相对 URL 地址" flush="true" />
	//page	包含在页面中的相对URL地址
	//flush	布尔属性,定义在包含资源前是否刷新缓存区。

jsp:useBean

JavaBean??

加载一个将在JSP页面中使用的JavaBean,发挥 Java 组件复用的优势

<jsp:useBean id="name" class="package.class" />

在类载入后,可以通过 jsp:setProperty 和 jsp:getProperty 动作来修改和检索bean的属性
useBean动作相关属性

属性描述
class指定Bean的完整包名
type指定将引用该对象变量的类型
beanName通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字

jsp:setProperty(-)

jsp:getProperty(-)

实例(-)

jsp:forward(-)

jsp:plugin(-)

jsp:element jsp:attribute jsp:body(-)

jsp:text(-)

隐含对象(自动定义的变量)

是JSP容器为每个页面提供的Java对象,开发者可以直接使用它们而不用显式声明

对象描述
requestHttpServletRequest类的实例
responseHttpServletResponse类的实例
outPrintWriter类的实例,用于把结果输出至网页上
sessionHttpSession类的实例
applicationServletContext类的实例,与应用上下文有关
configServletConfig类的实例
pageContextPageContext类的实例,提供对JSP页面所有对象以及命名空间的访问
page类似于Java类中的this关键字
ExceptionException类的对象,代表发生错误的JSP页面中对应的异常对象

request

request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。
request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。

response

response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。
response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。

out(-)

是 javax.servlet.jsp.JspWriter 类的实例,用来在response对象中写入内容

out.print(dataType dt) 输出Type类型的值
out.println(dataType dt) 输出Type类型的值然后换行
out.flush() 刷新输出流

session

是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。
session对象用来跟踪在各个客户端请求间的会话
session.setAttribute()和session.getAttribute()

HTTP是无状态协议,这意味着每次客户端检索网页时,都要单独打开一个服务器连接,因此服务器不会记录下先前客户端请求的任何信息
有三种方法来维持客户端与服务器的会话:

  • Cookies
  • 隐藏表单域
  • 重写URL
session对象

JSP利用servlet提供的HttpSession接口来识别一个用户,存储这个用户的所有访问信息
1 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容器将会在这段时间内保持会话有效

application

直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。
这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。
通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。

config(-)不常用

pageContext(-)

page

页面实例的引用。它可以被看做是整个JSP页面的代表。
page 对象就是this对象的同义词。

exception

包装了从先前页面中抛出的异常信息。它通常被用来产生对出错条件的适当响应

客户端请求(-)

浏览器端信息头的一些重要内容
信息 描述
Accept 指定浏览器或其他客户端可以处理的MIME类型。它的值通常为 image/png 或 image/jpeg
Accept-Charset 指定浏览器要使用的字符集。比如 ISO-8859-1
Accept-Encoding 指定编码类型。它的值通常为 gzip 或compress
Accept-Language 指定客户端首选语言,servlet会优先返回以当前语言构成的结果集,如果servlet支持这种语言的话。比如 en,en-us,ru等等
Authorization 在访问受密码保护的网页时识别不同的用户
Connection 表明客户端是否可以处理HTTP持久连接。持久连接允许客户端或浏览器在一个请求中获取多个文件。Keep-Alive 表示启用持久连接
Content-Length 仅适用于POST请求,表示 POST 数据的字节数
Cookie 返回先前发送给浏览器的cookies至服务器
Host 指出原始URL中的主机名和端口号
If-Modified-Since 表明只有当网页在指定的日期被修改后客户端才需要这个网页。 服务器发送304码给客户端,表示没有更新的资源
If-Unmodified-Since 与If-Modified-Since相反, 只有文档在指定日期后仍未被修改过,操作才会成功
Referer 标志着所引用页面的URL。比如,如果你在页面1,然后点了个链接至页面2,那么页面1的URL就会包含在浏览器请求页面2的信息头中
User-Agent 用来区分不同浏览器或客户端发送的请求,并对不同类型的浏览器返回不同的内容

HttpServletRequest类(-)

在JSP编程中常用的获取HTTP信息头的方法
1 Cookie[] getCookies()
返回客户端所有的Cookie的数组
2 Enumeration getAttributeNames()
返回request对象的所有属性名称的集合
3 Enumeration getHeaderNames()
返回所有HTTP头的名称集合
4 Enumeration getParameterNames()
返回请求中所有参数的集合
5 HttpSession getSession()
返回request对应的session对象,如果没有,则创建一个
6 HttpSession getSession(boolean create)
返回request对应的session对象,如果没有并且参数create为true,则返回一个新的session对象
7 Locale getLocale()
返回当前页的Locale对象,可以在response中设置
8 Object getAttribute(String name)
返回名称为name的属性值,如果不存在则返回null。
9 ServletInputStream getInputStream()
返回请求的输入流
10 String getAuthType()
返回认证方案的名称,用来保护servlet,比如 “BASIC” 或者 “SSL” 或 null 如果 JSP没设置保护措施
11 String getCharacterEncoding()
返回request的字符编码集名称
12 String getContentType()
返回request主体的MIME类型,若未知则返回null
13 String getContextPath()
返回request URI中指明的上下文路径
14 String getHeader(String name)
返回name指定的信息头
15 String getMethod()
返回此request中的HTTP方法,比如 GET,,POST,或PUT
16 String getParameter(String name)
返回此request中name指定的参数,若不存在则返回null
17 String getPathInfo()
返回任何额外的与此request URL相关的路径
18 String getProtocol()
返回此request所使用的协议名和版本
19 String getQueryString()
返回此 request URL包含的查询字符串
20 String getRemoteAddr()
返回客户端的IP地址
21 String getRemoteHost()
返回客户端的完整名称
22 String getRemoteUser()
返回客户端通过登录认证的用户,若用户未认证则返回null
23 String getRequestURI()
返回request的URI
24 String getRequestedSessionId()
返回request指定的session ID
25 String getServletPath()
返回所请求的servlet路径
26 String[] getParameterValues(String name)
返回指定名称的参数的所有值,若不存在则返回null
27 boolean isSecure()
返回request是否使用了加密通道,比如HTTPS
28 int getContentLength()
返回request主体所包含的字节数,若未知的返回-1
29 int getIntHeader(String name)
返回指定名称的request信息头的值
30 int getServerPort()
返回服务器端口号

服务器响应(-)

HTTP 状态码(-)

服务器响应头

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>

状态码
状态码 消息 描述
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版本

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值