JavaWeb-JSP

JSP

JSP简介

JSP(Java Server Page)是一种基于文本的程序,其特点是HTML代码与Java程序共存。执行JSP时会被Tomcat自动编译。编译后的JSP与HTTPServlet一样,都是javax.servlet.Servlet接口的子类,因此JSP是另一种形式的Servlet。

JSP包括Java Bean,自定义标签,EL表达式,JSTL标准标签类库等

JSP是先部署后编译为class,HTTPServlet是先编译class后部署

JSP包括注释、指令、脚本元素(Java代码)、模板数据、动作组成。

JSP生命周期

       同Servlet,运行时只有一个实例,同样有init(),destroy()。JSP还有自己的初始化和销毁方法public void jspInit(){..} public void jspDestroy(){..}。

JSP语法

Java部分

JSP源码包括HTML代码和Java部分。

<% Java代码 %>//执行的Java代码

<%! Java代码 %>//声明全局变量或方法

<%= Java代码 %>//表达式,不以;结束

if、for语句可以用{}把HTML语句放在中间。如<%{%>HTML<%}%>

JSP注释

       <%--JSP注释客户端不可见--%>

       <!--HTML注释客户端可见-->

       //和/*…*/JSP脚本注释客户端不可见

JSP指令

格式<%@指令 属性键值对%>

如:<%@ page contentType="text/html;charset=UTF-8" language="java" %>

常见指令有page、taglib、include等

page指令

用来声明JSP页面属性,一个JSP页面可以包含多个page指令。

除了import属性可以出现多次,其他属性都只能出现一次。

属性

描述

buffer

指定out对象使用缓冲区的大小

autoFlush

控制out对象的 缓存区

contentType

指定当前JSP页面的MIME类型和字符编码

errorPage

指定当JSP页面发生异常时需要转向的错误处理页面

isErrorPage

指定当前页面是否可以作为另一个JSP页面的错误处理页面

extends

指定servlet从哪一个类继承,继承普通类时需要实现init和destroy等方法

import

导入要使用的Java类

info

定义JSP页面的描述信息

isThreadSafe

指定对JSP页面的访问是否为线程安全

language

定义JSP页面所用的脚本语言,默认是Java

session

指定JSP页面是否使用session

isELIgnored

指定是否执行EL表达式

isScriptingEnabled

确定脚本元素能否被使用

 

include指令

include指令只有一种形式:<%@ include file="文件相对 url地址" %>

include指令用来实现JSP页面的区块化。

比如每个页面都需要导航栏,可以把导航栏的JSP文件include进来。

<jsp:include file="文件相对 url 地址" />,该行为与include指令类似,区别include指令“先包含,后编译”,include行为“先运行,后包含”。

taglib指令

用来指明JSP页面内使用的JSP标签库。

<%@ taglib uri="uri"prefix="prefixOfTag" %>

属性uri为类库地址,prefix为标签的前缀。

JSP行为

JSP行为是一组JSP内置标签,是对常用的JSP功能的抽象与封装,包括标准JSP行为和自定义JSP行为(JSP自定义标签)。

<jsp:action_nameattribute="value" />

语法

描述

jsp:include

在页面被请求的时候引入一个文件。

jsp:useBean

寻找或者实例化一个JavaBean。

jsp:setProperty

设置JavaBean的属性。

jsp:getProperty

输出某个JavaBean的属性。

jsp:forward

把请求转到一个新的页面。

jsp:plugin

根据浏览器类型为Java插件生成OBJECT或EMBED标记。

jsp:element

定义动态XML元素

jsp:attribute

设置动态定义的XML元素属性。

jsp:body

设置动态定义的XML元素内容。

jsp:text

在JSP页面和文档中使用写入文本的模板

常见的属性

所有的动作要素都有两个属性:id属性和scope属性。

id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。

scope属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值: (a) page, (b)request,(c)session, 和 (d)application。

<jsp:include>

区别include指令。

属性page是必须的,为被包含文件的相对路径。

属性flush取true或false,读入被保存文件内容前是否清空缓存。

<jsp:useBean>

Java Bean行为包括useBean、setProperty、getProperty行为。

Java Bean为Java类:公有类、无参构造方法、属性私有、getter和setter方法。

jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean

<jsp:useBeanid="name" class="package.class" />

属性

描述

id

Java Bean对象的名称

class

指定Bean的完整包名类名。

scope

该JavaBean对象的范围,page、request、session、application(依次增大)

<jsp:setPropertyname="myName" property="someProperty" .../>

<%-- 设置 person 的所有属性,所有的属性值从 request 中自动取得 --%>
<jsp:setProperty name="person" property="*" />

jsp:setProperty用来设置已经实例化的Bean对象的属性,有两种用法。首先,你可以在jsp:useBean元素的外面(后面)使用jsp:setProperty,如下所示:

<jsp:useBean id="myName" .../>

...

<jsp:setProperty name="myName"property="someProperty" .../>

此时,不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。第二种用法是把jsp:setProperty放入jsp:useBean元素的内部,如下所示:

<jsp:useBean id="myName" ...>

...

  <jsp:setProperty name="myName"property="someProperty" .../>

</jsp:useBean>

此时,jsp:setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp:setProperty。

jsp:setProperty动作有下面四个属性,如下表:

属性

描述

name

name属性是必需的。它表示要设置属性的是哪个Bean。

property

property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

value

value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。   value和param不能同时使用,但可以使用其中任意一个。

param

param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。

<jsp:getPropertyname="myName" property="someProperty" .../>

<jsp:getProperty>动作元素

jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。语法格式如下:

<jsp:useBean id="myName" .../>

...

<jsp:getProperty name="myName"property="someProperty" .../>

下表是与getProperty相关联的属性:

属性

描述

name

要检索的Bean属性名称。Bean必须已定义。

property

表示要提取Bean属性的值

<jsp:plugin>

简化嵌入Applet的操作。

<jsp:plugin/>用于在JSP中定义Java Applet,并声明Applet宽度高度等属性。

<jsp:params/>定义一组一对多参数,<jsp:param/>定义单个参数。

<jsp:fallback/>定义不支持Applet时的替代信息。

如:

<jsp:plugin
        code="Graph.class"
        codebase="http://java.sun.com/applets/jdk/1.4/demo...."
        type="applet"
        width="500"
        height="400">
    <jsp:params>
        <jsp:param name="edges" value="joe-food,joe-dog,joe-tea,joe-cat,joe-table,table-plate/50,plate-food/30,food-mouse/100,food-dog/100,mouse-cat/150,table-cup/30,cup-tea/30,dog-cat/80,cup-spoon/50,plate-fork,dog-flea1,dog-flea2,flea1-flea2/20,plate-knife"/>
        <jsp:param name="center" value="joe" />
    </jsp:params>
    <jsp:fallback>您的浏览器不支持 Java Applet</jsp:fallback>
</jsp:plugin>

Applet的class文件不要放在WEB-INF下,Applet程序并不属于JavaWeb体系,Applet程序由浏览器执行。

<jsp:plugin/>属性:

属性名

取值

描述

type

bean,applet

该插件的类型,一般为applet

code

字符串

Applet的类名

codebase

字符串

Applet所在位置,可为相对路径

align

bottom,top,middle,left,right

对齐方式

achive

字符串

运行时所依赖的jar,多个jar由“,”隔开

height

数字

高度

width

数字

宽度

hspace

数字

水平空隙

vspace

数字

垂直空隙

name

字符串

该applet名称,其他applet可以通过该名访问该applet

jreversion

Java版本号

最低Java版本

<jsp:forward>

jsp:forward行为把请求转到另外的页面,实际上是对forward方法的封装。jsp:forward标记只有一个属性page。语法格式如下所示:

<jsp:forward page="相对 URL 地址" />

Servlet一样,跳转发生之前不能有任何输出到达客户端浏览器,否则会抛出IllegalStateException

<jsp:directive/>

<jsp:directive/>行为相当于JSP指令。

<jsp:directive.page/><jsp:directive.include/><jsp:directive.taglib/>可以与JSP指令相互改写,是为XML准备的,普通JSP也能使用。

JSP内置对象

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

对象

描述

request

HttpServletRequest类的实例,request范围

response

HttpServletResponse类的实例,page范围

out

JspWriter类的实例,用于把结果输出至网页上,page范围

session

HttpSession类的实例,session范围

application

ServletContext类的实例,与应用上下文有关,application范围

config

ServletConfig类的实例,page范围

pageContext

PageContext类的实例,提供对JSP页面所有对象以及命名空间的访问,page范围

page

类似于Java类中的this关键字,page范围

Exception

Exception类的对象,代表发生错误的JSP页面中对应的异常对象,page范围

内置对象作用域范围

page

具有page范围的对象被绑定到javax.servlet.jsp.PageContext对象中,只能在创建对象的页面访问。pageContext.getAttribute()方法

request

具有request范围的对象被绑定到javax.servlet.ServletRequest对象中。request.getAttribute()。

session

具有session范围的对象被绑定到javax.servlet.http.HttpSession对象中,session.getAttribute()。

application。

具有application范围的对象被绑定到javax.servlet.ServletContext对象中,application.getAttribute()。

out对象

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

方法

描述

out.print(dataType dt)

println

输出Type类型的值

void append(CharSequence cs)

向out缓存扩展字符类输出

out.flush()

将缓存内容flush到客户端浏览器

void clear()

清空要输出的内容

Boolean isAutoFlush()

是否自动flush

int getRemaining()

返回缓存大小

int getBufferSize()

换回缓存剩余大小

request对象

request对象是javax.servlet.http.HttpServletRequest 类的实例。每当客户端请求一个JSP页面时,JSP引擎就会制造一个新的request对象来代表这个请求。

request对象提供了一系列方法来获取HTTP头信息,cookies,HTTP方法等等。

方法

描述

void setAttribute(String name,Object value)

设置request中属性

Object getAttribute(String name)

获取对应属性值

String getMethod()

返回提交方式一般get、post

String getParameter(String key)

返回提交的参数

String[] getParameterValue(String key)

返回提交的多个同名参数值

Enumeration getParameterNames()

返回所有提交的参数名

Cookie[] getCookies

返回所有cookie

String getContextPath()

返回应用程序路径

String getRequestURI()

返回请求的URI路径

void setCharacterEncoding(String encoding)

使劲儿中request的编码方式

String getHeader(String name)

获取request头信息

Enumeration getHeaderNames()

返回所有request头名称

Dispatcher getRequestDispatcher()

返回Dispatcher对象,可执行forward操作

HttpSession getSession()

返回HTTPSession对象

response对象

response对象是javax.servlet.http.HttpServletResponse类的实例。当服务器创建request对象时会同时创建用于响应这个客户端的response对象。

response对象也定义了处理HTTP头模块的接口。通过这个对象,开发者们可以添加新的cookies,时间戳,HTTP状态码等等。

void addCookie(Cookie cookie)

OutputStream getOutputStream()

void sendRedirect(String url)

void setContentType(String contentType)

PrintWriter getOut()

void setHeader(String name,String value)

void setStatus(int status)

config对象

config对象是 javax.servlet.ServletConfig 类的实例,直接包装了servlet的ServletConfig类的对象。封装了配置在web.xml中初始化JSP参数。

这个对象允许开发者访问Servlet或者JSP引擎的初始化参数,比如文件路径等。

以下是config对象的使用方法,不是很重要,所以不常用:

config.getServletName();

它返回包含在<servlet-name>元素中的servlet名字,注意,<servlet-name>元素在 WEB-INF\web.xml 文件中定义。

String getInitParameter(String name)

Enumeration getInitParameterNames()

ServletContext getServletContext()

String getServletName()

session对象

session对象是 javax.servlet.http.HttpSession 类的实例。和Java Servlets中的session对象有一样的行为。

session对象用来跟踪在各个客户端请求间的会话,保存用户状态。

表示客户端与服务器的一次会话,保存在服务器中。

Servlet中需要通过request.getSession()来获取session对象,JSP中可直接使用。

String getID()

Object getAttribute(String name)

Enumeration getAttributeNames()

long getCreationTime()

long getLastAccessedTime()

int getMaxInactiveInterval()

void setAttribute(String name,Object value)

void setMaxInactiveInterval(long second)

application对象

application对象直接包装了servlet的ServletContext类的对象,是javax.servlet.ServletContext 类的实例。

这个对象在JSP页面的整个生命周期中都代表着这个JSP页面。这个对象在JSP页面初始化时被创建,随着jspDestroy()方法的调用而被移除。

通过向application中添加属性,则所有组成您web应用的JSP文件都能访问到这些属性。

page对象

这个对象就是页面实例的引用。它可以被看做是整个JSP页面的代表。

page 对象就是this对象的同义词。

pageContext 对象

pageContext对象是javax.servlet.jsp.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中的相关属性:

pageContext.removeAttribute("attrName",PAGE_SCOPE);

Object findAttribute(String name)

void forward(String url)

Object getAttribute(String name)

Object getAttribute(String name,int scope)

JspWriter getOut()

Object getPage()

ServletRequest getRequest()

ServletResponse getResponse()

HttpSession getSession()

exception 对象

exception为java.lang.Exception类的对象。需设置<%@page isErrorPage=”true”%>

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

EL表达式

EL(Expression Language)表达式,用${}括起来,更方便读对象。

EL写在JSP的HTML代码中而不是<%%>中。

<jsp:useBean id=”person”class=”Person”></jsp:useBean>

${person}相当于request.getAttribute(“person”)

${person.age}相当于person.getAge()

EL还可以读取JSP内置对象的属性,如:

${param.foo}, ${header.host}

EL表达式运算

${1+2}输出3

EL表达式能方便操作Java Bean、集合、简单运算,但不能直接访问普通方法以及静态属性。

 

与Servlet相比,JSP更适与HTML打交道,而Servlet更适合与Java打交道。现在的JavaEE中,Servlet只用于处理业务逻辑,JSP只用于显示结果。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值