从上一篇Servlet入门学习(一)中我们大致了解了servlet的特点,以及使用过程,这一篇我们将针对servlet中两个重要的对象Request和Response做一个大致的讲述。
一、Request对象学习
作用:封存了当前请求的所有请求信息。
使用方式:
- 获取请求头数据
req.getMethod()//获取请求方式
req.getRequestURL()//获取请求URL信息
req.getRequestURI()//获取请求URI信息
req.getScheme()//获取传输协议
- 获取请求行数据
req.getHeader()//获取指定的请求头信息
req.getHeaderNames()//获取请求头的键名的枚举集合
- 获取用户数据
req.getParameter()//返回指定的用户数据
req.getParameterValues()//返回同键不同值的请求数据(多选)返回的是数组
req.getParameterNames()//返回所有用户请求数据的枚举集合。
注意:
- resquest对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法;
- 如果要获取的请求数据不存在,不会报错,返回null。
实例代码展示:
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class reequest_demo extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 获取请求头信息
// 获取请求方式
String method = req.getMethod();
// 获取请求URL
StringBuffer requestURL = req.getRequestURL();
// 获取请求URI
String requestURI = req.getRequestURI();
// 获取协议
String scheme = req.getScheme();
System.out.println(method + " " + requestURL + " " + requestURI + " " + scheme);
// 获取请求行数据
// 获取指定的请求行信息
String header = req.getHeader("User-Agent");
System.out.println(header);
// 获取所有的请求行的键的枚举
Enumeration e = req.getHeaderNames();
while (e.hasMoreElements()) {
String name = (String) e.nextElement();
String value = req.getHeader(name);
System.out.println(name + ":" + value);
}
// 获取用户数据(不管是get还是post都是用req.getParameter)
String parameter = req.getParameter("uname");
String parameter2 = req.getParameter("id");
System.out.println(parameter + " " + parameter2);
// 如果有多个键值相等的时候使用
String[] parameterValues = req.getParameterValues("fav");
for (String val : parameterValues) {
System.out.println(val);
}
}
}
二、Response对象学习
作用:用来响应数据到浏览器的一个对象
使用方式:
- 设置响应头
setHeader(String name,String value);//在响应头中添加响应信息,但是同键会覆盖
addHeader(String name,String value);//在响应头中添加响应信息,但是同键不会覆盖,并同时存在
- 设置响应状态
sendError(int num,String msg);//自定义响应状态码
- 设置响应实体
resp.getWrite().write(String str);//响应具体的数据给浏览器
- 设置响应编码格式
resp.SetContentType(“text/html”,”charset=utf-8”);
实例代码展示:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class response_demo extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
/*Service请求处理代码流程*/
//1 获取请求信息
//获取请求头
//获取请求行
//获取用户数据
//2 处理请求
//3 响应处理结果
//---------------以下是response对象操作--------------------------
//设置响应头
//设置响应编码格式
//resp.setHeader("content-type", "text/html;charset=utf-8");
resp.setContentType("text/html;charset=utf-8");
//resp.setContentType("text/plain;charset=utf-8");
//resp.setContentType("text/xml;charset=utf-8");
resp.setHeader("mouse", "66");
resp.setHeader("mouse", "89");
resp.addHeader("hlc", "23");
resp.addHeader("hlc", "66");
//设置响应状态码
//resp.sendError(405, "this is a mistake test");
//设置响应实体
resp.getWriter().write("<b>resp study 测试</b>");
}
}
三、总结
Service请求处理代码流程:
- 设置响应编码格式
- 获取请求数据
- 处理请求数据
- 数据库操作(mvc思想)
- 响应处理结果