`

servlet和jsp核心编程(第2版)第六章服务器响应的生成:HTTP状态代码学习笔记

阅读更多
第六章:服务器响应的生成:HTTP状态代码
核心方法
1.在向客户程序发送任何文档内容之前设置状态代码。当然从第三章,我们也可以知道,我们还要在传送文档之前设置内容的类型。
重点提示
1.表示302常量的是SC_MOVED_TEMPORARILY,不是SC_FOUND。
警告:
1.默认情况下,IE版本5和气候的版本都忽略服务器生成的错误页面,要打开该功能。在IE中,使用【工具】,选择【Internet Options(Internet选项)】,选取【Advanced(高级)】标签,确保选择【显示友好的HTTP错误信息】
学习笔记
从前面几章,我们可以看出,一个浏览器或其他客户程序的请求,由一个HTTP命令,0或多个请求报头(HTTP1.1中为一个或多个,因为Host必需)、一个空行和一些查询数据。
而web服务器对请求的响应,一般由一个状态行,一些响应报头,一个空行和相应的文档构成
比如:HTTP/1.1 200 OK
Content-Type :text/html
Header2:...
...
HeaderN:...
(Blank Line)
<!DOCTYPE...>
....
:状态代码的指定
一般不需要明确指定,系统默认使用200的状态代码:
    200 - 服务器成功返回网页
    404 - 请求的网页不存在
    503 - 服务器暂时不可用
具体可参见http://support.google.com/webmasters/bin/answer.py?hl=zh-Hans&answer=40132或者http://www.kuqin.com/web/20090913/68714.html
如果我们要设置,就要使用response.setStatus,response.sendRedirect或response.sendError。
1.设置302和404状态代码:sendRedirect和sendError,
a.状态代码302命令浏览器连接到新的位置,sendRedirect方法生成302响应以及Location报头,给出新的文档的URL,这个URL即可以是绝对URL,也可以是相对的URL。系统在将它们放入Location报头之前,自动将相对URL转换成绝对URL。使用sendRedirect等效于
response.setStatus(response.SC_MOVED_TEMPORARILY)
response.setHeader("location",url)
;但使用response.sendRedirect(url)有许多优点。
b.状态代码404用于服务器没有找到文档的情况,sendError方法发送状态代码(一般为404)以及一小段简短的消息,这段消息被自动安排到HTML文档中发送给客户。也就是说不需要我们把错误信息发送给客户,这个sendError可以完成我们的任务
、HTTP1.1状态代码。
1.302状态代码:一般认为仅当最初的请求为GET时,浏览器才应该自动执行重定向。但许多旧的浏览器在最初消息是POST的情况下,依旧错误的跟随302响应中的重定向信息。
2.303状态代码:除非初始的请求为POST,否则应该用GET来读取新的文档。也就是说浏览器只有在接受到303响应状态时才跟从POST请求的重定向信息。当然303对POST的响应不代表303状态代码只对POST的相应,它还对GET相应,这样302和303就重复了。这样我就要引入一个307来解决这个二义性的问题。
3.307状态代码规定,对于GET请求的重定向,继续进行,而对POST请求的重定向,则不再继续下去。这样使用307而不是302,就避免了和303的二义性问题了;
4.404错误(SC_NOT_FOUND),由于其经常使用,所以HttpServletResponse类中为它提供了一个专门的方法sendError,
、将用户重定向到浏览器相关页面的servlet
String userAgent = request.getHeader("User-Agent");
		if(userAgent!=null&&userAgent.indexOf("MSIE")!=-1){
			response.sendRedirect("http://home.netscape.com");
		}else{
			response.sendRedirect("http://www.microsoft.com");
		}

四、各种浏览器的前端
在浏览器前端根据用户的输入和选取的搜索引擎,转到相应的界面。
<form action = "coreservlets.SearchEngine">
    	Search:<input type = "text" name ="searchString"><br>
    	<input type = "radio" name ="searchEngineName" value ="Google">Google<br>
    	<input type ="radio" name = "searchEngineName" value ="Baidu">Baidu<br>
    	<input type = "radio" name = "searchEngineName" value ="soso">soso<br>
    	
    	<input type = "submit" value ="submit"><br>
    </form>

String searchEngineName = request.getParameter("searchEngineName");
		String searchString = request.getParameter("searchString");
		String searchURL = "";
		if(searchEngineName==null){
			response.sendError(response.SC_NOT_FOUND,"missing search string");
		}else{
			if(searchEngineName.equalsIgnoreCase("Google")){
				searchURL = "http://www.google.com/search?q="+searchString;
			}else if(searchEngineName.equalsIgnoreCase("baidu")){
				searchURL ="http://www.baidu.com/s?wd="+searchString;
			}else if(searchEngineName.equalsIgnoreCase("soso")){
				searchURL = "http://www.soso.com/q?w="+searchString;
			}
		}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics