读书人

JSP的一些学习小结

发布时间: 2012-12-25 16:18:29 作者: rapoo

JSP的一些学习总结

JSP程序由JSP Engine(JSP引擎) 先将它转换成Servlet代码,接着将它编译成类文件载入执行。

只有当客户端第一次请求JSP时,才需要将其转换、编译

?

?

Directive 指令?

Directive是编译期间执行的指令,常见的指令有:page include taglib

?

page:指明与JSP Container(JSP容器)的沟通方式

<%@ page language="java"

??????? import="java.io.*,java.util.*"???? 引入包和类

??????? errorPage="errorPageUrl"??????????? 如果页面出现错误,跳转到哪个页面

??????? isErrorPage="false"????????????????? 当前页面是否为一个错误页面

??????? contentType="text/html; charset=GB2312"字符编码形式

??????? extends="index.jsp"????????????????? 指明这个jsp页面是从哪个jsp继承过来的

??????? buffer="8KB"?????????????????????????? 缓冲区,默认为8K。none代表不缓冲

??????? session="true"??????????????????????? 是否使用session,默认为true

??????? autoFlush="true"????????????????????? 页面输出完成后,是否自动刷新到客户端

??????? info="InfoText"?????????????????????? 指明JSP相关的描述信息?

%>

?

include: JSP Engine会在jsp程序的转换期间先把file属性设定的文件包含进来,然后开始执行转换及编译

<%@ include file="index.jsp"%>//index.jsp后面不能接参数。因为这是一个编译指令

?

?

?

Declaration 声明

<%?

int i = 0;//这种声明,i为局部变量

%>

<%!

int j = 0;//这种声明,j为成员变量(全局变量)

public void getMessage(){}//我们可以在此定义成员方法

%>

?

?

?

Action 运行期间的指令

Action是运行期间的指令,常见的指令有:jsp:useBean?? jsp:include?? jsp:forward

?

jsp:include

用于动态的JSP程序或HTML文件

除非这个指令被执行到,否则它是不会被Tomcat等JSP Engine编译

<jsp:include page="URLSpec">

??? <jsp:param name="ParamName" value="ParmValue"/> //用来设定include文件时的参数和值

</jsp:include>

jsp:forward

用于将一个jsp页面的内容传送到page所指定的jsp程序或者servlet中处理

<jsp:forward page="index.jsp">

??? <jsp:param name="paramName" value="paramValue"/>

</jsp:forward>

?

?

<jsp:forward>与response.sendRedirect的区别


<jsp:forward>?

?????? 1、跳转发生在服务器端,跳转后,客户端的URL地址依然是1.jsp的地址

?????? 2、<jsp:forward>在跳转的过程中,使用的是同一个request对象

?????? 3、工作流程:客户端发出请求,传递到服务器1.jsp页面,1.jsp页面解析代码到<jsp:forward>语句后跳转到2.jsp页面。服务器将2.jsp页面的内容传递给客户端

response.sendRedirect

?????? 1、跳转后,客户端的URL地址发生改变

?????? 2、response.sendRedirect在跳转过程中,是不同的request对象

?????? 3、工作流程:客户端发出请求后,传递到1.jsp页面。1.jsp向客户端发出响应,通知客户端重新访问2.jsp页面。客户端得到请求后,再向2.jsp发出请求。2.jsp将响应内容传递给客户端

?

<jsp:useBean>

Bean的基本要素:

?????? 1、必须要有一个不带参数的构造器(构造函数),在jsp元素创建Bean时会调用空构造器

?????? 2、Bean类应该没有任何公共实例变量。也就是说不允许直接访问实例变量,变量名称首字母必须小写

?????? 3、通过getter()和setter()方法来读或写变量值,并且将对应的变量首字母改成大写

?????? 4、Bean要有包,不能使用裸体类

?

<jsp:useBean id="beanName" scope="page" type="int">

</jsp:useBean>

id:Bean对象的实例名称

class:包名+类名

scope:这个Bean的作用范围,共有page,request,session,application四个值,默认为page,表示这个Bean只在当前页面有效。

type:Bean的实例类型,如果这个选择的是Object,则表示父类引用指向子类对象

?

<jsp:setProperty property="count" name="beanName" value="50"/>

设置Bean的属性,property="Bean中的变量名" 这句话相当于beanName.setCount(50);

<jsp:getProperty property="count" name="beanName" />

得到Bean的属性,相当于beanName.getCount();

?

?

JSP内置对象

内置对象是在JSP里直接可以使用的对象,包括:

?????? out request response pageContext session application config exception page

?

JSP内置对象out

?????? out内置对象是一个缓冲的输出流,用来给客户端返回信息。

?????? 它是javax.servlet.jsp.JspWriter类的一个实例

常用方法:

?????? println():向客户端输出各种类型的数据

?????? write():

?????? newline():输出一个换行符

?????? close():关闭输出流

?????? flush():输出缓冲区里的数据

?????? clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端

?????? clear():清除缓冲区里的数据

?????? getBufferSize():返回缓冲区的大小

?

?

JSP内置对象request

request内置对象表示的是调用JSP页面的请求。

它是javax.servlet.http.HttpServletRequest接口的一个实例

可以用此对象取得请求的Header信息,请求方式(get/post),请求的参数名称、参数值、客户端主机名等

常用方法:

?????? getParameter(String paramName)? 获得form提交过来的参数值,此参数值由paramName指定

?????? getMethod():返回客户端向服务器传送数据的方法

????????????? getParameterNames():获得客户端传送给服务器的所有参数名,返回枚举类型(Enumeration)

????????????? getParameterValues(String name):获得指定参数的所有值,由name指定

????????????? getRequestURI():获得发出请求字符串的客户端地址

????????????? getRemoteAddr():获取客户端的IP地址

????????????? getRemoteHost():获取客户端的机器名称

????????????? getServerName():获取服务器的名字

?????????? getServerPort():获取服务器端的端口

?

?

JSP内置对象response

表示的是返回给客户端的响应

它是javax.servlet.http.HttoServletResponse接口的一个实例

经常用于设置HTTP标题,添加cookie,设置响应内容的类型和状态,发送HTTP重定向和编码URL

常用方法:

?????????? sendRedirect(String url):重定向JSP文件

setContentType(String contentType):设置MIME类型和编码方式

addCookie(Cookie cookie):添加一个cookie对象,用于在客户端保存特定的信息

?????????? addHeader(String name,String value):添加HTTP头信息,该Header信息将发送到客户端

?????????? containsHeader(String name):判断指定名字的HTTP头文件是否存在

?????????? sendError(int):向客户端发送错误的信息

?

JSP内置对象session

常用方法:

?????? setAttribute(String name ,Object value)

?????????? getAttribute(String name)

?????????? isNew()

?????????? getSessionId()

?

Servlet和JSP的通信

从JSP调用Servlet可用<jsp:forward>或者sendRedirect,请求信息自动跳转到servlet

?

从servlet调用JSP使用ResquestDispatcher接口的forward(request,response)方法或者使用sendRedirect跳转到JSP页面

读书人网 >JavaScript

热点推荐