社区
Web 开发
帖子详情
[200分问题] Servlet转向请求后如何显示正确URL?
Sheepy
2003-10-17 08:37:22
在做一个登陆系统,登陆的Servlet叫Login,映射到user/Login。登陆后返回根目录下的主页,但是浏览器URL仍然是servlet的URL,造成主页上链接路径错误。
我想知道除了所有的连接都用根目录作参考外,还有什么更好的解决方法,比如让转向后URL显示页面的URL而非servlet的。
...全文
112
22
打赏
收藏
[200分问题] Servlet转向请求后如何显示正确URL?
在做一个登陆系统,登陆的Servlet叫Login,映射到user/Login。登陆后返回根目录下的主页,但是浏览器URL仍然是servlet的URL,造成主页上链接路径错误。 我想知道除了所有的连接都用根目录作参考外,还有什么更好的解决方法,比如让转向后URL显示页面的URL而非servlet的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
22 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Sheepy
2003-11-01
打赏
举报
回复
我投降了,现在用Apache+Tomcat,所有servlet映射到/servlet下,所有网页里的链接以根目录开头。
fantasyCoder
2003-10-28
打赏
举报
回复
up!!!
up!!!
Sheepy
2003-10-26
打赏
举报
回复
self up!!!
fantasyCoder
2003-10-24
打赏
举报
回复
楼主的问题我也想知道!!
因为要正常访问index页面必然要通过一个servlet转向!!!
通过login页面经过servlet验证转象到index
如果直接访问index就会有问题出现,,如果index再通过一个servlet进行数据库操作则问题更大
把代码全写在 jsp页面里是不会有这样的问题的!!!
不知道有什么方法可以很好的解决问题!!!
Sheepy
2003-10-24
打赏
举报
回复
哪位高手发点声音呀!哪怕说我做事方式不对,应该用Struts或者其他什么做我也服了,虽然我还不懂,但是我可以去学了呀!
事实证明这是一个问题呀!楼上的也碰到了呀!
fantasyCoder
2003-10-24
打赏
举报
回复
帮你up!!!
Sheepy
2003-10-23
打赏
举报
回复
这不是一个问题吗……
Sheepy
2003-10-21
打赏
举报
回复
回复人: djws(void)
用../xxx.jsp
不要捣浆糊好不好?你这样servlet转向以后可以用了,但是我直接访问/index.html的时候怎么办?根目录的上一层是什么?..指向什么?
yaray
2003-10-20
打赏
举报
回复
除了用了frameset以后IE地址栏不变化外,没碰到过这种情况.
djws
2003-10-20
打赏
举报
回复
用../xxx.jsp
Sheepy
2003-10-20
打赏
举报
回复
如果网页里面用“/”开头的链接的话,要把所在的module名字放进去,也就是说如果用tomcat,东西放在test这个context下面的话,用“/”链接要指向test下的index.html要把链接写成/test/index.html。WAS也是这样。但是我学长说他用weblogic,不是这样的,weblogic会把根目录映射到你的module目录下,也就是只要写成/index.html,就指向test下面的index.html了。
所以说链接都用“/”开头是不上品的,必须在/后面跟上module的路径。
用sendRedirect()确实可以让URL变成转向后的地址,但是不会把request里面的东西一起传过去,用forward()可以传递request,但是浏览器认为URL还是servlet的URL,有可能造成网页里链接不对,如果它们不是以“/”开头,而是以当前路径作参考。
所以!请问!商业项目中是怎么做的!Sun是怎么做的!IBM是怎么做的!到底应该是怎么做的!!!
Sheepy
2003-10-17
打赏
举报
回复
我没有用sendRedirect()。我的书上没有讲过这个方法,我知道这个方法,用过一次失败了,说IllegaleStateException。
我用的是RequestDispatcher:
RequestDispatcher dispatcher=request.getRequestDispatcher("/index.jsp");
dispatcher.forward("request,response");
这样的话可以把原来的request里面的参数什么的一起给转向后的页面。但是URL还是servlet的URL。
另外,我做网页避免使用根目录开头的超链接,这很好理解。我都是文档为起点的,比如一个/user/index.jsp页面中指向/index.jsp的链接一定是../index.jsp而从来不做成/index.jsp。这样比较灵活。
Sheepy
2003-10-17
打赏
举报
回复
我的意思:
用于登陆的页面是http://localhost/user/login.htm,用于登陆验证的servlet映射到/user/Login,所以htm的form里面action就写"Login",因为相当于在同一目录下。提交并通过验证后用RequestDispatcher重定向到/index.htm,但是这时候浏览器的URL仍然是http://localhost/user/Login,结果造成/index.htm里面的超链接错误,比如原来有个超链接指向user/login.htm,用servlet登陆后由于当前目录是user,该链接指向了user/user/login.htm,不能正常使用了。
xinshou1979330
2003-10-17
打赏
举报
回复
JSP页面中:
<%
if(request.getParameter("err")!=null)
{
String err=URLDecoder.decode(new String(request.getParameter("err").getBytes("iso8859_1"),"gbk"));
out.print(err);
}
%>
JAVA中这样写
Error = URLEncoder.encode("提交成功!");
response.sendRedirect("/cyvod/manage/actadd.jsp?err="+Error);
我这样写可以返回信息的不知道楼主是不是这个意思
yugona
2003-10-17
打赏
举报
回复
楼主的情况真是奇怪,难道你的servlet里有frame?不太可能啊|!
aku0708
2003-10-17
打赏
举报
回复
response.sendRedirect("index.jsp");可以的
blue999star
2003-10-17
打赏
举报
回复
造成主页上链接路径错误??
怎么会有错呢,不明白。ie地址栏的url和你主页的<href>连接没有直接关系。
所有的连接都用根目录作参考!!!
不是这样吗?
wellsoon
2003-10-17
打赏
举报
回复
response.sendRedirect("a.jsp");
匪六哥
2003-10-17
打赏
举报
回复
我在servlet中用response.sendRedirect("/index.jsp");就直接转向到首页,并且浏览器URL仍然是index.jsp的路径。
index.jsp前的/表示根目录!
caodavid2003
2003-10-17
打赏
举报
回复
如果你在servlet中是使用下面方法转向的,是不会错的
ServletContext sc=getServletContext();
RequestDispatcher rd=sc.getRequestDispatcher("../XXX.jsp");
//如果你的servlet不映射到user/Login,而是映射到Login的话,上面转向的参数为"/XXX.jsp"或"./XXX.jsp"
rd.forward(request,response);
加载更多回复(2)
java-
servlet
-api.doc
Java
Servlet
API说明文档 绪言 这是一份关于2.1版Java
Servlet
API的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/
servlet
/index.html下面下载Javadoc格式的文档。 谁需要读这份文档 这份文档描述了Java
Servlet
API的最新版本2.1版。所以,这本书对于
Servlet
的开发者及
servlet
引擎的开发者同样适用。 Java
Servlet
API的组成 Java
Servlet
API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。这两个软件包的同时存在使得Java
Servlet
API能够适应将来的其他
请求
-响应的协议。 这份文档以及刚才提及的Javadoc格式的文档都描述了这两个软件包,Javadoc格式的文档还描述了你应该如何使用这两个软件包中的所有方法。 有关规范 你也许对下面的这些Internet规范感兴趣,这些规范将直接影响到
Servlet
API的发展和执行。你可以从http://info.internet.isi.edu/7c/in-notes/rfc/.cache找到下面提到的所有这些RFC规范。 RFC1738统一资源定位器(
URL
) RFC1808相关统一资源定位器 RFC1945超文本传输协议--HTTP/1.0 RFC2045多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第一部
分
:Internet信息体格式 RFC2046多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第二部
分
:媒体类型 RFC2047多用途网际邮件扩充协议(MIME)(多用途Internet邮件扩展)第三部
分
:信息标题扩展用于非ASCII文本 RFC2048多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第四部
分
:注册步骤 RFC2049多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第五部
分
:一致性标准和例子 RFC2068超文本传输协议--HTTP/1.1 RFC2069一个扩展HTTP:摘要访问鉴定 RFC2109HTTP状态管理机制 RFC2145HTTP版本号的使用和解释 RFC2324超文本CoffeePot控制协议(HTCPCP/1.0) 万维网协会(http://www.w3.org)管理着这些协议的规范和执行。 有关Java
Servlet
s JavaTM
servlet
s是一个不受平台约束的Java小程序,它可以被用来通过多种方法扩充一个Web服务器的功能。你可以把
Servlet
理解成Server上的applets,它被编译成字节码,这样它就可以被动态地载入并用效地扩展主机的处理能力。
Servlet
与applets不同的地方是,它不运行在Web浏览器或其他图形化的用户界面上。
Servlet
通过
servlet
引擎运行在Web服务器中,以执行
请求
和响应,
请求
、响应的典型范例是HTTP协议。 一个客户端程序,可以是一个Web浏览器,或者是非其他的可以连接上Internet的程序,它会访问Web服务器并发出
请求
。这个
请求
被运行在Web服务器上的
Servlet
引擎处理,并返回响应到
Servlet
。
Servlet
通过HTTP将这个响应转发到客户端。 在功能上,
Servlet
与CGI、NSAPI有点类似,但是,与他们不同的是:
Servlet
具有平台无关性。 Java
Servlet
概论
Servlet
与其他普通的server扩展机制有以下进步: 因为它采用了不同的进程处理模式,所以它比CGI更快。 它使用了许多Web服务器都支持的标准的API。 它继承了Java的所有优势,包括易升级以及平台无关性。 它可以调用Java所提供的大量的API的功能模块。 这份文档说明了Java
Servlet
API的类和接口的方法。有关更多的信息,请参看下面的API说明。
Servlet
的生命周期 一个Java
servlet
具有一个生命周期,这个生命周期定义了一个
Servlet
如何被载入并被初始化,如何接收
请求
并作出对
请求
的响应,如何被从服务中清除。
Servlet
的生命周期被javax.
servlet
.
Servlet
这个接口所定义。 所有的Java
Servlet
都会直接地或间接地执行javax.
servlet
.
Servlet
接口,这样它才能在一个
Servlet
引擎中运行。
Servlet
引擎是Web服务器按照Java
Servlet
API定制的扩展。
Servlet
引擎提供网络服务,能够理解MIME
请求
,并提供一个运行
Servlet
的容器。 javax.
servlet
.
Servlet
接口定义了在
Servlet
的生命周期中特定时间以及特定顺序被调用的方法。
Servlet
的解析和载入
Servlet
引擎解析并载入一个
Servlet
,这个过程可以发生在引擎启动时,需要一个
Servlet
去响应
请求
时,以及在此之间的任何时候。
Servlet
引擎利用Java类载入工具载入一个
Servlet
,
Servlet
引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入
Servlet
。
Servlet
的初始化
Servlet
引擎载入
Servlet
后,
Servlet
引擎必须对
Servlet
进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。 在初始化过程中,javax.
servlet
.
Servlet
接口的init()方法提供了
Servlet
的初始化信息。这样,
Servlet
可以对自己进行配置。 init()方法获得了一个
Servlet
配置对象(
Servlet
Config)。这个对象在
Servlet
引擎中执行,并允许
Servlet
通过它获处相关参数。这个对象使得
Servlet
能够访问
Servlet
Context对象。
Servlet
处理
请求
\r
Servlet
被初始化之后,它已经可以处理来自客户端的
请求
,每一个来自客户端的
请求
都被描述成一个
Servlet
Request对象,
Servlet
的响应被描述成一个
Servlet
Response对象。 当客户端发出
请求
时,
Servlet
引擎传递给
Servlet
一个
Servlet
Request对象和一个
Servlet
Response对象,这两个对象作为参数传递到service()方法中。
Servlet
也可以执行
Servlet
Request接口和
Servlet
Response接口。
Servlet
Request接口使得
Servlet
有权使用客户端发出的
请求
。
Servlet
可以通过
Servlet
InputStream对象读取
请求
信息。
Servlet
Response接口允许
Servlet
建立响应头和状态代码。通过执行这个接口,
Servlet
有权使用
Servlet
OutputStream类来向客户端返回数据。 多线程和映射\r 在多线程的环境下,
Servlet
必须能处理许多同时发生的
请求
。例外的情况是这个
Servlet
执行了SingleThreadModel接口,如果是那样的话,
Servlet
只能同时处理一个
请求
。
Servlet
依照
Servlet
引擎的映射来响应客户端的
请求
。一个映射对包括一个
Servlet
实例以及一个
Servlet
返回数据的
URL
,例如:Hello
Servlet
with/hello/index.html。 然而,一个映射可能是由一个
URL
和许多
Servlet
实例组成,例如:一个
分
布式的
Servlet
引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个
Servlet
实例,以平衡进程的载入。作为一个
Servlet
的开发者,你不能假定一个
Servlet
只有一个实例。
Servlet
的卸载
Servlet
引擎并不必需保证一个
Servlet
在任何时候或在服务开启的任何时候都被载入。
Servlet
引擎可以自由的在任何时候使用或清除一个
Servlet
。因此,我们不能依赖一个类或实例来存储重要的信息。 当
Servlet
引擎决定卸载一个
Servlet
时(例如,如果这个引擎被关闭或者需要让资源),这个引擎必须允许
Servlet
释放正在使用的资源并存储有关资料。为了完成以上工作,引擎会调用
Servlet
的destroy()方法。 在卸载一个
Servlet
之前,
Servlet
引擎必须等待所有的service()方法完成或超时结束(
Servlet
引擎会对超时作出定义)。当一个
Servlet
被卸载时,引擎将不能给
Servlet
发送任何
请求
。引擎必须释放
Servlet
并完成无用存储单元的收集
Servlet
映射技术\r 作为一个
Servlet
引擎的开发者,你必须对于如何映射客户端的
请求
到
Servlet
有大量的适应性。这份说明文档不规定映射如何发生。但是,你必须能够自由地运用下面的所有技术: 映射一个
Servlet
到一个
URL
例如,你可以指定一个特殊的
Servlet
它仅被来自/feedback/index.html的
请求
调用。 映射一个
Servlet
到以一个指定的目录名开始的所有
URL
例如,你可以映射一个
Servlet
到/catalog,这样来自/catalog/、/catalog/garden和/catalog/housewares/index.html的
请求
都会被映射到这个
Servlet
。但是来自/catalogtwo或/catalog.html的
请求
没被映射。 映射一个
Servlet
到所有以一个特定的字段结尾的所有
URL
例如,你可以映射一个来自于所有以in.thtml结尾的
请求
到一个特定的
Servlet
。 映射一个
Servlet
到一个特殊的
URL
/
servlet
/
servlet
_name。 例如,如果你建立了一个名叫listattributes的
Servlet
,你可以通过使用/
servlet
/listattributes来访问这个
Servlet
。 通过类名调用
Servlet
例如,如果
Servlet
引擎接收了来自/
servlet
/com.foo.
servlet
.Mail
Servlet
的
请求
,
Servlet
引擎会载入这个com.foo.
servlet
.Mail
Servlet
类,建立实例,并通过这个
Servlet
来处理
请求
。
Servlet
环境
Servlet
Context接口定义了一个
Servlet
环境对象,这个对象定义了一个在
Servlet
引擎上的
Servlet
的视图。通过使用这个对象,
Servlet
可以记录事件、得到资源并得到来自
Servlet
引擎的类(例如RequestDispatcher对象)。一个
Servlet
只能运行在一个
Servlet
环境中,但是不同的
Servlet
可以在
Servlet
引擎上有不同的视图。 如果
Servlet
引擎支持虚拟主机,每个虚拟主机有一个
Servlet
环境。一个
Servlet
环境不能在虚拟主机之间共享。
Servlet
引擎能够允许一个
Servlet
环境有它自己的活动范围。 例如,一个
Servlet
环境是属于bank应用的,它将被映射到/bank目录下。在这种情况下,一个对getContext方法的调用会返回/bank的
Servlet
环境。 HTTP会话 HTTP是一个没有状态的协议。要建立一个有效的Web服务应用,你必须能够识别一个连续的来自远端的客户机的唯一的
请求
。随着时间的过去,发展了许多会话跟踪的技术,但是使用起来都比较麻烦。 Java
Servlet
API提供了一个简单的接口,通过这个接口,
Servlet
引擎可以有效地跟踪用户的会话。 建立Session 因为HTTP是一个
请求
-响应协议,一个会话在客户机加入之前会被认为是一个新的会话。加入的意思是返回会话跟踪信息到服务器中,指出会话已被建立。在客户端加入之前,我们不能判断下一个客户端
请求
是目前会话的一部
分
。 在下面的情况下,Session会被认为是新的Session。 客户端的Session在此之前还不知道 客户端选择不加入Session,例如,如果客户端拒绝接收来自服务器的cookie 作为一个
Servlet
的开发者,你必须决定你的Web应用是否处理客户机不加入或不能加入Session。服务器会在Web服务器或
Servlet
规定的时间内维持一个Session对象。当Session终止时,服务器会释放Session对象以及所有绑定在Session上的对象。 绑定对象到Session中 如果有助于你处理应用的数据需求,你也许需要绑定对象到Session中,你可以通过一个唯一的名字绑定任何的对象到Session中,这时,你需要使用HttpSession对象。任何绑定到Session上的对象都可以被处理同一会话的
Servlet
调用。 有些对象可能需要你知道什么时候会被放置到Session中或从Session中移开。你可以通过使用HttpSessionBindingListener接口获得这些信息。当你的应用存储数据到Session中,或从Session中清除数据,
Servlet
都会通过HttpSessionBindingListener检杳什么类被绑定或被取消绑定。这个接口的方法会通报被绑定或被取消绑定的对象。 绪言 这是一份关于2.1版Java
Servlet
API的说明文档,作为对这本文档的补充,你可以到http://java.sun.com/products/
servlet
/index.html下面下载Javadoc格式的文档。 谁需要读这份文档 这份文档描述了Java
Servlet
API的最新版本2.1版。所以,这本书对于
Servlet
的开发者及
servlet
引擎的开发者同样适用。 Java
Servlet
API的组成 Java
Servlet
API由两个软件包组成:一个是对应HTTP的软件包,另一个是不对应HTTP的通用的软件包。这两个软件包的同时存在使得Java
Servlet
API能够适应将来的其他
请求
-响应的协议。 这份文档以及刚才提及的Javadoc格式的文档都描述了这两个软件包,Javadoc格式的文档还描述了你应该如何使用这两个软件包中的所有方法。 有关规范 你也许对下面的这些Internet规范感兴趣,这些规范将直接影响到
Servlet
API的发展和执行。你可以从http://info.internet.isi.edu/7c/in-notes/rfc/.cache找到下面提到的所有这些RFC规范。 RFC1738统一资源定位器(
URL
) RFC1808相关统一资源定位器 RFC1945超文本传输协议--HTTP/1.0 RFC2045多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第一部
分
:Internet信息体格式 RFC2046多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第二部
分
:媒体类型 RFC2047多用途网际邮件扩充协议(MIME)(多用途Internet邮件扩展)第三部
分
:信息标题扩展用于非ASCII文本 RFC2048多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第四部
分
:注册步骤 RFC2049多用途Internet邮件扩展(多用途网际邮件扩充协议(MIME))第五部
分
:一致性标准和例子 RFC2068超文本传输协议--HTTP/1.1 RFC2069一个扩展HTTP:摘要访问鉴定 RFC2109HTTP状态管理机制 RFC2145HTTP版本号的使用和解释 RFC2324超文本CoffeePot控制协议(HTCPCP/1.0) 万维网协会(http://www.w3.org)管理着这些协议的规范和执行。 有关Java
Servlet
s JavaTM
servlet
s是一个不受平台约束的Java小程序,它可以被用来通过多种方法扩充一个Web服务器的功能。你可以把
Servlet
理解成Server上的applets,它被编译成字节码,这样它就可以被动态地载入并用效地扩展主机的处理能力。
Servlet
与applets不同的地方是,它不运行在Web浏览器或其他图形化的用户界面上。
Servlet
通过
servlet
引擎运行在Web服务器中,以执行
请求
和响应,
请求
、响应的典型范例是HTTP协议。 一个客户端程序,可以是一个Web浏览器,或者是非其他的可以连接上Internet的程序,它会访问Web服务器并发出
请求
。这个
请求
被运行在Web服务器上的
Servlet
引擎处理,并返回响应到
Servlet
。
Servlet
通过HTTP将这个响应转发到客户端。 在功能上,
Servlet
与CGI、NSAPI有点类似,但是,与他们不同的是:
Servlet
具有平台无关性。 Java
Servlet
概论
Servlet
与其他普通的server扩展机制有以下进步: 因为它采用了不同的进程处理模式,所以它比CGI更快。 它使用了许多Web服务器都支持的标准的API。 它继承了Java的所有优势,包括易升级以及平台无关性。 它可以调用Java所提供的大量的API的功能模块。 这份文档说明了Java
Servlet
API的类和接口的方法。有关更多的信息,请参看下面的API说明。
Servlet
的生命周期 一个Java
servlet
具有一个生命周期,这个生命周期定义了一个
Servlet
如何被载入并被初始化,如何接收
请求
并作出对
请求
的响应,如何被从服务中清除。
Servlet
的生命周期被javax.
servlet
.
Servlet
这个接口所定义。 所有的Java
Servlet
都会直接地或间接地执行javax.
servlet
.
Servlet
接口,这样它才能在一个
Servlet
引擎中运行。
Servlet
引擎是Web服务器按照Java
Servlet
API定制的扩展。
Servlet
引擎提供网络服务,能够理解MIME
请求
,并提供一个运行
Servlet
的容器。 javax.
servlet
.
Servlet
接口定义了在
Servlet
的生命周期中特定时间以及特定顺序被调用的方法。
Servlet
的解析和载入\r
Servlet
引擎解析并载入一个
Servlet
,这个过程可以发生在引擎启动时,需要一个
Servlet
去响应
请求
时,以及在此之间的任何时候。
Servlet
引擎利用Java类载入工具载入一个
Servlet
,
Servlet
引擎可以从一个本地的文件系统、一个远程的文件系统以及网络载入
Servlet
。
Servlet
的初始化
Servlet
引擎载入
Servlet
后,
Servlet
引擎必须对
Servlet
进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。 在初始化过程中,javax.
servlet
.
Servlet
接口的init()方法提供了
Servlet
的初始化信息。这样,
Servlet
可以对自己进行配置。 init()方法获得了一个
Servlet
配置对象(
Servlet
Config)。这个对象在
Servlet
引擎中执行,并允许
Servlet
通过它获处相关参数。这个对象使得
Servlet
能够访问
Servlet
Context对象。
Servlet
处理
请求
\r
Servlet
被初始化之后,它已经可以处理来自客户端的
请求
,每一个来自客户端的
请求
都被描述成一个
Servlet
Request对象,
Servlet
的响应被描述成一个
Servlet
Response对象。 当客户端发出
请求
时,
Servlet
引擎传递给
Servlet
一个
Servlet
Request对象和一个
Servlet
Response对象,这两个对象作为参数传递到service()方法中。
Servlet
也可以执行
Servlet
Request接口和
Servlet
Response接口。
Servlet
Request接口使得
Servlet
有权使用客户端发出的
请求
。
Servlet
可以通过
Servlet
InputStream对象读取
请求
信息。
Servlet
Response接口允许
Servlet
建立响应头和状态代码。通过执行这个接口,
Servlet
有权使用
Servlet
OutputStream类来向客户端返回数据。 多线程和映射\r 在多线程的环境下,
Servlet
必须能处理许多同时发生的
请求
。例外的情况是这个
Servlet
执行了SingleThreadModel接口,如果是那样的话,
Servlet
只能同时处理一个
请求
。
Servlet
依照
Servlet
引擎的映射来响应客户端的
请求
。一个映射对包括一个
Servlet
实例以及一个
Servlet
返回数据的
URL
,例如:Hello
Servlet
with/hello/index.html。 然而,一个映射可能是由一个
URL
和许多
Servlet
实例组成,例如:一个
分
布式的
Servlet
引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个
Servlet
实例,以平衡进程的载入。作为一个
Servlet
的开发者,你不能假定一个
Servlet
只有一个实例。
Servlet
的卸载
Servlet
引擎并不必需保证一个
Servlet
在任何时候或在服务开启的任何时候都被载入。
Servlet
引擎可以自由的在任何时候使用或清除一个
Servlet
。因此,我们不能依赖一个类或实例来存储重要的信息。 当
Servlet
引擎决定卸载一个
Servlet
时(例如,如果这个引擎被关闭或者需要让资源),这个引擎必须允许
Servlet
释放正在使用的资源并存储有关资料。为了完成以上工作,引擎会调用
Servlet
的destroy()方法。 在卸载一个
Servlet
之前,
Servlet
引擎必须等待所有的service()方法完成或超时结束(
Servlet
引擎会对超时作出定义)。当一个
Servlet
被卸载时,引擎将不能给
Servlet
发送任何
请求
。引擎必须释放
Servlet
并完成无用存储单元的收集
Servlet
映射技术\r 作为一个
Servlet
引擎的开发者,你必须对于如何映射客户端的
请求
到
Servlet
有大量的适应性。这份说明文档不规定映射如何发生。但是,你必须能够自由地运用下面的所有技术: 映射一个
Servlet
到一个
URL
例如,你可以指定一个特殊的
Servlet
它仅被来自/feedback/index.html的
请求
调用。 映射一个
Servlet
到以一个指定的目录名开始的所有
URL
例如,你可以映射一个
Servlet
到/catalog,这样来自/catalog/、/catalog/garden和/catalog/housewares/index.html的
请求
都会被映射到这个
Servlet
。但是来自/catalogtwo或/catalog.html的
请求
没被映射。 映射一个
Servlet
到所有以一个特定的字段结尾的所有
URL
例如,你可以映射一个来自于所有以in.thtml结尾的
请求
到一个特定的
Servlet
。 映射一个
Servlet
到一个特殊的
URL
/
servlet
/
servlet
_name。 例如,如果你建立了一个名叫listattributes的
Servlet
,你可以通过使用/
servlet
/listattributes来访问这个
Servlet
。 通过类名调用
Servlet
例如,如果
Servlet
引擎接收了来自/
servlet
/com.foo.
servlet
.Mail
Servlet
的
请求
,
Servlet
引擎会载入这个com.foo.
servlet
.Mail
Servlet
类,建立实例,并通过这个
Servlet
来处理
请求
。
Servlet
环境
Servlet
Context接口定义了一个
Servlet
环境对象,这个对象定义了一个在
Servlet
引擎上的
Servlet
的视图。通过使用这个对象,
Servlet
可以记录事件、得到资源并得到来自
Servlet
引擎的类(例如RequestDispatcher对象)。一个
Servlet
只能运行在一个
Servlet
环境中,但是不同的
Servlet
可以在
Servlet
引擎上有不同的视图。 如果
Servlet
引擎支持虚拟主机,每个虚拟主机有一个
Servlet
环境。一个
Servlet
环境不能在虚拟主机之间共享。
Servlet
引擎能够允许一个
Servlet
环境有它自己的活动范围。 例如,一个
Servlet
环境是属于bank应用的,它将被映射到/bank目录下。在这种情况下,一个对getContext方法的调用会返回/bank的
Servlet
环境。 HTTP会话 HTTP是一个没有状态的协议。要建立一个有效的Web服务应用,你必须能够识别一个连续的来自远端的客户机的唯一的
请求
。随着时间的过去,发展了许多会话跟踪的技术,但是使用起来都比较麻烦。 Java
Servlet
API提供了一个简单的接口,通过这个接口,
Servlet
引擎可以有效地跟踪用户的会话。 建立Session 因为HTTP是一个
请求
-响应协议,一个会话在客户机加入之前会被认为是一个新的会话。加入的意思是返回会话跟踪信息到服务器中,指出会话已被建立。在客户端加入之前,我们不能判断下一个客户端
请求
是目前会话的一部
分
。 在下面的情况下,Session会被认为是新的Session。 客户端的Session在此之前还不知道 客户端选择不加入Session,例如,如果客户端拒绝接收来自服务器的cookie 作为一个
Servlet
的开发者,你必须决定你的Web应用是否处理客户机不加入或不能加入Session。服务器会在Web服务器或
Servlet
规定的时间内维持一个Session对象。当Session终止时,服务器会释放Session对象以及所有绑定在Session上的对象。 绑定对象到Session中 如果有助于你处理应用的数据需求,你也许需要绑定对象到Session中,你可以通过一个唯一的名字绑定任何的对象到Session中,这时,你需要使用HttpSession对象。任何绑定到Session上的对象都可以被处理同一会话的
Servlet
调用。 有些对象可能需要你知道什么时候会被放置到Session中或从Session中移开。你可以通过使用HttpSessionBindingListener接口获得这些信息。当你的应用存储数据到Session中,或从Session中清除数据,
Servlet
都会通过HttpSessionBindingListener检杳什么类被绑定或被取消绑定。这个接口的方法会通报被绑定或被取消绑定的对象。 软件包:javax.
servlet
.http 所包含的接口:Http
Servlet
Request;Http
Servlet
Response;HttpSession;HttpSessionBindingListener;HttpSessionContext。 所包含的类:Cookie;Http
Servlet
;HttpSessionBindingEvent;HttpUtils。 一、Http
Servlet
Request接口 定义\ publicinterfaceHttp
Servlet
Requestextends
Servlet
Request; 用来处理一个对
Servlet
的HTTP格式的
请求
信息。 方法 1、getAuthType publicStringgetAuthType(); 返回这个
请求
的身份验证模式。 2、getCookies publicCookie[]getCookies(); 返回一个数组,该数组包含这个
请求
中当前的所有cookie。如果这个
请求
中没有cookie,返回一个空数组。 3、getDateHeader publiclonggetDateHeader(Stringname); 返回指定的
请求
头域的值,这个值被转换成一个反映自1970-1-1日(GMT)以来的精确到毫秒的长整数。 如果头域不能转换,抛出一个IllegalArgumentException。如果这个
请求
头域不存在,这个方法返回-1。 4、getHeader publicStringgetHeader(Stringname); 返回一个
请求
头域的值。(译者注:与上一个方法不同的是,该方法返回一个字符串) 如果这个
请求
头域不存在,这个方法返回-1。 5、getHeaderNames publicEnumerationgetHeaderNames(); 该方法返回一个String对象的列表,该列表反映
请求
的所有头域名。 有的引擎可能不允许通过这种方法访问头域,在这种情况下,这个方法返回一个空的列表。 6、getIntHeader publicintgetIntHeader(Stringname); 返回指定的
请求
头域的值,这个值被转换成一个整数。 如果头域不能转换,抛出一个IllegalArgumentException。如果这个
请求
头域不存在,这个方法返回-1。 7、getMethod publicStringgetMethod(); 返回这个
请求
使用的HTTP方法(例如:GET、POST、PUT) 8、getPathInfo publicStringgetPathInfo(); 这个方法返回在这个
请求
的
URL
的
Servlet
路径之后的
请求
URL
的额外的路径信息。如果这个
请求
URL
包括一个查询字符串,在返回值内将不包括这个查询字符串。这个路径在返回之前必须经过
URL
解码。如果在这个
请求
的
URL
的
Servlet
路径之后没有路径信息。这个方法返回空值。 9、getPathTranslated publicStringgetPathTranslated(); 这个方法获得这个
请求
的
URL
的
Servlet
路径之后的额外的路径信息,并将它转换成一个真实的路径。在进行转换前,这个
请求
的
URL
必须经过
URL
解码。如果在这个
URL
的
Servlet
路径之后没有附加路径信息。这个方法返回空值。 10、getQueryString publicStringgetQueryString(); 返回这个
请求
URL
所包含的查询字符串。一个查询字串符在一个
URL
中由一个“?”引出。如果没有查询字符串,这个方法返回空值。 11、getRemoteUser publicStringgetRemoteUser 返回作了
请求
的用户名,这个信息用来作HTTP用户论证。 如果在
请求
中没有用户名信息,这个方法返回空值。 12、getRequestedSessionId publicStringgetRequestedSessionId(); 返回这个
请求
相应的sessionid。如果由于某种原因客户端提供的sessionid是无效的,这个sessionid将与在当前session中的sessionid不同,与此同时,将建立一个新的session。 如果这个
请求
没与一个session关联,这个方法返回空值。 13、getRequestURI publicStringgetRequestURI(); 从HTTP
请求
的第一行返回
请求
的
URL
中定义被
请求
的资源的部
分
。如果有一个查询字符串存在,这个查询字符串将不包括在返回值当中。例如,一个
请求
通过/catalog/books?id=1这样的
URL
路径访问,这个方法将返回/catalog/books。这个方法的返回值包括了
Servlet
路径和路径信息。 如果这个
URL
路径中的的一部
分
经过了
URL
编码,这个方法的返回值在返回之前必须经过解码。 14、get
Servlet
Path publicStringget
Servlet
Path(); 这个方法返回
请求
URL
反映调用
Servlet
的部
分
。例如,一个
Servlet
被映射到/catalog/summer这个
URL
路径,而一个
请求
使用了/catalog/summer/casual这样的路径。所谓的反映调用
Servlet
的部
分
就是指/catalog/summer。 如果这个
Servlet
不是通过路径匹配来调用。这个方法将返回一个空值。 15、getSession publicHttpSessiongetSession(); publicHttpSessiongetSession(booleancreate); 返回与这个
请求
关联的当前的有效的session。如果调用这个方法时没带参数,那么在没有session与这个
请求
关联的情况下,将会新建一个session。如果调用这个方法时带入了一个布尔型的参数,只有当这个参数为真时,session才会被建立。 为了确保session能够被完全维持。
Servlet
开发者必须在响应被提交之前调用该方法。 如果带入的参数为假,而且没有session与这个
请求
关联。这个方法会返回空值。 16、isRequestedSessionIdValid publicbooleanisRequestedSessionIdValid(); 这个方法检查与此
请求
关联的session当前是不是有效。如果当前
请求
中使用的session无效,它将不能通过getSession方法返回。 17、isRequestedSessionIdFromCookie publicbooleanisRequestedSessionIdFromCookie(); 如果这个
请求
的sessionid是通过客户端的一个cookie提供的,该方法返回真,否则返回假。 18、isRequestedSessionIdFrom
URL
publicbooleanisRequestedSessionIdFrom
URL
(); 如果这个
请求
的sessionid是通过客户端的
URL
的一部
分
提供的,该方法返回真,否则返回假。请注意此方法与isRequestedSessionIdFrom
Url
在
URL
的拼写上不同。 以下方法将被取消\\r 19、isRequestedSessionIdFrom
Url
publicbooleanisRequestedSessionIdFrom
Url
(); 该方法被isRequestedSessionIdFrom
URL
代替。 二、Http
Servlet
Response接口 定义\\r publicinterfaceHttp
Servlet
Responseextends
Servlet
Response 描述一个返回到客户端的HTTP回应。这个接口允许
Servlet
程序员利用HTTP协议规定的头信息。 成员变量 publicstaticfinalintSC_CONTINUE=100; publicstaticfinalintSC_SWITCHING_PROTOCOLS=101; publicstaticfinalintSC_OK=
200
; publicstaticfinalintSC_CREATED=201; publicstaticfinalintSC_ACCEPTED=202; publicstaticfinalintSC_NON_AUTHORITATIVE_INFORMATION=203; publicstaticfinalintSC_NO_CONTENT=204; publicstaticfinalintSC_RESET_CONTENT=205; publicstaticfinalintSC_PARTIAL_CONTENT=206; publicstaticfinalintSC_MULTIPLE_CHOICES=300; publicstaticfinalintSC_MOVED_PERMANENTLY=301; publicstaticfinalintSC_MOVED_TEMPORARILY=302; publicstaticfinalintSC_SEE_OTHER=303; publicstaticfinalintSC_NOT_MODIFIED=304; publicstaticfinalintSC_USE_PROXY=305; publicstaticfinalintSC_BAD_REQUEST=400; publicstaticfinalintSC_UNAUTHORIZED=401; publicstaticfinalintSC_PAYMENT_REQUIRED=402; publicstaticfinalintSC_FORBIDDEN=403; publicstaticfinalintSC_NOT_FOUND=404; publicstaticfinalintSC_METHOD_NOT_ALLOWED=405; publicstaticfinalintSC_NOT_ACCEPTABLE=406; publicstaticfinalintSC_PROXY_AUTHENTICATION_REQUIRED=407; publicstaticfinalintSC_REQUEST_TIMEOUT=408; publicstaticfinalintSC_CONFLICT=409; publicstaticfinalintSC_GONE=410; publicstaticfinalintSC_LENGTH_REQUIRED=411; publicstaticfinalintSC_PRECONDITION_FAILED=412; publicstaticfinalintSC_REQUEST_ENTITY_TOO_LARGE=413; publicstaticfinalintSC_REQUEST_URI_TOO_LONG=414; publicstaticfinalintSC_UNSUPPORTED_MEDIA_TYPE=415; publicstaticfinalintSC_INTERNAL_SERVER_ERROR=500; publicstaticfinalintSC_NOT_IMPLEMENTED=501; publicstaticfinalintSC_BAD_GATEWAY=502; publicstaticfinalintSC_SERVICE_UNAVAILABLE=503; publicstaticfinalintSC_GATEWAY_TIMEOUT=504; publicstaticfinalintSC_HTTP_VERSION_NOT_SUPPORTED=505; 以上HTTP产状态码是由HTTP/1.1定义的。 方法 1、addCookie publicvoidaddCookie(Cookiecookie); 在响应中增加一个指定的cookie。可多次调用该方法以定义多个cookie。为了设置适当的头域,该方法应该在响应被提交之前调用。 2、containsHeader publicbooleancontainsHeader(Stringname); 检查是否设置了指定的响应头。 3、encodeRedirect
URL
publicStringencodeRedirect
URL
(String
url
); 对sendRedirect方法使用的指定
URL
进行编码。如果不需要编码,就直接返回这个
URL
。之所以提供这个附加的编码方法,是因为在redirect的情况下,决定是否对
URL
进行编码的规则和一般情况有所不同。所给的
URL
必须是一个绝对
URL
。相对
URL
不能被接收,会抛出一个IllegalArgumentException。 所有提供给sendRedirect方法的
URL
都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。 4、encode
URL
publicStringencode
URL
(String
url
); 对包含sessionID的
URL
进行编码。如果不需要编码,就直接返回这个
URL
。
Servlet
引擎必须提供
URL
编码方法,因为在有些情况下,我们将不得不重写
URL
,例如,在响应对应的
请求
中包含一个有效的session,但是这个session不能被非
URL
的(例如cookie)的手段来维持。 所有提供给
Servlet
的
URL
都应通过这个方法运行,这样才能确保会话跟踪能够在所有浏览器中正常运行。 5、sendError publicvoidsendError(intstatusCode)throwsIOException; publicvoidsendError(intstatusCode,Stringmessage)throws IOException; 用给定的状态码发给客户端一个错误响应。如果提供了一个message参数,这将作为响应体的一部
分
被发出,否则,服务器会返回错误代码所对应的标准信息。 调用这个方法后,响应立即被提交。在调用这个方法后,
Servlet
不会再有更多的输出。 6、sendRedirect publicvoidsendRedirect(Stringlocation)throwsIOException; 使用给定的路径,给客户端发出一个临时
转向
的响应(SC_MOVED_TEMPORARILY)。给定的路径必须是绝对
URL
。相对
URL
将不能被接收,会抛出一个IllegalArgumentException。 这个方法必须在响应被提交之前调用。调用这个方法后,响应立即被提交。在调用这个方法后,
Servlet
不会再有更多的输出。 7、setDateHeader publicvoidsetDateHeader(Stringname,longdate); 用一个给定的名称和日期值设置响应头,这里的日期值应该是反映自1970-1-1日(GMT)以来的精确到毫秒的长整数。如果响应头已经被设置,新的值将覆盖当前的值。 8、setHeader publicvoidsetHeader(Stringname,Stringvalue); 用一个给定的名称和域设置响应头。如果响应头已经被设置,新的值将覆盖当前的值。 9、setIntHeader publicvoidsetIntHeader(Stringname,intvalue); 用一个给定的名称和整形值设置响应头。如果响应头已经被设置,新的值将覆盖当前的值。 10、setStatus publicvoidsetStatus(intstatusCode); 这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的值。 以下的几个方法将被取消\ 11、encodeRedirect
Url
publicStringencodeRedirect
Url
(String
url
); 该方法被encodeRedirect
URL
取代。 12、encode
Url
publicStringencode
Url
(String
url
); 该方法被encode
URL
取代。 13、setStatus publicvoidsetStatus(intstatusCode,Stringmessage); 这个方法设置了响应的状态码,如果状态码已经被设置,新的值将覆盖当前的值。如果提供了一个message,它也将会被作为响应体的一部
分
被发送。 三、HttpSession接口 定义\ publicinterfaceHttpSession 这个接口被
Servlet
引擎用来实现在HTTP客户端和HTTP会话两者的关联。这种关联可能在多外连接和
请求
中持续一段给定的时间。session用来在无状态的HTTP协议下越过多个
请求
页面来维持状态和识别用户。 一个session可以通过cookie或重写
URL
来维持。 方法 1、getCreationTime publiclonggetCreationTime(); 返回建立session的时间,这个时间表示为自1970-1-1日(GMT)以来的毫秒数。 2、getId publicStringgetId(); 返回
分
配给这个session的标识符。一个HTTPsession的标识符是一个由服务器来建立和维持的唯一的字符串。 3、getLastAccessedTime publiclonggetLastAccessedTime(); 返回客户端最后一次发出与这个session有关的
请求
的时间,如果这个session是新建立的,返回-1。这个时间表示为自1970-1-1日(GMT)以来的毫秒数。 4、getMaxInactiveInterval publicintgetMaxInactiveInterval(); 返加一个秒数,这个秒数表示客户端在不发出
请求
时,session被
Servlet
引擎维持的最长时间。在这个时间之后,
Servlet
引擎可能被
Servlet
引擎终止。如果这个session不会被终止,这个方法返回-1。 当session无效后再调用这个方法会抛出一个IllegalStateException。 5、getValue publicObjectgetValue(Stringname); 返回一个以给定的名字绑定到session上的对象。如果不存在这样的绑定,返回空值。 当session无效后再调用这个方法会抛出一个IllegalStateException。 6、getValueNames publicString[]getValueNames(); 以一个数组返回绑定到session上的所有数据的名称。 当session无效后再调用这个方法会抛出一个IllegalStateException。 7、invalidate publicvoidinvalidate(); 这个方法会终止这个session。所有绑定在这个session上的数据都会被清除。并通过HttpSessionBindingListener接口的valueUnbound方法发出通告。 8、isNew publicbooleanisNew(); 返回一个布尔值以判断这个session是不是新的。如果一个session已经被服务器建立但是还没有收到相应的客户端的
请求
,这个session将被认为是新的。这意味着,这个客户端还没有加入会话或没有被会话公认。在他发出下一个
请求
时还不能返回适当的session认证信息。 当session无效后再调用这个方法会抛出一个IllegalStateException。 9、putValue publicvoidputValue(Stringname,Objectvalue); 以给定的名字,绑定给定的对象到session中。已存在的同名的绑定会被重置。这时会调用HttpSessionBindingListener接口的valueBound方法。 当session无效后再调用这个方法会抛出一个IllegalStateException。 10、removeValue publicvoidremoveValue(Stringname); 取消给定名字的对象在session上的绑定。如果未找到给定名字的绑定的对象,这个方法什么出不做。这时会调用HttpSessionBindingListener接口的valueUnbound方法。 当session无效后再调用这个方法会抛出一个IllegalStateException。 11、setMaxInactiveInterval publicintsetMaxInactiveInterval(intinterval); 设置一个秒数,这个秒数表示客户端在不发出
请求
时,session被
Servlet
引擎维持的最长时间。 以下这个方法将被取消\ 12、getSessionContext publicHttpSessionContextgetSessionContext(); 返回session在其中得以保持的环境变量。这个方法和其他所有HttpSessionContext的方法一样被取消了。 四、HttpSessionBindingListener接口 定义\ publicinterfaceHttpSessionBindingListener 这个对象被加入到HTTP的session中,执行这个接口会通告有没有什么对象被绑定到这个HTTPsession中或被从这个HTTPsession中取消绑定。 方法 1、valueBound publicvoidvalueBound(HttpSessionBindingEventevent); 当一个对象被绑定到session中,调用此方法。HttpSession.putValue方法被调用时,
Servlet
引擎应该调用此方法。 2、valueUnbound publicvoidvalueUnbound(HttpSessionBindingEventevent); 当一个对象被从session中取消绑定,调用此方法。HttpSession.removeValue方法被调用时,
Servlet
引擎应该调用此方法。 五、HttpSessionContext接口 定义\ 此接口将被取消\ publicinterfaceHttpSessionContext 这个对象是与一组HTTPsession关联的单一的实体。 这个接口由于安全的原因被取消,它出现在目前的版本中仅仅是为了兼容性的原因。这个接口的方法将模拟以前的版本的定义返回相应的值。 方法 1、getSession publicHttpSessiongetSession(StringsessionId); 当初用来返回与这个sessionid相关的session。现在返回空值。 2、getIds publicEnumerationgetIds(); 当初用来返回这个环境下所有sessionid的列表。现在返回空的列表。 六、Cookie类\ 定义\ publicclassCookieimplementsCloneable 这个类描述了一个cookie,有关cookie的定义你可以参照NetscapeCommunicationsCorporation的说明,也可以参照RFC2109。 构造函数 publicCookie(Stringname,Stringvalue); 用一个name-value对定义一个cookie。这个name必须能被HTTP/1.1所接受。 以字符$开头的name被RFC2109保留。 给定的name如果不能被HTTP/1.1所接受,该方法抛出一个IllegalArgumentException。 方法 1、getComment publicStringgetComment(); 返回描述这个cookie目的的说明,如果未定义这个说明,返回空值。 2、getDomain publicStringgetDomain(); 返回这个cookie可以出现的区域,如果未定义区域,返回空值。 3、getMaxAge publicintgetMaxAge(); 这个方法返回这个cookie指定的最长存活时期。如果未定义这个最长存活时期,该方法返回-1。 4、getName publicStringgetName(); 该方法返回cookie名。 5、getPath publicStringgetPath(); 返回这个cookie有效的所有
URL
路径的前缀,如果未定义,返回空值。 6、getSecure publicbooleangetSecure(); 如果这个cookie只通过安全通道传输返回真,否则返回假。 7、getValue publicStringgetValue(); 该方法返回cookie的值。 8、getVersion publicintgetVersion(); 返回cookie的版本。版本1由RFC2109解释。版本0由NetscapeCommunicationsCorporation的说明解释。新构造的cookie默认使用版本0。 9、setComment publicvoidsetComment(Stringpurpose); 如果一个用户将这个cookie提交给另一个用户,必须通过这个说明描述这个cookie的目的。版本0不支持这个属性。 10、setDomain publicvoidsetDomain(Stringpattern); 这个方法设置cookie的有效域的属性。这个属性指定了cookie可以出现的区域。一个有效域以一个点开头(.foo.com),这意味着在指定的域名解析系统的区域中(可能是www.foo.com但不是a.b.foo.com)的主机可以看到这个cookie。默认情况是,cookie只能返回保存它的主机。 11、setMaxAge publicvoidsetMaxAge(intexpiry); 这个方法设定这个cookie的最长存活时期。在该存活时期之后,cookie会被终目。负数表示这个cookie不会生效,0将从客户端删除这个cookie。 12、setPath publicvoidsetPath(Stringuri); 这个方法设置cookie的路径属性。客户端只能向以这个给定的路径String开头的路径返回cookie。 13、setSecure publicvoidsetSecure(booleanflag); 指出这个cookie只能通过安全通道(例如HTTPS)发送。只有当产生这个cookie的服务器使用安全协议发送这个cookie值时才能这样设置。 14、setValue publicvoidsetValue(StringnewValue); 设置这个cookie的值,对于二进制数据采用BASE64编码。 版本0不能使用空格、{}、()、=、,、“”、/、?、@、:以及;。 15、setVersion publicvoidsetVersion(intv); 设置cookie的版本号 七、Http
Servlet
类\ 定义\ publicclassHttp
Servlet
extendsGeneric
Servlet
implements Serializable 这是一个抽象类,用来简化HTTP
Servlet
写作的过程。它是Generic
Servlet
类的扩充,提供了一个处理HTTP协议的框架。 在这个类中的service方法支持例如GET、POST这样的标准的HTTP方法。这一支持过程是通过
分
配他们到适当的方法(例如doGet、doPost)来实现的。 方法 1、doDelete protectedvoiddoDelete(Http
Servlet
Requestrequest, Http
Servlet
Responseresponse)throws
Servlet
Exception, IOException; 被这个类的service方法调用,用来处理一个HTTPDELETE操作。这个操作允许客户端
请求
从服务器上删除
URL
。这一操作可能有负面影响,对此用户就负起责任。 这一方法的默认执行结果是返回一个HTTPBAD_REQUEST错误。当你要处理DELETE
请求
时,你必须重载这一方法。 2、doGet protectedvoiddoGet(Http
Servlet
Requestrequest, Http
Servlet
Responseresponse)throws
Servlet
Exception, IOException; 被这个类的service方法调用,用来处理一个HTTPGET操作。这个操作允许客户端简单地从一个HTTP服务器“获得”资源。对这个方法的重载将自动地支持HEAD方法。 GET操作应该是安全而且没有负面影响的。这个操作也应该可以安全地重复。 这一方法的默认执行结果是返回一个HTTPBAD_REQUEST错误。 3、doHead protectedvoiddoHead(Http
Servlet
Requestrequest, Http
Servlet
Responseresponse)throws
Servlet
Exception, IOException; 被这个类的service方法调用,用来处理一个HTTPHEAD操作。默认的情况是,这个操作会按照一个无条件的GET方法来执行,该操作不向客户端返回任何数据,而仅仅是返回包含内容长度的头信息。 与GET操作一样,这个操作应该是安全而且没有负面影响的。这个操作也应该可以安全地重复。 这个方法的默认执行结果是自动处理HTTPHEAD操作,这个方法不需要被一个子类执行。 4、doOptions protectedvoiddoOptions(Http
Servlet
Requestrequest, Http
Servlet
Responseresponse)throws
Servlet
Exception, IOException; 被这个类的service方法调用,用来处理一个HTTPOPTION操作。这个操作自动地决定支持哪一种HTTP方法。例如,一个
Servlet
写了一个Http
Servlet
的子类并重载了doGet方法,doOption会返回下面的头: Allow:GET,HEAD,TRACE,OPTIONS 你一般不需要重载这个方法。 5、doPost protectedvoiddoPost(Http
Servlet
Requestrequest, Http
Servlet
Responseresponse)throws
Servlet
Exception, IOException; 被这个类的service方法调用,用来处理一个HTTPPOST操作。这个操作包含
请求
体的数据,
Servlet
应该按照他行事。 这个操作可能有负面影响。例如更新存储的数据或在线购物。 这一方法的默认执行结果是返回一个HTTPBAD_REQUEST错误。当你要处理POST操作时,你必须在Http
Servlet
的子类中重载这一方法。 6、doPut protectedvoiddoPut(Http
Servlet
Requestrequest, Http
Servlet
Responseresponse)throws
Servlet
Exception, IOException; 被这个类的service方法调用,用来处理一个HTTPPUT操作。这个操作类似于通过FTP发送文件。 这个操作可能有负面影响。例如更新存储的数据或在线购物。 这一方法的默认执行结果是返回一个HTTPBAD_REQUEST错误。当你要处理PUT操作时,你必须在Http
Servlet
的子类中重载这一方法。 7、doTrace protectedvoiddoTrace(Http
Servlet
Requestrequest, Http
Servlet
Responseresponse)throws
Servlet
Exception, IOException; 被这个类的service方法调用,用来处理一个HTTPTRACE操作。这个操作的默认执行结果是产生一个响应,这个响应包含一个反映trace
请求
中发送的所有头域的信息。 当你开发
Servlet
时,在多数情况下你需要重载这个方法。 8、getLastModified protectedlonggetLastModified(Http
Servlet
Requestrequest); 返回这个
请求
实体的最后修改时间。为了支持GET操作,你必须重载这一方法,以精确地反映最后修改的时间。这将有助于浏览器和代理服务器减少装载服务器和网络资源,从而更加有效地工作。返回的数值是自1970-1-1日(GMT)以来的毫秒数。 默认的执行结果是返回一个负数,这标志着最后修改时间未知,它也不能被一个有条件的GET操作使用。 9、service protectedvoidservice(Http
Servlet
Requestrequest, Http
Servlet
Responseresponse)throws
Servlet
Exception, IOException; publicvoidservice(
Servlet
Requestrequest,
Servlet
Responseresponse) throws
Servlet
Exception,IOException; 这是一个
Servlet
的HTTP-specific方案,它
分
配
请求
到这个类的支持这个
请求
的其他方法。 当你开发
Servlet
时,在多数情况下你不必重载这个方法。 八、HttpSessionBindingEvent类\ 定义\ publicclassHttpSessionBindingEventextendsEventObject 这个事件是在监听到HttpSession发生绑定和取消绑定的情况时连通HttpSessionBindingListener的。这可能是一个session被终止或被认定无效的结果。 事件源是HttpSession.putValue或HttpSession.removeValue。 构造函数 publicHttpSessionBindingEvent(HttpSessionsession,Stringname); 通过引起这个事件的Session和发生绑定或取消绑定的对象名构造一个新的HttpSessionBindingEvent。 方法 1、getName publicStringgetName(); 返回发生绑定和取消绑定的对象的名字。 2、getSession publicHttpSessiongetSession(); 返回发生绑定和取消绑定的session的名字。 九、HttpUtils类\ 定义\ publicclassHttpUtils 收集HTTP
Servlet
使用的静态的有效的方法。 方法 1、getRequest
URL
publicstaticStringBuffergetRequest
URL
(Http
Servlet
Request request); 在服务器上重建客户端用来建立
请求
的
URL
。这个方法反映了不同的协议(例如http和https)和端口,但不包含查询字符串。 这个方法返回一个StringBuffer而不是一个String,这样
URL
可以被
Servlet
开发者有效地修改。 2、parsePostData publicstaticHashtableparsePostData(intlen,
Servlet
Inputstreamin); 解析一个包含MIME类型application/x-www-form-
url
encoded的数据的流,并创建一个具有关键值-数据对的hashtable。这里的关键值是字符串,数据是该字符串所对应的值的列表。一个关键值可以在POST的数据中出现一次或多次。这个关键值每出现一次,它的相应的值就被加入到hashtable中的字符串所对应的值的列表中。 从POST数据读出的数据将经过
URL
解码,+将被转换为空格以十六进制传送的数据(例如%xx)将被转换成字符。 当POST数据无效时,该方法抛出一个IllegalArgumentException。 3、parseQueryString publicstaticHashtableparseQueryString(Strings); 解析一个查询字符串,并创建一个具有关键值-数据对的hashtable。这里的数据是该字符串所对应的值的列表。一个关键值可以出现一次或多次。这个关键值每出现一次,它的相应的值就被加入到hashtable中的字符串所对应的值的列表中。 从查询字符串读出的数据将经过
URL
解码,+将被转换为空格以十六进制传送的数据(例如%xx)将被转换成字符。 当查询字符串无效时,该方法抛出一个IllegalArgumentException。 bytecode 字节码:由Java编译器和Java解释程序生成的机器代码。 cookie 由Web服务器建立的数据,该数据存储在用户的计算机上,提供了一个Web站点跟踪用户的参数并存储在用户自己硬盘上的方法。 HTTP 超文本传输协议。一个
请求
响应协议用来连接WWW服务器向客户端浏览器传输HTML页面。 输入流对象\r 一个对象,由
Servlet
InputStream类定义,被
Servlet
用来从客户端读取
请求
。 映射\r 由
Servlet
实例和
Servlet
返回数据的
URL
组成的一对,例如,Hello
Servlet
和/hello/index.html。 输出流对象\r 一个对象,由
Servlet
OutputStreamclass类定义,被
Servlet
用来向客户端返回数据。 requestdispatcherobject 由RequestDispatcher接口定义的一个对象,用来从客户端接收
请求
,并将其发送到Web服务器上可用的其他资源(例如
Servlet
、CGI、HTML文件或JSP文件)。 sandboxed
servlet
在一个安全性约束下运行的
Servlet
。
servlet
一个小的,具有平台无关性的,没有图形用户界面的Java程序。它可以在许多方面扩充Web服务的功能。
servlet
configurationobject
Servlet
Config接口定义的一个对象,用来配置一个
Servlet
。
servlet
contextobject
Servlet
Context接口定义的一个对象。给予
Servlet
有关
Servlet
引擎的信息。
servlet
引擎\r 由Web服务器提供商制作的一个环境,可以允许
Servlet
在具体的Web服务器上运行。
servlet
请求
对象 由
Servlet
Request接口定义的一个对象,允许
Servlet
获得用关客户端
请求
的数据。
servlet
responseobject 由
Servlet
Response接口定义的一个对象,允许
Servlet
作出响应。
servlet
runner Java
Servlet
Developer’sKit(JSDK)中的sun.
servlet
.http.HttpServer过程,它使得
Servlet
得以运行。 会话跟踪 在一个Web应用程序中,识别一个从同一个客户端发出的连续的唯一的
请求
的能力。 SSL 加密套接字协议层。一个安全协议,用来在Iternet上的客户端浏览器和服务器交换密钥和加密数据。 URI 统一资源标识。定义一个Internet地址,它是一个
URL
的超集。
URL
统一资源路径。这个地址定义了到达一个WWW上的文件的路线,通常由协议前缀、域名、目录名和文件名组成。
JavaWeb之
Servlet
的
请求
与响应
JavaWeb之
Servlet
的
请求
与响应一、
请求
1.1
请求
概述1.2 获取Http
请求
信息1.2.1
请求
行1.2.2
请求
消息头1.2.3
请求
参数1.2.3.1 实体类1.2.3.2
请求
参数的中文乱码
问题
1.2.4 用流的方式读取
请求
正文1.2.5
请求
转发二、响应2.1 响应概述2.2 响应行2.3 响应信息头2.3.1 重定向2.4 响应体三、文件下载案例 一、
请求
1.1
请求
概述
请求
:就是用户通过浏览器向服务器发送信息(携带数据) 用户通过浏览器访问服务器时,Tomcat将HTTP
请求
中
Servlet
转向
和重定向的区别
转向
:
请求
转发是指将
请求
再转发到其他地址,转发过程中使用的是同一个
请求
,转发的地址栏内容不变。 重定向:是指由原
请求
地址重新定位到某个新地址,原有的
请求
失效,客户端看到的是新的
请求
返回的相应结果。 举例说明吧: 转发过程: 客户端对
servlet
1容器发起
请求
,但是
servlet
1想让
servlet
2进行一波客户端
请求
处理,于是就调用
servlet
协作让
servlet
2进行处理。 重定...
servlet
、filter、listener、interceptor
servlet
servlet
??????????java????,?????????????,?????????web??,????????????????????
Servlet
??????????????????,???? Web ??? 1) ????????????; 2) ???????????
Servlet
; 3)
Servlet
???????????????????????,??
Servlet
请求
转发与重定向
一、
请求
转发和重定向
请求
转发: request.getRequestDispatcher(
URL
地址).forward(request, response) 处理流程: 客户端发送
请求
,
Servlet
做出业务逻辑处理。
Servlet
调用forword()方法,服务器
Servlet
把目标资源返回给客户端浏览器。 2)重定向: response.sendRedirect(
URL
地址) ...
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章