<%@ page[language=”脚本语言种类”][import=”包或类”][contentType=”MIME类型”]
[session=”true/false”][buffer=”缓冲区大小”]
[autoFlash=”true/false”][isThreadSafe=”true/false”]
[info=”text”][errorPage=”异常事件页面URL”][isErrorPage=”true/false”]%>
默认情况下,JSP文件中会自动导入如下类:
Java.lang.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*
4.session:session属性设置在jsp页面中是否需要使用session对象。如果为false,则在jsp程序中不能使用session对象以及scope=session 的 JavaBean 或EJB。此属性的默认值为true。
5.buffer
Buffer的值可以有none、8KB或是给定的kb值,值为none表示没有缓存,直接输出至客户端的浏览器中,此属性用来设定out对象缓存处理的缓冲区的大小。
- autoFlash
属性设置当缓冲区已满时,是否会自动刷新缓冲区。如果取值为false,当缓冲区溢出时会出现异常。
- isThreadSafe属性设置JSP页面是否可以多线程访问。如果值为true则此JSP页面可同时响应多个客户的请求;如果为false则在某个时刻内只能处理一个客户的请求。
4.7.2 include指令
Include指令用来在该指令处静态插入一个文件
<%@ include file=”文件路径” %>
或需要传递参数的:
4.8.2 forward动作:
Forward动作指令用来重定向网页,即从当前网页的forward动作指令处转向执行另一个网页程序。
或者:
其中,page参数中的值是要转向的文件,可以是相对应用服务器的路径,也可以是相对当前目录的路径;如果要转向的网页是一个动态网页,如:jsp文件,则可以传递参数。
页面之间的重定向也可以使用response.sendRedirect(目的URL)方法来实现,response是JSP的内置对象。
4.8.4 useBean动作指令
其中,id参数是在JSP中这个bean组件的名称,只要是在它的有效范围内,均可使用这个名称来调用它;scope为bean的有效范围,他的取值有四种,page,request,session,application,默认情况下为page,值为page表示在当前JSP页面及当前页面所包含的静态文件中有效;
4.8.5 setProperty动作指令
这个动作指令用来设置Bean中属性的值,基本语法格式有如下四种:
第一种语法格式中,property=”*”,应用这种格式要求bean属性的名称与类型要和request对象中参数名称与类型一致,以此用bean中的属性来接受客户输入的数据,系统会根据名称来自动匹配。如果类型不一致,会根据bean中的类型进行转换。
- 转换为boolean ,方法为Boolean.valueOf(String str).booleanValue().
- 转换为Boolean,方法为Boolean.valueOf(String str)。
- 转换为byte,方法为Byte.valueOf(String str).byteValue().
- 转换为Byte,Byte.valueOf(String str)
- 转换为char,方法为Character.valueOf(String str).charValue().
- 转换为Character,方法为Character.valueOf(String str)
- 转换为double 方法为Double.valueOf(String str).doubleValue()
- 转换为Double,方法为Double.valueOf(String);
- 转换为int 方法为Integer.valueOf(String str).intValue()。
- 转换为Integer,方法为Integer.valueOf(String str)。
- 转换为float,方法为Float.valueOf(String str).floatValue()
- 转换为Float,方法为Float.valueOf(String str)
- 转换为long,方法为Long.valueOf(String s).longValue()
- 装换为Long,方法为Long.valueOf(String s)。
在同一个setProperty动作指令中不能同时存在param和value参数。
4.8.6 getProperty动作指令
getProperty动作指令用来获得bean的属性并将其转换为字符串,再在JSP页面中输出。使用的语法格式如下:
4.9 JSP中的中文字符处理
public String codeToString(String str){//处理中文字符串的函数
String s = str ;
try{
byte tempB[] = s.getBytes("ISO-8859-1");
s=new String(tempB);
return s;
}catch(Exception e) {
return s;
}
}
05 JSP的内置对象
Jsp的内置对象在jsp页面中无须声明就可以直接使用,其中内置对象常用的有:request,response,session,application,out,config,pageContext。
- request 对象与HttpServletRequest类关联,是javax.servlet.ServletRequest的一个子类。用request对象可以获取客户端提交的数据,如表单中的数据,网页地址后带的参数等。
- response对象与HttpServletResponse类关联,可用来向客户端输入数据。
- session 对象与HttpSession类关联,可用来保存在服务器与一个客户端之间需要保留的数据,当客户端关闭网站(或称为系统)的所有网页时,session变量会自动清除。Http是一个无状态的协议,不保留会话之间的协议,通过session对象扩展了Http的功能。
- application application对象与ServletContext类关联,一旦创建(在服务器开始提供服务时,即第一次被访问时application对象就会被创建),就会一直保持直到服务器关闭服务器为止。所以application对象可用来提供一些全局的数据和对象。
- out 对象实际上是使用PrintWriter类来向客户端浏览器输出数据。
- config 对象是ServletConfig类的一个对象,是JSP配置处理程序的句柄,在JSP页面范围内有效。
- pageContext 用来管理属于JSP中特殊可见部分中已命名对象的访问。
Request对象方法:
- getAttribute():
此方法将参数name指定的属性值作为一个Object对象返回;如果参数name中给定的名字不存在相应的属性则返回null,调用方法如下:
public Object getAttribute(String name)
- public java.util.Enumeration getAttrbuteNames()
此方法得到一个Enumeration(枚举型)对象,其中的值为此请求中可用的属性的名称
- public String getCharacterEncoding()
此方法返回请求中所用的字符编码的名称,如果未指定字符编码则返回null,调用方法如下:
Public String getCharacterEncoding()
- public String getContentType()
此方法返回请求的MIME类型,如果类型未知则返回null
- public String getContextPath()
此方法得到请求URL中请求的应用上下文路径。如果当前Web应用就是Tomcat安装目录的webapps子目录中的ROOT,则getContextPath()方法会返回””;如果为其他目录,则返回相对于Web应用服务器的根目录的子目录。如果当前Web应用为webapp,则getContextPath()方法的返回值为“/webapp”
- public String getLocalAddr() 此方法返回接受请求的Web服务器的地址
- public String getLocalName() 此方法返回接受请求的Web服务器的机器名
- public String getMethod() 此方法得到请求所用的Http请求类型,如GET、POST、PUT等
- public String getParameter(String name)此方法得到请求中指令的参数值,其结果作为String,如果参数不存在则会返回null
- public java.util.Map getParameterMap() 此方法得到请求中所有参数的一个Map对象,其中参数名为键,字符串数组作为值
- public java.util.Enumeration getParameterNames() 此方法获得所有请求参数名称的枚举
- public String[] getParameterValues(String name) 此方法得到所有参数值的数组,数组的内容为请求中指定参数name的多个值。如果在请求中找不到name参数则返回null
- public String getProtocol() 此方法返回请求所用协议的名称和版本,其形式为:协议名称/主版本号.副版本号,如HTTP/1.1
- public String getQueryString() 此方法返回请求URL中所包含的位于路径之后的查询字符串
- public String getRemoteAddr() 此方法返回发送请求的客户端IP地址
- public String getRemoteHost()此方法得到发送请求的客户端机器名,如果无法获得机器名则返回IP地址
- public String getRemotePort() 此方法获得客户端或发送请求的最后一个代理的端口号
- public String getRequestURI()返回请求路径URI
- public StringBuffer getRequestURL() 得到请求URL,包括协议、服务名、端口号和URL路径。
- public int getServerPort() 得到接收请求的服务器端的端口号
- public String getServletPath() 此方法获得当前请求URL中标识Servlet的部分,如果是JSP页面则是JSP页面的完整上下文路径
- public HttpSession getSession() 此方法得到与当前相关联的HttpSession对象,如果此请求还没有回话则创建一个新的HttpSession对象并返回这个对象
- public void removeAttribute(String name) 从请求中删除指定名称name的属性
- public void setCharacterEncoding() 此方法设置读取请求数据时所使用的字符编码,此方法必须在调用request的所用其他方法之前调用,其后才能再行读取参数
- public Object setAttribute(String name,Object attribute) 此方法将指定的属性对象attribute用名称保存于请求中
- getParameter()获取的是客户端设置的数据。
getAttribute()获取的是服务器设置的数据。
②getParameter()永远返回字符串
getAttribute()返回值是任意类型
既然parameter和attribute都是传递参数,为什么不直接使用parameter呢?
①服务器端不能通过setParameter(key, value)来添加参数,因为没有这个函数
所以如果需要在服务器端进行跳转,并需要想下个页面发送新的参数时,则没法实现。但是Attribute可以,可以通过setAttribute(),将值放入到request对象,然后在其他页面使用getAttribute获取对应的值,这样就达到一次请求可以在多个页面共享一些对象信息
-
- parameter返回值是字符串,意味着不能传递其他的对象,如Map,List,但是attribute则可以存放任意类型的Java对象
-
- response对象
public abstract interface javax.servlet.http.HttpServletResponse extends javax.servlet.ServletResponse;
response对象的常用方法有如下一些:
-
-
- public void flushBuffer() throws IOException 此方法强制将response缓冲区中的所用内容写到客户端
- public int getBufferSize() 此方法得到response的实际缓冲区大小,如果没有使用缓冲区则返回0。
- public String getCharacterEncoding() 此方法得到当前response中的字符集名称
- public String getContentType() 此方法获得response中所发送的MIME类型
- public ServletOutputStream getOutputStream() throws IOException 此方法返回一个可用于在response中写入二进制数据的输出流ServletOutputStream。在JSP页面中建议不使用这个方法,因为JSP页面中的数据文文本数据.
- Public PrintWriter getWriter() throws IOException 此方法返回一个可以与在response中写入文本数据的PrintWriter。在JSP页面中建议不使用此方法,因为它可能会影响Web容器的一些内在机制。
- Public void SendRedirect(String location) throws IOException 此方法用于进行页面重定向,参数location要导向目标地址,可以是相对路径也可以是绝对路径。
- Public void setBufferSize(int size)此方法设置response的响应缓冲区大小
- Public void setCharacterEncoding(String encoding) 设置response的响应字符编码,也就是Content-Type中的charset属性值,此方法必须在调用getWriter()方法前调用。
- Public void setContentType(String type) 此方法设置repsponse的Content-Type类型,如果其中包括了charset属性值,则会设置字符编码,此方法必须在调用getWriter()方法前调用。
5.3.2 使用Cookie
Cookie是服务器发送给客户端浏览器的体积较小的纯文本信息,以后当用户访问同一个Web服务器时,浏览器会把他们发送给服务器。通过让服务器读取原先保存在客户端的信息,为浏览器提供一系列的方便。
但在安全性要求较高的场合下,建议不要使用Cookie。浏览器只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
Cookie存放在客户端,首先要新建一个Cookie,然后设置其属性,在通过response对象的addCookie()方法将其放入客户端,获取Cookie对象可调用request对象的getcookies()方法。
创建方法:Cookie(String cookieName,String cookieValue);
Cookie对象的名称和值都不能包含空白符以及下列字符:
[]()=,”/?@:
getComment()/setComment() :获取/设置Cookie的注释
getDomain()/setDomain():获取/设置Cookie适用的域
使用这两个方法可以指示浏览器把Cookie返回给同一域内的其他服务器。注意域必须以点开始(例如.sitename.com)
getMaxAge()/setMaxAge():获取/设置Cookie过期之前的时间,以秒计。如果不设置该值,则Cookie只在当前会话内有效,即在用户关闭浏览器之前有效,而这些Cookie不会保存到磁盘上。
GetName()/setName():获取/设置Cookie的名称。本质上,名称和值是需要程序员始终关心的两个部分。由于HttpServletRequest的getCookies方法返回的是一个Coolie对象的数组,因此通常要用循环语句来访问这个数组并查找特定名称,然后getValue检查它的值。
GetPath()/setPath():获取/设置Cookie适用的路径。如果不指定路径,Cookie将返回当前页面所在目录及其子目录下的所有页面。
getSecure()/setSecure():获取/设置一个booelan值,该值表示Cookie是否只能通过加密的连接(即SSL)发送。
GetValue()/setValue():获取/设置Cookie的值。名称和值实际上是程序员始终关心的两个方面。
getVersion()/setVersion():获取/设置Cookie所遵从的协议版本。默认版本0遵循原先Netscape规范;版本1遵从RFC2109,但尚未得到广泛的支持。