ServletRequest和ServletResponse用法
我们知道,在Servlet的方法中有一个service()方法,该方法是负责客户端和浏览器之间的交流,即如果请求Servlet,则容器会调用该service方法,例如,表单以get/post方法提交,则容器会调用该service()方法.
下面是该方法:
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
}
这个方法有2个参数,一个是servletRequest,一个是servletResponse,他们又是什么呢?直接看字面意思,一个是servlet请求,一个是servlet响应。其实差不多就是这意思。他们又有什么用呢?还记得上面说的吗?如果请求servlet,则容器会调用这个service方法。
ServletRequest: 封装了请求信息. 可以从中获取到任何的请求信息.
ServletResponse: 封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现.
这两个接口的实现类都是服务器给予实现的, 并在服务器调用 service 方法时传入.
ServletRequest用法:
先来写一个简单的表单吧。
<form action ="loginServlet" method ="post">
user: <input type="text" name="username"/>
password : <input type="password" name="password"/>
<input type="submit" value="submit"/>
</form>
注意到
表单里的action=“loginServlet”,这个值要和配置的web.xml中的url-pattern的值一致。这里的请求方式是post。
好了,这样,表单提交的时候,服务器就会调用service方法,方法里面的servletRequest就是这个请求。咱们就可以利用这个请求,得到表单提交的消息。其实获得参数的方法大都相似,不管是在JDBC里面,还是前面的获得初始化参数。
(1)获得请求的参数
> String getParameter(String name): 根据请求参数的名字, 返回参数值.
若请求参数有多个值(例如 checkbox), 该方法只能获取到第一个提交的值.
> String[] getParameterValues(String name): 根据请求参数的名字, 返回请求参数对应的字符串数组.
> Enumeration getParameterNames(): 返回参数名对应的 Enumeration 对象,
类似于 ServletConfig(或 ServletContext) 的 getInitParameterNames() 方法.
> Map getParameterMap(): 返回请求参数的键值对: key: 参数名, value: 参数值, String 数组类型.
String user = request.getParameter("user");
// 若该参数有多个值,则用这种方法只能获得第一个参数值
// getParameterNames() 返回的是一个Enumerations
// 对象,类似于ServletConfig(或者ServletContext)
// Map getParameterMap() :返回请求参数的键值对 :key:参数名 值:string数组类型
String password = request.getParameter("password");
System.out.println("user: " + user + "password: " + password);
Enumeration<String> es = request.getParameterNames();
while(es.hasMoreElements()){
String name =es.nextElement();
String value =request.getParameter(name);
System.out.println("es:"+name+"===="+value);
}
Map<String, String[]> map = request.getParameterMap();
for (Map.Entry<String, String[]> entry : map.entrySet()) {
System.out.println("==" + entry.getKey()
+ Arrays.asList(entry.getValue()));
}
(2)获得请求的URL:
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestURI = httpServletRequest.getRequestURI();
System.out.println(requestURI);
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
String requestUrl = httpServletRequest.getRequestURI();
System.out.println(requestUrl);
(3)获取请求方式:
String method = httpServletRequest.getMethod();
System.out.println(method);
// 请求方法
String method = httpServletRequest.getMethod();
System.out.println(method);
(4)若为get方式,可获取?后面的那串字符串:
String queryString = httpServletRequest.getQueryString();
System.out.println(queryString); //user=root&password=123456&interesting=game&interesting=party&interesting=shopping
(5)获得请求的Servlet映射路径:
String servletPath = httpServletRequest.getServletPath();
System.out.println(servletPath); // /loginServlet
<span style="white-space:pre"> </span>//?后面的字符串
String queryString = httpServletRequest.getQueryString();
System.out.println(queryString);
//映射路径
String servletPath = httpServletRequest.getServletPath();
System.out.println(servletPath);
注意到代码中的servlet是httpServletResquest. HttpServletRequest: 是Servlet的子接口,针对于HTTP请求所定义,里面包含了大量获取HTTP请求相关的方法。所以将servletRequest强转成httpServletRequest.
ServletResponse用法:
ServletResponse封装了响应信息, 如果想给用户什么响应, 具体可以使用该接口的方法实现。
(1)getWriter()方法:
返回一个 PrintWriter 对象. 调用该对象的 print() 方法, 将把 print() 中的参数直接打印到客户的浏览器上.
(2)设置响应的内容类型:
response.setContentType("application/msword");
(3) void sendRedirect(String location):
请求的重定向. (此方法为 HttpServletResponse 中定义.)
// 设置响应的类型,如下操作会下载一个Word文档
response.setContentType("application/msword");
//输出一个helloworld到浏览器界面
PrintWriter pw = response.getWriter();
pw.println("helloworld");
以上就是request和response的简单用法。做个小总结