package endual;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* 100-199 表示的是信息性的,标示客户应该采取的其他动作
* 200-299 表示的是请求成功了
* 300-399 表示的值用于那些已经移走的文件,常常包括location报头,指出新的地址
* 400-499 表示的是由于客户端引起的
* 500-599 表明由客户引发的错误
*
* 100 Continue 继续
* 如果服务器接收到的值是100-continue的Expect的请求报头,这表示客户程序在询问是否可以在随后的
* 请求中发送附属文档。这种情况下,服务器应该以状态100回应,告诉客户程序继续下去。或者使用417告诉浏览器
* 不接收该文档,这是http1.1新引人的
*
* 200 表示OK
* 200表示一切正常,如果是get和post 那么文档后面就跟在后面,对于serlet,这是默认值,如果没有调用setStatus,那么默认值就是200了
*
* 202 Acceoted 已经接收
* 202告诉客户请求已经接收了 但处理尚未完成
*
* 204 No Content, 没有新的文档
* 状态代码 204 要求浏览器继续显示之前的文档,因为没有新的文档,如果用户周期性的单击reload按钮来重新
* 载入页面,那么这个行为就比较有用,您可要确定前面的页面已经是最新的了
*
* 205 重置内容
* 表示没有心的文档,但是浏览器应该重置文档视图,因此这个状态代码用来指示游览器消除表单的字段。它是HTTP1.1新引人
* 的状态的代码
*
* 301 表示文档被移动到别的地方,文档的新URL在location响应报头中给出,浏览器应该依据这个链接跳转到新的url
*
* 302 找到
* 这个值类似于301 只是原则上应该将location报头给出的url看做是非永久性的临时代替,在实际中,大多数的浏览器都是等同的对待301和302
*
* 307类似
* 400 错误的请求
* 400 表示的是客户请求中含有语法的错误
* 401 为授权
* 401表示的是客户程序视图访问密码保护的页面,但是在请求的authorization的报头中没有正确的身份标示信息。
* 相应必须www-authenticate报头。
* 403 资源不可用
* 状态代码403 表示服务器拒绝提供相关的资源,不管是否拥有授权,这个状态常常是由服务器上文件或者目录的许可权限到导致的
*
* 404 未找到
* 页面没有。在给定的地址找补到任何的资源。这个值的标准的no such page相应。由于这个相应太过常用而且有效,因此在httpservletrespones
* 类中为它提供了一个专门的方法,就是sendError("message")。
*
* 405 方法不允许
* 405表示的值,这个特定资源不预习使用该方法请求,get post head put delete 这是1.1新引人的代码
* 417 期望不能满足
* 如果服务器接收到的值为100-continue的Excep请求报头,那么表示客户程序在询问是否可以在后续的请求中发送附加的文档。
* 500 服务器内部错误了,服务器内部陷入了混论的不正常的代码 它常常是由于cgi程序或servlet崩溃或饭后格式不正确的报头而造成的
*
* 501 未实现
* 501 状态通知客户程序,服务器不支持能够满足该请求的功能,它用于表示服务器不支持客户程序的命令,比如put
*
* 503 服务器不可以用
* 状态代码503表示,由于维护工作或者是超负荷工作,服务器不能做出相应,例如如果线程池或者数据库连接池当前被全部占有那么servklet
* 可能就要返回这个报头了
*
* 505 不支持http版本
* 505代码表示服务器不支持请求行中给出的http版本,这是http1.1引入的状态代码
*
* @author Endual
*
*/
public class SetStatueServlet extends HttpServlet {
/**
* The doGet method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to get.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
/**
* 设置的是任意的状态代码的,需要使用的是setStatus方法。如果相应的是状态代码比较特殊,并且伴有相关的文档内容
* 那一定要再用printWriter实际返回任何内容之前调用setStatus,之所以需要这样做,是因为http请求的有状态行,一个或者多个
* 行头,一个空行,以及实际的文档安装比较理出的次序组成的
*/
response.setStatus(1440) ;
/**
* 虽然设置状态代码的调用方法是直接调用的response.setStatue(int)
* 但是,httpServletRespone专门为两种常见的情况提供了快捷的方法。
* 需要注意的是,这两个方法都是抛出的是IOException异常,而setStatue不会
* 由于doGet和doPost方法拍抛出的是IOException因此仅当将相应对象床单给其他方法的时候,才需要注意这样昂的情况
*/
response.sendRedirect("") ; //命令游览器连接到新的位子中,生成302相应以及location报头,给出新的文档的url
response.sendError(100) ; // 状态404用于服务器没有找到文档的情况。sendError方法发送状态代码以及一小段简短的消息,而这个消息会被自动安排到html文档中发送给客户的
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the GET method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
/**
* The doPost method of the servlet. <br>
*
* This method is called when a form has its tag value method equals to post.
*
* @param request the request send by the client to the server
* @param response the response send by the server to the client
* @throws ServletException if an error occurred
* @throws IOException if an error occurred
*/
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.print(" This is ");
out.print(this.getClass());
out.println(", using the POST method");
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
}