JSP内置对象有:request、response、session、application、 out。
request与response对象是JSP内置对象中较重要的两个,这两个对象提供了对服务器和浏览器通信方法的控制。使用浏览器从网站获取HTML页面时,实际在使用超文本传送协议(HTTP),HTTP协议规定了信息在Internet上的传输方法,特别是规定了浏览器与服务器的交互方法。从网站获取页面时,浏览器在网站上打开一个对网络服务器的连接,并发出请求。服务器收到请求后回应,所以HTTP协议的核心就是“请求与响应”。浏览器的请求是有某种结构的,HTTP请求包括一个请求行、头域和可能的信息体。最普通的请求类型是对页面的一个简单请求。如:
GET/hello.htm HTTP/1.1
Host:www.sina.com.cn
首行是请求行。规定了请求的方法、请求的资源以及使用http协议的脚本。此例中的第二行是头(header),Host头规定了网站上hello.htm文件的主机地址。
服务器在收到请求时,返回HTTP响应。响应也有某种结构,每个响应都由状态行开始。
1request对象
在JSP中,内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息。
客户通常使用HTML表单向服务器的某个JSP页面提交信息,表单的一般格式是:
<form method="get"|"post" action="提交信息的目的地页面">
<input type="text" name="boy" value="ok">
<input type="submit" value="送出" name="submit">
</form>
get方法和post方法的主要区别是:使用get方法提交的信息会在提交的过程中显示在浏览器的地址栏中而post方法提交的信息不会显示在地址栏中。
*****************
request对象可以使用getParameter(String s)方法获取该表单通过text提交的信息。如:
request.getParameter("boy");
它返回的是一个String类型,如果没有取得参数(boy)的值,则返回""(一个空字符串)。
<a href="index.jsp?page=<%=intPage+1%>">下一页</a>
然后在index.jsp中使用request.getParameter("page")也可以获取page的值。如果有多个像page这样的parameter可以用&分开。如:"index.jsp?id=6&page=fff"
不能通过Integer.parseInt(request.getParameter("xxx"));将其转换为整型会出现异常:For input string:"undefined"。需要先将其赋值给一个String变量,在将这个String变量转换为整型。
**************
获取客户提交的信息
request对象获取客户提交的信息的最常用的方法是getParameter(String s)。
例:
<%@ page contentType="text/html;charset=GB2312" %>
<html>
<body bgcolor=cyan>
<font size=4>
<form action="" method=post name=form>
<input type="text" name="girl">
<input type="submit" value="Enter" name="submit">
</form>
<%
String textContent=request.getParameter("girl");
double number=0,r=0;
if(textContent==null){
textContent="0";
}
try{
number=Double.parseDouble(textContent);
if(number>=0){
r=Math.sqrt(number);
out.print(String.valueOf(number)+"的平方根:");
out.print("<br>"+String.valueOf(r));
}
else{
out.print("<br>"+"请输入一个正数");
}
}catch(NumberFormatException e){
out.print("<br>"+"请输入数字字符");
}
%>
</font>
</body>
</html>
表单中action请求的页面,如果是当前页面,可以用双引号""代替当前页面,注意双引号之间不能有空格。
处理中文汉字信息
当用request处理获取客户提交的汉字字符时,会出现乱码问题,所以对含有汉字的字符的信息必须进行特殊的处理。使用request对象的JSP页面可以使用两种方式避免出现汉字乱码问题。
一种方式是使用page指定contentType属性的值时,将其中出现Charset中的首写字母大写。
另一种方式是把出现contentType中的首写字母小写,然后内置对象request将获取的信息重新编码,即用ISO-8859-1进行编码,并将编码存放在一个字节数组中,然后将这个数组转化为指定格式的字符串(如UTF-8);。如:
String str=request.getParameter("message");
byte b[]=str.getByte("ISO-8859-1");
str=new String(b,"UTF-8");
当用户访问一个页面时,会提交一个HTTP请求个JSP引擎,这个请求包括一个请求行、HTTP头和信息体。如:
post/test.jsp/HTTP.1.1
host:localhost:8080
accept-encoding:gzip,deflate
其中首行叫请求行,规定了向访问页面请求提交信息的方法(post或get)以及请求页面的文件名字和使用的通信协议。第2、3行分别是两个头(Header),host、accept-encoding是头名字。一个请求还包含信息体,即HTML标记组成的部分,可能包含各式各样用于提交信息的表单等。
2request的getParameter方法获取表单的提交的有关信息,实际上request对象调用相关方法可以获取请求的许多细节信息。内置对象request常用的方法:
public void setAttribute(String key,Object obj)
public Object getAttribute(String key)
getProtocol(),获取客户向服务器提交信息所使用的通信协议。如:HTTP/1.1
getServletPath(),获取客户请求的servlet/JSP页面的路径。
getContentLength(),获取客户提交的整个信息的长度。
getMethod(),获取客户提交信息的方式。例如:GET请求,request.getMethod().equalsIgnoreCase("GET")
getHeader(String s),获取HTTP头文件中的参数s指定的头名字的值。一般参数s可取的头名有:accept、refer、accept-language、content-type、accept-encoding、user-length、host、content-length、connection、cookie等。
getHeaderNames(),获取头名字的一个枚举。
getHeaders(String s),获取头文件中指定头名字的全部值的一个枚举。
getRemoteAddr(),获取客户的IP地址。
getLocalAddr(),返回服务器的IP地址。
getRemoteHost(),获取客户机的名称。
getRemotePort(),获取客户机的端口号。
getServerName(),获取服务器的名称。
getServerPort(),获取服务器的端口号。
getParameterNames(),获取客户提交的信息体部分中name参数值的一个枚举,返回Enumeration类型。
getContextPath(),是为了解决相对路径的问题,可以返回站点的根路径。例如在Webapps目录下存在一个项目目录tutorial,则
<%request.getContextPath()%>返回/tutorial。但在JSP文件里,通过request.getContextPath()得到的路径有时却为空, 这是因为request.getContextPath()得到的是项目的名字,如果项目为根目录,则得到一个"",即空的字符串
request.getRequestURL(),请求路径问号以前的部分。如http://localhost:8080/3cs/research.form
request.getRequestURI(),请求路径从项目根路径开始的部分,两者都不能得到问号后的部分。如/3cs/research.form
request.getQueryString(),获取请求路径参数。也就是?以后的部分,post方法传的参数,getQueryString()得不到,
它只对get方法得到的数据有效。
*****request.getParameterValues与request.getParameter的区别*******
request.getParameterValues(String name)是获得如checkbox,select多选(名字相同,但值有多个)的数据,返回的是一个String[]数组。
request.getParameter(String name)是获得相应名得数据,如果有重复的名或像checkbox,select多选则仅返回第一个值。
http://${pageContext.request.serverName}:${pageContext.request.serverPort},通过request的serverName和serverPort取得主机名和发布的服务端口路径。
request.getParameterMap()的返回类型是Map类型的对象,也就是符合key-value的对应关系,但这里要注意的是,value的类型是String[],而不是String.
得到jsp页面提交的参数很容易,但通过它可以将request中的参数和值变成一个map,以下是将得到的参数和值打印出来,形成的map结构:map(key,value[]),即:key是String型,value是String型数组。
例如:request中的参数t1=1&t1=2&t2=3
形成的map结构:
key=t1;value[0]=1,value[1]=2
key=t2;value[0]=3
ServletRequest的getServletContext方法是Servlet3.0添加的。Servlet3.0以下版本的ServletRequest没有这个方法。
假定你的web application 名称为news,你在浏览器中输入请求路径:http://localhost:8080/news/main/list.jsp
则执行下面向行代码后打印出如下结果:
1、 System.out.println(request.getContextPath());
打印结果:/news
2、System.out.println(request.getServletPath());
打印结果:/main/list.JSP
3、 System.out.println(request.getRequestURI());
打印结果:/news/main/list.JSp
4、 System.out.println(request.getRealPath("/"));
打印结果:F:\tomcat 6.0\webapps\news\test
getRealPath("/"),返回项目的实际物理路径。同上例,request.getRealPath("/")将会返回D:\apache-tomcat-6.0.20\webapps\reportTest\,其中reportTest是web项目名称,request.getRealPath("") 这个方法已经不推荐使用了,那代替它的是什么方法呢?
request.getSession().getServletContext().getRealPath("/") 得到站点的绝对地址
在servlet或者struts中还可以这样:
this.getServletContext().getRealPath("/");
this.getServlet().getServletContext().getRealPath("/");
this.getServletContext()将返回一个ServletContext对象。
<% Enumeration enumone=request.getParameterNames();
while(enumone.hasMoreElements()){
String s=(String)enumone.nextElement();
out.println(s);
}
%>
对于单选下拉框,使用getParameter()方法获得用户选择的结果。若要处理复选下拉框,应使用getParameterValues()方法,
String[] s=request.getParameterValues("city");
request获取输入流有两个:
字节形式输入:request.getInputStream(),返回一个ServletInputStream对象。
字符形式输入:request.getReader()返回一个BufferedReader 对象。
getInputStream方法返回一个代表实体内容的输入流对象,类型为javax.servlet.ServletInputStream,可以读取HTTP请求消息中的实体内容。如果实体内容中包含二进制数据,那么就只能使用此方法返回的输入流对象来读取。
getReader方法用于返回一个代表实体内容的BufferReader对象,返回的BufferReader对象将实体内容中的字节数据按照请求消息中指定的字符集编码转换成文本字符串。
当请求消息中的实体内容全部是文本数据,并且在Servlet程序中也需要以文本方式来处理这些内容时,适于使用getReader方法。如果 Servlet程序不对他们进行处理,而只是存储到服务器的文件系统或数据库中,这适于使用
getInputStream方法。
3处理HTML标记
JSP页面可以含有HTML标记,当客户通过浏览器请求一个JSP页面时,Tomcat服务器将JSP页面中HTML标记直接发送到客户的浏览器,有客户的浏览器负责执行这些HTML标记。对于HTML标记的学习可以参考HTML笔记。
4reponse对象
可以使用reponse对象对客户的请求做出动态响应,向客户端发送数据。
设置动态响应类型contentType属性
ContentType 属性指定服务器响应的 HTTP 内容类型。如果未指定 ContentType,默认为 text/html。
由于page指令只能为contentType指定一个值来决定响应MIME类型,如果想动态地改变这个属性的值来响应客户,就需要使用reponse对象的setContentType(String s)来改变contentType的属性值。contentType属性指定的值有:text/html,text/plain,image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/x-shockwave-flash,application/vnd.ms-powerpoint,application/vnd.ms-excel,application/msword
几个主要头的作用
Content-Type头,该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型。如:当Content-Type的值设置为text/html和text/plain时,前者会让浏览器把接收到的实体内容以HTML格式解析,后者让浏览器以普通文本解析。
Content-Disposition头,Content-Disposition中指定的类型是文件的扩展名,并且弹出的下载对话框中的文件类型图片是按照文件的扩展名显示的,点保存后,文件以filename的值命名,保存类型以Content中设置的为准。注意:在设置Content-Disposition头字段之前,一定要设置Content-Type头字段。下载中文文件名乱码的解决方法是使用getBytes():
response.setHeader( "Content-Disposition", "attachment;filename=" + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );
要实现文件下载就需要设置Content-Type头和Content-Disposition头。
例如:
response.setHeader("Content-disposition", "attachment; filename=accountDatas.xls");// 设定输出文件头
response.setContentType("application/msexcel");// 定义输出类型
response的重定向
某些情况下,当响应客户时,需要将客户重新引导至另一个页面。可以使用reponse的sendRedirect(URL url)方法实现客户的重定向。
response的状态行
当服务器对客户的请求进行响应时,它发送的首行称为状态行。状态行包括3位数字的状态代码和对状态代码的描述。
1yy,主要是实验性质的。
2yy,用来表明请求成功的。
3yy,用来表明在请求满足之前应采取进一步的行动。
4yy,当浏览器做出无法满足的请求时,返回该状态代码。如404表示请求的页面不存在。
5yy,用来表示服务器出现问题。如500说明服务器内部发生错误。
reponse对象的setStatus(int n)方法来改变响应的状态行的内容。
response.getOutputStream(),返回ServletOutputStream类型的out对象,属于字节输出流。
response.getWriter(),返回PrintWriter类型的对象,属于字符输出流。使用getWriter()较好.输出的目的地对应着客户端。
例如:
PrintWriter out=null;
response.setCharacterEncoding("UTF-8");
out=response.getWriter();
out.println("输出流");
response.getWriter().println("<script>alert(‘fff‘)</script>")会在输出的客户端执行该javascript语句。
******************************
response.getOutputStream()与getWriter()区别:
在一次客户端请求的响应动作中,只能调用一种响应输出方法,要么是getWriter()要么是getOutputStream(),且如果使用getOutputStream()方法输出字符串格式的数据时,中文无法正常通过将发生“java.io.CharConversionException:Not an ISO 8859-1 character:”异常。
字节输出流和字符输出流的区别
从实现上字节输出流是继承OutputStream 而字符输出流继承OutputStreamWriter
从应用上字符流是专门用来处理文字的,包含了对多国语言的支持,而字节流主要是用来处理文字以外的如binary文件
***************************
5session对象
Tomcat服务器可以使用内置session对象记录有关连接的信息。内置对象session由Tomcat服务器创建,session是实现了HttpSession接口的一个实例。
session对象的ID
当一个客户首次访问Web服务目录中的一个JSP页面时,Tomcat服务器产生一个session对象,这个session对象调用相应的方法可以存储客户在访问Web服务目录中的各个页面期间提交的各种信息。这个session被分配了一个String类型的ID号,Tomcat服务器同时将这个ID号发送到客户端,存放在客户端的Cookies中。这样session对象和客户之间就建立一一对应的关系。直到客户关闭浏览器或这个session对象达到最大生存时间,服务器取消客户的session对象,即和客户的会话对应关系消失。当客户重新打开浏览器再连接到该Web服务目录时,服务器为该客户再创建一个新的session对象。
String id=session.getId();
session对象与URL重写
如果客户端不支持Cookie,那么客户在不同的网页之间的session对象可能是互不相同的,因为服务器无法将seesion ID存放在客户端,就不能建立session对象和客户的一一对应关系。将浏览器的Cookie设置为禁止(浏览器菜单->工具->Internet选项->隐私,将第三方Cookie设置成禁止。
如果客户的浏览器不支持Cookie,可以通过URL重写实现session对象的唯一性。可以使用response对象调用encodeURL()或encodeRedirectURL()方法实现URL重写。如:
String str=reponse.encodeRedirectURL("second.jsp");
然后将连接目标写成<%=str%>
这个所谓的url重写,其实只是因为不能传递 sessionid,而使用这个方法将sessionid编码进url,以便在下一个访问的网页中能够使用session而已。
session对象的存储数据
session对象驻留在服务器端,该对象调用某些方法保存客户在访问某个Web服务目录期间的有关数据。
public void setAttribute(String key,Object obj)
session对象可以调用该方法将参数Object指定的对象obj添加到session对象中,并为添加的对象指定一个索引关键字,如果添加的两个对象的关键字相同,则先前添加的对象被清除。
public Object getAttribute(String key)
获取session对象索引关键是key的对象,由于任何对象都可以添加到session对象中,因此用该方法取回对象时,应强制转化为原来的类型。如果强制转换为String类型,则为String.valueOf(...)
public Enumeration getAtrributeNames()
session对象调用该方法产生一个枚举对象,该枚举对象使用nextElements()遍历session中的各个对象所对应的关键字。
public void removeAttribute(String name)
session对象调用该方法移去关键字key对应的对象。
public ServletContext getServletContext(),获得ServletContext对象。
invalidate()只是让当前浏览器的session销毁,也就是一个session被销毁。
removeAttribute()可以指定销毁哪个对象。
6application对象
与session对象不同的是该对象由服务器负责创建,每个Web服务目录下的application对象被访问该服务目录的所有的用户共享,不同的web服务目录下的application互不相同。
application的常用方法
public void setAttribute(String key,Object obj),application对象可以调用该方法将参数Object指定的对象obj添加到application对象中,并为添加的对象指定一个关键字,如果添加的两个对象的关键字相同,则先前添加的对象被清除。
public Object getAttribute(String key),获取application对象含有的关键字key的对象,用该方法取回对象时,应强制转化为原来的类型。
public Enumeration getAttributeNames(),application对象调用该方法产生一个枚举对象,该枚举对象使用nextElements()遍历application中的各个对象所对应的关键字。
public void removeAttribute(String key),从当前的application对象中删除关键字是key的对象。
public String getServletInfo(),获取Servlet编译器当前版本的信息。
application对象对所有客户都是相同的,任何客户对该对象中存储的数据改变都会影响到其他客户。因此,有时对该对象的操作需要实现同步处理。
有些服务器不直接支持使用application对象,必须用ServletContext类声明这个对象,再使用getServletContext()方法对这个application对象进行初始化。
ServletContext application=session.getServletContext();
appliction.getAttribute("Mess")
在tomcat下ServletContext的实例对象也就是application对象。
7out对象
out对象是一个输出流,用来向客户输出数据。out对象可以调用如下方法用于各种数据的输出:
out.print(boolean),out.println(boolean):输出一个布尔值。
out.print(char),out.println(char):输出一个字符。
out.print(double),out.println(double):输出一个双精度浮点数。
out.print(float),out.println(float):输出一个单精度浮点数。
out.print(long),out.println(long):输出一个长整型数据。
out.print(String),out.println(String):输出一个字符串对象的内容。
out.newLine(),输出一个换行符。
out.flush(),输出缓冲区里的内容。
out.close(),关闭流。
8pageContext对象(javax.servlet.jsp.PageContext)
pageContext对象提供了对JSP页面所有的对象及命名空间的访问,使用pageContext对象可以访问application对象、exception对象,还有session对象等.
pageContext对象存取其他隐含对象属性的方法,此时需要指定范围的参数。
Object getAttribute(String name,int scope)
Enumeration getAttributeNameInScope(int scope)
void removeAttribute(String name,int scope)
void removeAttribute(String name) 移除属性名称为name 的属性对象
void setAttribute(String name,Object value,int scope)
Object findAttribute(String name) 寻找在所有范围中属性名称为name 的属性对象
int getAttributesScope(String name) 回传属性名称为name 的属性范围
void removeAttribute(String name) 移除属性名称为name 的属性对象
范围参数有四个,分别代表四中范围:PAGE_SCOPE,REQUEST_SCOPE,SESSION_SCOPE,APPLICATION_SCOPE
PageContext对象取得其他隐含对象的方法
Exception getException(),回传目前网页的异常,不过此网页要为error page.
JspWriter getOut(),回传目前网页的输出流。例如:out
Object getPage(),回传目前网页的Servlet实体(instance),page
ServletRequest getRequest(),回传目前网页的请求,request
ServletResponse getResponse( ) 回传目前网页的响应,例如:response
HttpSession getSession( ) 回传和目前网页有联系的会话(session),例如:session
ServletConfig getServletConfig( ) 回传目前此网页的ServletConfig 对象,例如:config
ServletContext getServletContext( ) 回传目前此网页的执行环境ServletContext对象。例如:application
${pageContext.request.contextPath},得到当前项目的根路径。
9HttpRequest对象有两种形式的getSession方法调用:
一个是getSession(),
另一个是getSession(boolean isNew)
这样的,前者会检测当前时候有session存在,如果不存在则创建一个,如果存在就返回当前的。
getSession()相当于getSession(true),
参数为true时,若存在会话则返回该会话,否则新建一个会话。
参数为false时,若存在会话则返回该会话,否则应该返回一个NULL
request,session,application,out对象可以直接在<%...%>使用无需声明,因为系统已经创建了。
10ServletContext的用途
安装在一个服务器中的一个特定URL名字空间(比如,/myapplication)下的所有Servlet,JSP,JavaBean等Web部件的集合构成了一个Web的应用,每一个Web应用(同一JVM),容器都会有一个背景对象,而javax.servlet.ServletContext接口就提供了访问这个背景对象的途径。 Servlet接口实例的getServletContext方法: 得到该Servlet运行其中的这个背景对象。从这个背景对象中你可以访问如下信息或资源,所以我们在任何一个HttpServlet子类中,使用this.getServletContext()便可以得到该web应用下的servletContext对象。
ServletContext对象只在web应用被关闭的时候才被销毁,不同的web应用项目,ServletContext各自独立存在。
ServletContext对象的方法:
在Servlet,JSP,JavaBean中直接使用***this.getServletContext()***将返回它的ServletContext对象。
log(java.lang.String msg)方法概述:public void log(java.lang.String msg)
把指定的信息写进servlet日志文件,通常是事物日志。日志文件的名称和类型与servlet容器有关。
public void log(java.lang.Exception exception,java.lang.String msg)
public void log(java.lang.String message,java.lang.Throwable throwable)
getRealPath(String)方法概述:public java.lang.String getRealPath(java.lang.String path)
返回一个指定虚拟路径的真实路径(完整路径)的字符串。
举例:虚拟路径"/index.html"将返回服务器文件系统中的绝对路径"http://host/contextPath/index.html", 当中的contextPath是ServletContext的上下文路径。
例如如果有一个web项目名称为reportTest,则再其servelt中调用
ServletContext servletContext =this.getServletContext();
System.out.println("******"+servletContext.getRealPath("/"));
将返回如下结果:
D:\apache-tomcat-6.0.20\webapps\reportTest\
getServerInfo()方法概述:public java.lang.String getServerInfo()
返回servlet容器的名称和版本号。
返回的字符串格式是servername/versionnumber(服务器名/版本号),例如:the JavaServer Web Development Kit 将返回字符串”JavaServer Web Dev Kit/1.0”。
servlet容器还将返回其它可选信息,如:“JavaServer Web Dev Kit/1.0 (JDK 1.1.6; Windows NT 4.0 x86)”
getInitParameter()方法概述:public java.lang.String getInitParameter(java.lang.String name)
返回上下文定义的变量的值,如果变量不存在,返回null。就是在web.xml的<context-param>元素中定义的参数。
getInitParameterNames()方法概述:public java.util.Enumeration getInitParameterNames()
返回上下文定义的所以变量的枚举函数,如果空则返回空枚举函数。
getAttribute()方法概述:public java.lang.Object getAttribute(java.lang.String name)
返回指定名字的servlet容器变量值,如果无该变量则返回null。
getAttributeNames()方法概述:public java.util.Enumeration getAttributeNames()
返回servlet容器的所有变量的枚举函数,如果空则返回空枚举函数。
setAttribute()方法概述:public void setAttribute(java.lang.String name,java.lang.Object object)
在servlet容器内绑定一个指定对象给一个指定的名字。如果该名字已经绑定到一个对象,则用该对象覆盖之。
removeAttribute()方法概述:public void removeAttribute(java.lang.String name)
移除指定名字的servlet容器变量。
getServletContextName()方法概述:public java.lang.String getServletContextName()
返回web应用的名字。即<web-app>元素中<display-name>元素的值。
getContextpath(),返回当前web应用的根路径,不是物理路径。
getContext(String uripath),根据参数指定的url,返回当前servlet容器中其他web应用的servletContext对象。如:
this.getServletContext().getContext("/userfiles")//在servlet容器中获取userfiles web应用的servletContext对象
pageContext.getServletContext().getContext("/userfiles")//在jsp页面中获取userfiles web应用的servletContext对象
userfiles web应用在容器中对应的文件夹应该是userfiles.war,下面我们得到userfiles.war下的images/attached目录,判断其是否在,如果不存在就创建该目录,这样在上传文件时,我们在放置web应用的目录下建立一个userfiles.war目录,然后将文件保存在其下的images/attached中,便于使用。
String savePath = pageContext.getServletContext().getContext("/userfiles").getRealPath("/") + "images/attached/";
File uploadDir = new File(savePath);
if(!uploadDir.isDirectory()){
uploadDir.mkdir();
}
getMajorVersion(),返回servlet容器支持的java servlet API的主版本号。
getMinorVersion(),返回servlet容器支持的java servlet API的主版本号。
ServletContext. getResourceAsStream(String path):默认从WebAPP根目录下取资源,Tomcat下path是否以’/‘开头无所谓,当然这和具体的容器实现有关。
转发
getRequestDispatcher()方法概述:public RequestDispatcher getRequestDispatcher(java.lang.String path)
返回一个RequestDispatcher对象,该对象扮演着一个给定资源包装者的角色。一个RequestDispatcher对象可以用于传送一个请求到特定资源或者把特定资源包含到一个响应当中。该特定资源可以是动态的也可以是静态的。 如果ServletContext不能获取RequestDispatcher对象,返回null
RequestDispatcher rd = request.getRequestDispatcher("SecondServlet");
rd.forward(request, response);.
11ServletConfig的用途
ServletContext即servlet容器,其内提供的方法可以在同一web应用下的所有servlet中被使用
而对于config对象来说,他与context相比,就有了很大的局限性。
当ServletConfig对象在某个servlet中被实例化后,对任何客户端在任何时候访问有效。但是一个servlet的ServletConfig对象不能被另一个servlet访问,也就是说,在本servlet声明后的ServletConfig只能在本servlet内被访问,属于内部持久有效的变量。
ServletConfig:从一个servlet被实例化后,对任何客户端在任何时候访问有效,但仅对本servlet
有效,一个servlet的ServletConfig对象不能被另一个servlet访问。
ServletContext:对任何servlet,任何人在任何时间都有效,这才是真正全局的对象
下有一例,可供深刻理解:
一般来说,对整个应用的配置,为了不使用“硬编码”,应该配置为ServletContext参数,比如字
符集设定。
<web-app>
.................
<init-param>
<param-name>charset</param-name>
<param-value>GB2312</param-value>
</init-param>
.................
</web-app>
注意以上格式只是2。0以后的标准格式,旧容器(引擎)采用服务商自己的格式配置。注意它的
父元素应该是<web-app>也就是说它是对一个应用作用的。
而如果只有一个特定的servlet要设定的参数,其它servlet不能共享,应该配置为ServletConfig参数,如一个读取附件的servlet要用到绝对目录,而别的servlet不会用到:
<servlet>
<servlet-name>GetAtt</servlet-name>
<servlet-class>mail.GetAttServlet</servlet-class>
<init-param>
<param-name>absPath</param-name>
<param-value>/usr/mail/ax/axman/Maildir/</param-value>
</init-param>
</servlet>
不用说,因为在<servlet>标签中已经指定了name和class,也就是说只有mail.GetAttServlet这个\r
servlet中才能取到path,而别的Servlet是不能取到的。
得到ServletConfig对象:
getServletConfig()方法直接得到ServletConfig()对象。ServletConfig对象一般在servlet类的init(ServletConfig servletconfig)方法参数中。
ServletConfig接口的方法
getinitParameterNames()方法,在web.xml文件中可以为Servlet设置若干个初始化参数,getInitParameterNames 方法用于返回一个Enumeration集合对象,该集合对象中包含在web.xml文件中为当前Servlet设置的所有初始化参数的名称。
getinitParameter(String)方法用于返回在web.xml文件中为Servlet所设置的某个名称的初始化参数的值,如果指定名称的初始化参数不存在,则返回值为NULL.
getServletName()方法用于返回Servlet在web.xml文件中的注册名称。
getServletContext()方法在Servlet程序中,每个Web应用程序(Servlet容器)都用一个各自的ServletContext对象来表示,ServletConfig对象中包含了ServletContext对象的引用,getServletContext方法用于返回ServletConfig对象中所包含的ServletContext对象的引用。
例如在struts1.3的action类中:
String path=this.getServlet().getServletConfig().getInitParameter("uploadPath");2JSP内置对象
原文:http://blog.csdn.net/bin71722/article/details/51915617