Servlet 中ServletRequest和ServletResponse用法

来源:互联网 发布:优化标题关键词技巧 编辑:程序博客网 时间:2024/04/19 10:59

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"/><inputtype="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的简单用法。做个小总结







0 0
原创粉丝点击