JavaWeb期末速成 Servlet
关键词:Servlet API 生命周期 处理请求 表单数据处理 发送响应
Servlet接口
Servlet接口是Servlet API中的基本接口,每个Servlet必须直接或间接实现该接口
该接口定义了如下5个方法:
void init(ServletConfig config)
void service(ServletRequest request, ServletResponse response)
void destroy()
ServletConfig getServletConfig()
String getServletInfo()
HttpServlet类
在HttpServlet类中增加了一个新的service()方法,格式如下:
protected void service(HttpServletRequest request,HttpServletResponse response)
在HttpServlet中针对不同的HTTP请求方法定义了不同的处理方法,如处理GET请求的doGet()格式如下:
protected void doGet(HttpServletRequest request,HttpServletResponse response)
还定义了处理其他请求的方法,如处理POST请求的方法是doPost()
处理请求
GET方法 | POST方法 | |
---|---|---|
资源类型 | 静态的或动态的 | 动态的 |
数据类型 | 文本 | 文本或二进制数据 |
数据量 | 般不超过255个字符 | 没有限制 |
可见性 | 数据是URL的一部分 | 数据不是URL的一部分,作为请求的消息体送 |
数据缓存 | 数据可在浏览器的URL历史中缓存 | 数据不能在浏览器的URL历史中缓存 |
在客户端如果发生下面的事件,浏览器就向Web服务器发送一个HTTP请求。
- 用户在浏览器的地址栏中输入URL并按回车键 GET
- 用户点击了HTML页面中的超链接 GET
- 用户在HTML页面中添写一个表单并提交 GET/POST
前两种方法向Web服务器发送的都是 GET请求。如果使用HTML表单发送请求可以通过method属性指定使用GET请求或POST请求
默认情况下使用表单发送的请求也是GET请求,如果发送POST请求,需要将method属性值指定为post
,例如:
<form action="user-login" method="post">用户名:<input type="text" name="username" />密码:<input type="password" name="password" /><input type="submit" value="登录">
</form>
请求参数传递和获取
请求参数是随请求一起发送到服务器的数据,它以“名/值”对的形式发送。POST请求,参数在数据区;GET请求,参数附加在URI后面
从客户端向服务器端传递请求参数有下面两种方法
- 通过表单指定请求参数,每个表单域可以传递一个请求参数,这种方法适用于GET请求和POST请求。
- 通过URL中的查询串指定请求参数,将参数名和值附加在请求URI后面,这种方法只适用于GET请求
使用HttpServletRequest中定义的方法检索这些参数:
String getParameter(String name)
String[] getParameterValues(String name)
向服务器发送GET请求,还可以将请求参数附加在请求URL的后面。例如,可以直接使用下面的URL访问LoginServet,而不需要通过表单提供参数:
http://localhost:8080/chapter02/user-login?username=admin&password=admin
这里,问号后面内容为请求参数名和参数值对,若有多个参数,中间用“&”符号分隔,参数名和参数值之间用等号(=)分隔。问号后面内容称为查询串(query string)
请求转发
可能需要将请求转发(forward)到其他资源。通过请求对象的getRequestDispatcher()得到RequestDispatcher对象,该对象称为请求转发器对象,格式如下:
RequestDispatcher getRequestDispatcher(String path)
调用RequestDispatcher对象的forward()方法:
void forward(ServletRequest request, ServletResponse response)
响应重定向
Servlet在对请求进行分析后,可能不直接向浏览器发送响应,而是向浏览器发送一个Location响应头,告诉浏览器访问其他资源,这称为响应重定向。
响应重定向是通过响应对象的sendRedirect()实现,格式如下:
public void sendRedirect(String location)
URL可以是绝对URL,也可以是相对URL。
状态码
状态码范围 | 含义 | 示例 |
---|---|---|
100~199 | 表示信息 | 100表示服务器同意处理客户的请求 |
200~299 | 表示请求成功 | 200表示请求成功,204表示内容不存在 |
300~399 | 表示重定向 | 301表示页面移走了,304表示缓存的页面仍然有效 |
400~499 | 表示客户的错误 | 403表示禁止的页面,404表示页面没有找到 |
500~599 | 表示服务器的错误 | 500表示服务器内部错误,503表示以后再试 |