文章目录
HttpServletRequest接口
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,通过这个对象提供的方法,可以获得客户端请求的所有信息。
- API中关于HttpServletRequest 的解释
公用接口 HttpServletRequest
扩充ServletRequest
扩充ServletRequest 接口 以为HTTP servlet提供信息.
servlet 容器创建了一个 HttpServletRequest 对象并将之作为一个参数传送给 servlet’s service 方法 (如doGet, doPost, 等).
HttpServletRequest常用方法
方法返回值类型 | 方法名 | 方法解释 |
---|---|---|
java.lang.String | getContextPath() | 获取请求的上下文路径,方法返回结果是:/项目名称) |
java.lang.String | getMethod() | 返回用以作出请求的HTTP方法的名称,例如 GET, POST,或 PUT等等 |
java.lang.String | getServletPath() | 返回调用servlet的请求的URL部分 |
java.lang.String | getParameter(java.lang.String name) | 返回一个请求参数的字符串值。若该参数不存在,则返回一个空值。 |
void | setCharacterEncoding(java.lang.String env) | 处理请求乱码的方法 |
java.lang.String[] | getParameterValues(java.lang.String name) | 返回一个包含所有的给定请求参数的值的字符串对象的向量。若该参数不存在,则返回一个空值。 |
java.lang.StringBuffer | getRequestURL() | 返回请求全路径 |
java.lang.String | getProtocol() | 以 protocol/majorVersion.minorVersion, 的格式返回请求所用协议的名称和版本。例如HTTP/1.1 |
java.lang.String | getRemoteAddr() | 返回客户端发送请求的IP地址。 |
java.lang.String | getRemoteHost() | 返回发送请求的客户端的完全合格的名称;或者如果客户端的名字没有确定则返回其IP地址。 |
java.lang.String | getScheme() | 返回用以作出请求消息的方案的名称,如 http, https, 或ftp等 |
java.lang.String | getServerName() | 返回收到请求的服务器主机的名字。 |
int | getServerPort() | 返回收到请求的端口号 |
void | setAttribute(java.lang.String name, java.lang.Object o) | 存储一个请求消息中的属性。 |
java.lang.Object | getAttribute(java.lang.String name) | 返回具有给定名字的 servlet container 的属性,或者当没有具有所给名字的属性时,返回一个空值。 |
void | removeAttribute(java.lang.String name) | 从请求消息中删除一个属性。 |
HttpServletResponse接口
Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。
request和response对象即然代表请求和响应,那我们要获取客户机提交过来的数据,只需要找request对象就行了。要向客户机输出数据,只需要找response对象就行了。
- API关于HttpServletResponse的解释
公用接口 HttpServletResponse
扩充ServletResponse
扩充ServletResponse 接口 以在发送一个响应消息时提供 指定的HTTP功能性。例如它有访问HTTP 头和cookies的方法.
servlet容器创建一个 HttpServletRequest 对象并将之作为一个参数传递给 servlet的 service方法 (如doGet, doPost等).
HttpServletResponse常用方法
方法返回值类型 | 方法名 | 方法解释 |
---|---|---|
void | setContentType(java.lang.String type) | 处理响应乱码 |
void | sendRedirect(java.lang.String location) | 用指定的重定位URL向客户端发送一个临时重定位响应消息。 |
RequestDispatcher接口
- API
公有接口 RequestDispatcher
定义了一个从客户端SERVLET接收请求的对象,并将其传送给服务器上的任一资源 (例如, 一个servlet, HTML文件,或是JSP 文件). servlet容器创建RequestDispatcher对象, 这个对象被用作一个位于精确的路径或给定的想此名子的服务器资源的封装.
这个接口用于封装servlet,但一个servlet容器可以创建用于封装任意类型资源的 RequestDispatcher 对象.
RequestDispatcher常用方法
方法返回值类型 | 方法名 | 方法解释 |
---|---|---|
void | forward(ServletRequest request, ServletResponse response) | 在服务器上将一个请求从一个servlet转到另一个资源 (servlet, JSP文件, 或HTML文件) |
void | include(ServletRequest request, ServletResponse response) | 包含一个资源 (servlet, JSP page, HTML文件)内容进一个响应消息 |
案例演示
处理请求乱码
request.setCharacterEncoding("utf-8");
处理响应乱码
response.setContentType("text/html;charset=utf-8");
处理乱码后保存代码,如果提示你想要以怎样的方式保存代码,勾选以"Save as UTF-8":
处理表单
用到的方法:
- getParameter(java.lang.String name)
- setCharacterEncoding(java.lang.String env)
- getParameterValues(java.lang.String name)
- setContentType(java.lang.String type)
- 我们新建一张简单的表单form1.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>调查表</title>
</head>
<body>
<!-- 表单数据会以post的方式提交到名为 "RequestMethodsDemo"的页面 -->
<form action="RequestMethodsDemo" method="post">
username:<input type="text" name="username" size="25"/><br/>
password:<input type="password" name="password" size="25"/><br/>
hobboy:
<input type="checkbox" name="hobby" value="0"/>敲代码
<input type="checkbox" name="hobby" value="1"/>玩游戏
<input type="checkbox" name="hobby" value="2"/>听音乐
<input type="submit" value="提交"/>
</form>
</body>
</html>
- 新建一个叫RequestMethodsDemo的Servlet:
package com.xxx.xx;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class RequestMethodsDemo
*/
public class RequestMethodsDemo extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public RequestMethodsDemo() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 处理请求乱码,这样我们就可以拿到表单中的汉字数据
request.setCharacterEncoding("utf-8");
// 处理响应乱码,这样就可以在浏览器网页中响应汉字数据
response.setContentType("text/html;charset=utf-8");
// 返回值类型 java.lang.String
// 方法名 getParameter(java.lang.String name)
// 返回一个请求参数的字符串值。若该参数不存在,则返回一个空值。
//拿到表单中的username和password的值
String username = request.getParameter("username");
String password = request.getParameter("password");
// 在网页上打印一下获取到的姓名和密码
response.getWriter().println("名字是:" + username + "/t密码是:" + password);
// 返回值类型 java.lang.String[]
// 方法名 getParameterValues(java.lang.String name)
// 返回一个包含所有的给定请求参数的值的字符串对象的向量。若该参数不存在,则返回一个空值。
//拿到表单中勾选的所有爱好选项
String[] hobbies = request.getParameterValues("hobby");
// 把所有勾选的爱好打印在网页上
for (int i = 0; i < hobbies.length; i++) {
String string = hobbies[i];
response.getWriter().println("爱好之一:" + string+"\t");
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
- 代码写好后,添加项目到Tomcat服务器,重启服务器,在浏览器中打开form1.html,填入姓名和密码,勾选上爱好:
- 点击提交,交给RequestMethodsDemo来处理:
一般我们不会把用户的数据直接打印在网页上,而是去校验用户提交的数据,把它跟从数据库中查询到的数据相匹配,再给浏览器以响应。用类似的方法可以做网页登录后台验证。
转发数据
比如我现在有一个Servlet_001里面有一个list集合对象,现在想把这个集合转发给Servlet_002去处理,怎么做?
用到的方法:
- setAttribute(java.lang.String name, java.lang.Object o)
- getAttribute(java.lang.String name)
- forward(ServletRequest request, ServletResponse response)
Servlet_001:
package com.xxx.xx;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Servlet_001
*/
public class Servlet_001 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet_001() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
List<String> list = new ArrayList<String>();
list.add("hello");
list.add("world!");
// 返回数据类型 void
// 方法名 setAttribute(java.lang.String name, java.lang.Object o)
// 存储一个请求消息中的属性。
request.setAttribute("msg", list);
// 返回数据类型 void
// 方法名 forward(ServletRequest request, ServletResponse response)
// 在服务器上将一个请求从一个servlet转到另一个资源 (servlet, JSP文件, 或HTML文件)
request.getRequestDispatcher("Servlet_002").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
Servlet_002:
package com.xxx.xx;
import java.io.IOException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class Servlet_002
*/
public class Servlet_002 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public Servlet_002() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 返回值类型 java.lang.Object
// 方法名 getAttribute(java.lang.String name)
// 返回具有给定名字的servlet container 的属性,或者当没有具有所给名字的属性时,返回一个空值。
// 返回一个obj对象,我们把它强转成list<String>类型,遍历输出在网页上
List<String> list = (List<String>) request.getAttribute("msg");
for (String string : list) {
response.getWriter().println(string);
}
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
在浏览器中访问Servlet_001: