Wednesday, September 26, 2007
WEBLOGIC 使用技巧
WEBLOGIC 6.1 使用技巧
1.如何防止重启WEBLOGIC时JSP重编译
当一个WEB APPLICATION 打包成一个WAR文件部署在WEBLOGIC中时,每当WEBLOGIC重新启动时,都会对WAR文件中的JSP文件进行重编译,即使这些JSP文件的内容没有被改变。为了使WAR文件中的JSP文件不被重新编译,加快启动速度,可在weblogic.xml中指定一个workingDir。如下所示:
workingDir
C:/temp/myjspclasses
2.如何在IE中直接打开WORD等文件
如果在一个WEB APPLICATION 中访问WORD,EXCEL等类型的文件?
为了让能在IE浏览器中自动打开的设置:需要在WEB.XML中进行如下的设置:在WEB.XML中添加,其中:
: 文件的扩展名
: 除了该类型文件的可执行文件,同WINDOW注册表中的
/HKEY_CLASSES_ROOT下该类文件的Content Type 的值一样.
如能在IE中自动打开DOC,XLS,PDF文件的配置如下:
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
doc
application/msword
xls
application/msexcel
pdf
application/pdf
3.WEBLOGIC与ORACLE数据库的连接配置
WEBLOGIC6.0 通过ORACLE客户端访问ORACLE.所以在WEBLOGIC6.0所在的机器上要正确安装ORACLE客户端才行.WEBLOGIC6.0可采用 TYPE2或TYPE4的JDBC DRIVER 与ORACLE数据库相连。下面分别介绍它们的配置方法:
TYPE2 JDBC DRIVER的设置方法:
ORACLE TYPE2 的JDBC DRIVER是一些动态连接库(NT 是.DLL,UNIX是.SO)文件,在$WL_HOME\bin下,以OCI开头的几个目录中,具体 采用哪个目录下库文件,与ORACLE SERVER端及CLIENT端的版本及ORACLE API的版本有关,可参考WEBLOGIC6.0的联机文 档.要把这些库所在的路径加到系统的环境变量中, 否则访问数据库时,WEBLOGIC6.0会报以下错误:
Java.sql.SQLException: System.loadLibrary
threw java.lang.UnsatisfiedLinkError
with the message 'no WEBLOGICoci37 in java.library.path'.....
在WIN2000中要加到PATH环境变量中,如:
set PATH= D:\WEBLOGIC6.0\wlserver6.0\bin\oci816_7;c:\ORANT816\bin;%PATH%
UNIX平台,是加到系统的LIBRARY PATH中,如在SUN上,要加到LD_LIBRARY_PATH中,如:
export LD_LIBRARY_PATH=/bea/WEBLOGIC6.0/lib/solaris/oci816_8:$ORACLE_HOME/lib
在HP平台上,加到SHLIB_PATH中,如:
export SHLIB_PATH=/bea/WEBLOGIC6.0/lib/hpux11/oci816_8:$ORACLE_HOME/lib;
TYPE4 JDBC DRIVER的设置方法:
在控制台中创建一个新的CONNECTION POOL.其参数的定义如下:
URL: jdbc:oracle:thin:
Driver classname: oracle.jdbc.driver.OracleDriver
Properties:
User:数据库用户名
Password:该用户的口令
Server:该数据库服务器所在的IP地址,侦听端口及该数据库的连接串.
4.WEBLOGIC6.1的LOG文件
WEBLOGIC在启动及运行过程中会记录各种LOG信息,以帮助系统管理员对整个应用系统进行管理及维护。在CONSOLE的左边选择一个SERVER,并在右边的窗口中选择LOGGING,出现下面的窗口,可在该界面中进行与LOG有关的配置。下面对这些配置进行说明:
所有的LOG文件都放在该DOMAIN所在的路径下的LOGS目录中,
WEBLOGIC SERVER运行日志
如果WEBLOGIC SERVER在启动或运行过程中有错误发生,错误信息会显示在屏幕上,并且会记录在一个LOG文件中,该文件默认名为weblogic.log。该文件也记录WEBLOGIC的启动及关闭等其他运行信息。可在Gernal属性页中设置该文件的路径及名字,错误的输出的等级等。
HTTP访问日志
在WEBLOGIC中可以对用HTTP,HTTPS协议访问的服务器上的文件都做记录,该LOG文件默认的名字为access.log,内容如下,该文件详细记录在某个时间,某个IP地址的客户端
访问了服务器上的那个文件。
127.0.0.1 - - [25/Feb/2002:11:35:58 +0800] "GET /weather HTTP/1.1" 302 0
127.0.0.1 - - [25/Feb/2002:11:35:58 +0800] "GET /weather/index.html HTTP/1.1" 200 176
HTTP访问日志的属性可在HTTP属性页中进行设置。
DOMAIN运行日志
记录一个DOMIAN的运行情况,一个DOMAIN中的各个WEBLOGIC SERVER可以把它们的一些运行信息(比如:很严重的错误)发送给一个DOMAIN的ADMINISTRATOR SERVER上,ADMINISTRATOR SERVER把这些信息些到DOMAIN 日志中。默认名为:wl-domain.log
DOMAIN运行日志的属性可以在DOMAIN属性页中进行配置。
WEBLOGIC事务日志
WEBLOGIC在进行事务处理时,会把事务的信息记录到一个LOG文件中,在事务失败时用该LOG文件中的信息进行事务的回滚操作。该LOG文件的默认文件名为:servername*.tlog. 其中的*表示该LOG文件的前缀,可以在JTA属性页中设置这些LOG文件的前缀。
日志文件的回滚设置
在Rotation属性页中可以设置这些日志文件的回滚方式,当日志文件到一定得大小或过了设定的时间后,把日志信息保存到一个新的文件中。WEBLOGIC提 供按文件大小和时间两种方式。如下面的设置种,选择Rotation Type 为BY SIZE。也就是当日志文件的大小达到500K时,重新写一个新 的文件。如果Rotation Type 为BY TIME,那么是每隔24小时重新写一个新的文件。并且对这些文件编号。
5.在JSP中取得在WEB.XML中定义的参数:
在WEB.XML文件中设置参数:
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
myjsp
/MyJsp.jsp
firstparam
firstparamvalue
myjsp
/myurl/*
下面的程序无法取出在WEB.XML中定义的参数firstparam的值firstparamvalue
my jsp page .jsp
My init parameter is <%= application.getInitParameter("firstparam") %>
下面的程序就可以取出在WEB.XML中定义的参数firstparam的值firstparamvalue
<%
String Str1;
Str1=config.getInitParameter("firstparam");
Out.println(Str1);
%>
因为config是类javax.servlet.ServletConfig的对象,而application 是类javax.servlet.ServletContext的对象.
1.如何防止重启WEBLOGIC时JSP重编译
当一个WEB APPLICATION 打包成一个WAR文件部署在WEBLOGIC中时,每当WEBLOGIC重新启动时,都会对WAR文件中的JSP文件进行重编译,即使这些JSP文件的内容没有被改变。为了使WAR文件中的JSP文件不被重新编译,加快启动速度,可在weblogic.xml中指定一个workingDir。如下所示:
2.如何在IE中直接打开WORD等文件
如果在一个WEB APPLICATION 中访问WORD,EXCEL等类型的文件?
为了让能在IE浏览器中自动打开的设置:需要在WEB.XML中进行如下的设置:在WEB.XML中添加
/HKEY_CLASSES_ROOT下该类文件的Content Type 的值一样.
如能在IE中自动打开DOC,XLS,PDF文件的配置如下:
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
3.WEBLOGIC与ORACLE数据库的连接配置
WEBLOGIC6.0 通过ORACLE客户端访问ORACLE.所以在WEBLOGIC6.0所在的机器上要正确安装ORACLE客户端才行.WEBLOGIC6.0可采用 TYPE2或TYPE4的JDBC DRIVER 与ORACLE数据库相连。下面分别介绍它们的配置方法:
TYPE2 JDBC DRIVER的设置方法:
ORACLE TYPE2 的JDBC DRIVER是一些动态连接库(NT 是.DLL,UNIX是.SO)文件,在$WL_HOME\bin下,以OCI开头的几个目录中,具体 采用哪个目录下库文件,与ORACLE SERVER端及CLIENT端的版本及ORACLE API的版本有关,可参考WEBLOGIC6.0的联机文 档.要把这些库所在的路径加到系统的环境变量中, 否则访问数据库时,WEBLOGIC6.0会报以下错误:
Java.sql.SQLException: System.loadLibrary
threw java.lang.UnsatisfiedLinkError
with the message 'no WEBLOGICoci37 in java.library.path'.....
在WIN2000中要加到PATH环境变量中,如:
set PATH= D:\WEBLOGIC6.0\wlserver6.0\bin\oci816_7;c:\ORANT816\bin;%PATH%
UNIX平台,是加到系统的LIBRARY PATH中,如在SUN上,要加到LD_LIBRARY_PATH中,如:
export LD_LIBRARY_PATH=/bea/WEBLOGIC6.0/lib/solaris/oci816_8:$ORACLE_HOME/lib
在HP平台上,加到SHLIB_PATH中,如:
export SHLIB_PATH=/bea/WEBLOGIC6.0/lib/hpux11/oci816_8:$ORACLE_HOME/lib;
TYPE4 JDBC DRIVER的设置方法:
在控制台中创建一个新的CONNECTION POOL.其参数的定义如下:
URL: jdbc:oracle:thin:
Driver classname: oracle.jdbc.driver.OracleDriver
Properties:
User:数据库用户名
Password:该用户的口令
Server:该数据库服务器所在的IP地址,侦听端口及该数据库的连接串.
4.WEBLOGIC6.1的LOG文件
WEBLOGIC在启动及运行过程中会记录各种LOG信息,以帮助系统管理员对整个应用系统进行管理及维护。在CONSOLE的左边选择一个SERVER,并在右边的窗口中选择LOGGING,出现下面的窗口,可在该界面中进行与LOG有关的配置。下面对这些配置进行说明:
所有的LOG文件都放在该DOMAIN所在的路径下的LOGS目录中,
WEBLOGIC SERVER运行日志
如果WEBLOGIC SERVER在启动或运行过程中有错误发生,错误信息会显示在屏幕上,并且会记录在一个LOG文件中,该文件默认名为weblogic.log。该文件也记录WEBLOGIC的启动及关闭等其他运行信息。可在Gernal属性页中设置该文件的路径及名字,错误的输出的等级等。
HTTP访问日志
在WEBLOGIC中可以对用HTTP,HTTPS协议访问的服务器上的文件都做记录,该LOG文件默认的名字为access.log,内容如下,该文件详细记录在某个时间,某个IP地址的客户端
访问了服务器上的那个文件。
127.0.0.1 - - [25/Feb/2002:11:35:58 +0800] "GET /weather HTTP/1.1" 302 0
127.0.0.1 - - [25/Feb/2002:11:35:58 +0800] "GET /weather/index.html HTTP/1.1" 200 176
HTTP访问日志的属性可在HTTP属性页中进行设置。
DOMAIN运行日志
记录一个DOMIAN的运行情况,一个DOMAIN中的各个WEBLOGIC SERVER可以把它们的一些运行信息(比如:很严重的错误)发送给一个DOMAIN的ADMINISTRATOR SERVER上,ADMINISTRATOR SERVER把这些信息些到DOMAIN 日志中。默认名为:wl-domain.log
DOMAIN运行日志的属性可以在DOMAIN属性页中进行配置。
WEBLOGIC事务日志
WEBLOGIC在进行事务处理时,会把事务的信息记录到一个LOG文件中,在事务失败时用该LOG文件中的信息进行事务的回滚操作。该LOG文件的默认文件名为:servername*.tlog. 其中的*表示该LOG文件的前缀,可以在JTA属性页中设置这些LOG文件的前缀。
日志文件的回滚设置
在Rotation属性页中可以设置这些日志文件的回滚方式,当日志文件到一定得大小或过了设定的时间后,把日志信息保存到一个新的文件中。WEBLOGIC提 供按文件大小和时间两种方式。如下面的设置种,选择Rotation Type 为BY SIZE。也就是当日志文件的大小达到500K时,重新写一个新 的文件。如果Rotation Type 为BY TIME,那么是每隔24小时重新写一个新的文件。并且对这些文件编号。
5.在JSP中取得在WEB.XML中定义的参数:
在WEB.XML文件中设置参数:
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
下面的程序无法取出在WEB.XML中定义的参数firstparam的值firstparamvalue
My init parameter is <%= application.getInitParameter("firstparam") %>
下面的程序就可以取出在WEB.XML中定义的参数firstparam的值firstparamvalue
<%
String Str1;
Str1=config.getInitParameter("firstparam");
Out.println(Str1);
%>
因为config是类javax.servlet.ServletConfig的对象,而application 是类javax.servlet.ServletContext的对象.
Monday, September 17, 2007
Sunday, September 16, 2007
Thursday, September 13, 2007
Servlets & JSP
Servlets/JSP开发技术问答
(作者:Jason, www.ChinaJavaLab.com)
# 为什么GenericServlet在init(ServletConfig config)基础上增加了一个init()方法?
init()方法被GenericServlet.init(ServletConfig config)方法调用。
init()方法方便了开发人员定制Servlet的初始化,而无须去维护ServletConfig对象的存储工作。
重写GenericServlet.init(ServletConfig config)必须要显示的调用super.init(config)方法。
# ServletContext.getContect(java.lang.String uripath)的作用是什么?
返回同一Server中指定的path对应的ServletContext对象,通过该对象可以实现与Server中的其他Context打交道。
uripath必须是以"/"开始(该路径的含义是相对于整个Servlet文档的根路径,而不是当前ServletContext的根路径)。
# Servlet生命周期是什么?
一般的Servlet(GenericServlet,即与协议无关的Servlet)的生命周期:init() --> GenericServlet.service(ServletRequest req, ServletResponse res) --> destroy.
HttpServlet的生命周期: init() --> GenericServlet.service(ServletRequest req, ServletResponse res)---> service(HttpServletRequest req, HttpServletResponse resp) --> doXXXX()-->destroy.
# 有没有必要重写GenericServlet.service()方法?
对于HttpServlet来说没有必要。只需要重写它的doXXXX()方法就可以了。HttpServlet中service()方法会自动的根据用户请求类型把请求转发给相应的doXXXX()方法(例如doGet()方法)。
# ServletRequest.getReader()和ServletRequest.getInputStream()如何使用?
注意两个方法不能同时使用。
# ServletRequest.getRealPath(String path)方法已经不推荐使用。
请使用ServletContext.getRealPath(String path)方法。
# ServletResponse缺省的字符集(charset)是什么?
ServletResponse缺省的字符集(charset)是ISO-8859-1,可以通过setContentType(java.lang.String)方法改变新的字符集。
例如:setContentType("text/html; charset=Shift_JIS").
关于字符集信息,可以浏览RFC 2045
# HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL()区别是什么?
request.getRequestURI() 返回值类似:/xuejava/requestdemo.jsp
request.getRequestURL() 返回值类似:http://localhost:8080/xuejava/requestdemo.jsp
# HttpServletRequest.encodeURL()和HttpServletRequest.encodeRedirectURL(()区别是什么?为什么要有两个不同的方法呢?
当用URL-rewriting方式来管理Session的时候,需要用到以上的两个方法。
两个方法的不同点是:两个方法确定是否需要包含session ID的逻辑不同。
在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()方法,否则可能会丢失Sesssion信息。 ...
# 如何使你的Servlet或者JSP实现Single Thread Model?
对于Servlet实现javax.single.SingleThreadModel接口。
对于JSP,在Page Directive中写如下的语句<%@ page isThreadSafe="false" %>
# JSP Tag 和 JSP XML-based Tag
...
# 如何把某一个JSP Page定义成为Error Page?为什么要这样做?
实现方法: <%@ page isErrorPage="true" %>
为什么? 因为需要获取Exception 对象(缺省情况下,在JSP Page中是不能直接使用“隐含对象” exception的)。
# JSP Page的执行顺序是如何的?
JSP Page的执行顺序如下:
# JSP Page Translation. JSP Page --> Servlet source code.
# JSP Page Compilation. Servlet source code --> Servlet class.
# Load Class(First time or the server restarted)
# Create instance(可能会很多次,如果JSP Page中声明了<%@ page isThreadSafe="false" %>)
# Call jspInit method(一般的JSP Page都没有重写这个方法,重写需要在声明语句段中)。
# Call _jspService method(类似与一般HttpServlet的doGet和doPost方法,但是可以同时用来处理Post和Getq请求)。
# Call jspDestroy method(Server在卸载Servet的时候,例如当Servlet很久没有使用的情况)。
# JSP Page中有哪些隐含对象(Implicity Object)?各自的类型和作用是什么?
# request --
# reponse --
# session --
# application --
# out --
# page --
# pagecontext --
# exception -- 只有在当前JSP Page为Error Page的时候才有效。
# config --
# 和 <@ include file="/foo/foo.jsp" %>的区别是什么?
<@ include ... -- Page translation time. # Servlets/JSP Container(Engine)有几种运行方式? # Standalone Tomcat standalone mode # In-process Tomcat running inside Apache Web Server. # Out-of-process Apache + mod_jk + Tomcat # Servlet,Servlet开发人员,Servlet API, Servlet Container的关系是什么? Servlet,Servlet开发人员 --->Servlet API --> Servlet Container
# The parts of an HTTP message
Message part Description
The initial line: Specifies the purpose of the request or response message
例子:GET /reports/sales/index.html HTTP/1.0
The header section:Specifies the meta-information, such as size, type, and encoding,
about the content of the message
A blank line:
An optional message body: The main content of the request or response message
下面是一个Response的例子:
HTTP/1.0 200 OK
Date: Tue, 01 Dec 2001 23:59:59 GMT
Content-Type: text/html
Content-Length: 52
<html>
<body>
<h1>Hello, John!
# HTTP规范中定义了哪些方法?各自有什么用途?
# GET
# HEAD
# POST
从 Http 1.1规范开始,增加了以下的方法:
# PUT
# OPTIONS
# TRACE
# DELETE
# CONNECT
# ServetRequest中为什么要定义:getContentType(),getContentLength()方法。
根据HTTP协议规范,Request 和 Response一样也有这些必不可少的内容!
所以需要首先了解 HTTP Message的概念和其内容的格式,这些东西对于Request和Reponse是一样的。
对于GET方式发送的请求,其内容类型为:null
对于POST方式发送的请求,其内容类型为:application/x-www-form-urlencoded
POST方式发送请求的内容类似于:username=xuejava.
# RequestDispatcher.forward()和HttpServletResponse.sendRedirect()的区别是什么?
RequestDispatcher.forward()是在服务器端运行;HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成。
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;而HttpServletResponse.sendRedirect()则不是。
另外,还要注意RequestDispatcher.forward()在调用的时候Response不能已经Commit了(Response.isCommitted())。
# ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)的区别是什么?为什么?
ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。
因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
# 如何把请求转移到另外一个Web App中的某个地址?
ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)只能把请求转移到同一个Web App中的地址。
如果需要把请求转移到另外一个Web App中的某个地址,可以按下面的做法:
1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).
2. 调用ServletContext.getRequestDispatcher(String url)方法。
(作者:Jason, www.ChinaJavaLab.com)
# 为什么GenericServlet在init(ServletConfig config)基础上增加了一个init()方法?
init()方法被GenericServlet.init(ServletConfig config)方法调用。
init()方法方便了开发人员定制Servlet的初始化,而无须去维护ServletConfig对象的存储工作。
重写GenericServlet.init(ServletConfig config)必须要显示的调用super.init(config)方法。
# ServletContext.getContect(java.lang.String uripath)的作用是什么?
返回同一Server中指定的path对应的ServletContext对象,通过该对象可以实现与Server中的其他Context打交道。
uripath必须是以"/"开始(该路径的含义是相对于整个Servlet文档的根路径,而不是当前ServletContext的根路径)。
# Servlet生命周期是什么?
一般的Servlet(GenericServlet,即与协议无关的Servlet)的生命周期:init() --> GenericServlet.service(ServletRequest req, ServletResponse res) --> destroy.
HttpServlet的生命周期: init() --> GenericServlet.service(ServletRequest req, ServletResponse res)---> service(HttpServletRequest req, HttpServletResponse resp) --> doXXXX()-->destroy.
# 有没有必要重写GenericServlet.service()方法?
对于HttpServlet来说没有必要。只需要重写它的doXXXX()方法就可以了。HttpServlet中service()方法会自动的根据用户请求类型把请求转发给相应的doXXXX()方法(例如doGet()方法)。
# ServletRequest.getReader()和ServletRequest.getInputStream()如何使用?
注意两个方法不能同时使用。
# ServletRequest.getRealPath(String path)方法已经不推荐使用。
请使用ServletContext.getRealPath(String path)方法。
# ServletResponse缺省的字符集(charset)是什么?
ServletResponse缺省的字符集(charset)是ISO-8859-1,可以通过setContentType(java.lang.String)方法改变新的字符集。
例如:setContentType("text/html; charset=Shift_JIS").
关于字符集信息,可以浏览RFC 2045
# HttpServletRequest.getRequestURI()和HttpServletRequest.getRequestURL()区别是什么?
request.getRequestURI() 返回值类似:/xuejava/requestdemo.jsp
request.getRequestURL() 返回值类似:http://localhost:8080/xuejava/requestdemo.jsp
# HttpServletRequest.encodeURL()和HttpServletRequest.encodeRedirectURL(()区别是什么?为什么要有两个不同的方法呢?
当用URL-rewriting方式来管理Session的时候,需要用到以上的两个方法。
两个方法的不同点是:两个方法确定是否需要包含session ID的逻辑不同。
在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()方法,否则可能会丢失Sesssion信息。 ...
# 如何使你的Servlet或者JSP实现Single Thread Model?
对于Servlet实现javax.single.SingleThreadModel接口。
对于JSP,在Page Directive中写如下的语句<%@ page isThreadSafe="false" %>
# JSP Tag 和 JSP XML-based Tag
...
# 如何把某一个JSP Page定义成为Error Page?为什么要这样做?
实现方法: <%@ page isErrorPage="true" %>
为什么? 因为需要获取Exception 对象(缺省情况下,在JSP Page中是不能直接使用“隐含对象” exception的)。
# JSP Page的执行顺序是如何的?
JSP Page的执行顺序如下:
# JSP Page Translation. JSP Page --> Servlet source code.
# JSP Page Compilation. Servlet source code --> Servlet class.
# Load Class(First time or the server restarted)
# Create instance(可能会很多次,如果JSP Page中声明了<%@ page isThreadSafe="false" %>)
# Call jspInit method(一般的JSP Page都没有重写这个方法,重写需要在声明语句段中)。
# Call _jspService method(类似与一般HttpServlet的doGet和doPost方法,但是可以同时用来处理Post和Getq请求)。
# Call jspDestroy method(Server在卸载Servet的时候,例如当Servlet很久没有使用的情况)。
# JSP Page中有哪些隐含对象(Implicity Object)?各自的类型和作用是什么?
# request --
# reponse --
# session --
# application --
# out --
# page --
# pagecontext --
# exception -- 只有在当前JSP Page为Error Page的时候才有效。
# config --
#
# The parts of an HTTP message
Message part Description
The initial line: Specifies the purpose of the request or response message
例子:GET /reports/sales/index.html HTTP/1.0
The header section:Specifies the meta-information, such as size, type, and encoding,
about the content of the message
A blank line:
An optional message body: The main content of the request or response message
下面是一个Response的例子:
HTTP/1.0 200 OK
Date: Tue, 01 Dec 2001 23:59:59 GMT
Content-Type: text/html
Content-Length: 52
<html>
<body>
<h1>Hello, John!
# HTTP规范中定义了哪些方法?各自有什么用途?
# GET
# HEAD
# POST
从 Http 1.1规范开始,增加了以下的方法:
# PUT
# OPTIONS
# TRACE
# DELETE
# CONNECT
# ServetRequest中为什么要定义:getContentType(),getContentLength()方法。
根据HTTP协议规范,Request 和 Response一样也有这些必不可少的内容!
所以需要首先了解 HTTP Message的概念和其内容的格式,这些东西对于Request和Reponse是一样的。
对于GET方式发送的请求,其内容类型为:null
对于POST方式发送的请求,其内容类型为:application/x-www-form-urlencoded
POST方式发送请求的内容类似于:username=xuejava.
# RequestDispatcher.forward()和HttpServletResponse.sendRedirect()的区别是什么?
RequestDispatcher.forward()是在服务器端运行;HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成。
所以RequestDispatcher.forward()对于浏览器来说是“透明的”;而HttpServletResponse.sendRedirect()则不是。
另外,还要注意RequestDispatcher.forward()在调用的时候Response不能已经Commit了(Response.isCommitted())。
# ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)的区别是什么?为什么?
ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径;而ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。
因为ServletRequest具有相对路径的概念;而ServletContext对象无次概念。
# 如何把请求转移到另外一个Web App中的某个地址?
ServletContext.getRequestDispatcher(String url)和ServletRequest.getRequestDispatcher(String url)只能把请求转移到同一个Web App中的地址。
如果需要把请求转移到另外一个Web App中的某个地址,可以按下面的做法:
1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).
2. 调用ServletContext.getRequestDispatcher(String url)方法。
Subscribe to:
Posts (Atom)