HTTP的会话方式:
①建立连接;
②发出请求信息;
③回送响应信息;
④关闭连接。
浏览器与web服务器的连接过程是短暂的,每次连接只处理一个请求和响应,对于每一个页面的访问,浏览器与web服务器都要建立一次单独的连接。
浏览器到web服务器之间的所有通讯都是完全独立分开的请求和响应对。
Servlet的service方法用于应答请求:每次请求都会调用service方法
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
}
ServletRequest:封装了请求信息,可以从中获取到任何请求信息;
ServletResponse:封装了响应信息,如果想给用户什么响应,可以具体使用该接口的方法实现;
这两个接口的实现类都是服务器给予实现的,并在服务器调用service方法时传入。
关于ServletRequest
①String request.getParameter(String) :根据请求参数的名字,返回参数值;但是若该参数含有多个值(如CheckBox),那么只能获取到第一个提交的值。
②Enumeration<String> request.getParameterNames():返回参数名对应的Enumeration对象
③Map<String, String[]> request.getParameterMap():返回请求参数的键值对
④String[] request.getParameterValues(String):根据请求参数的名字,返回请求参数的字符串数组。
⑤httpRequest.getMethod() 获取请求方法;
⑥httpRequest.getRequestURI()获取请求的URI;
⑦httpRequest.getRequestURL()获取请求的URL
⑧httpRequest.getQueryString()若为get请求获取?后面的请求参数
⑨httpRequest.getServletPath() 获取servlet的请求路径
例子:
@Override
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
//①String request.getParameter(String)
System.out.println("request.getParameter() test ... ");
System.out.println("user:"+request.getParameter("user"));
System.out.println("password:"+request.getParameter("password"));
//②Enumeration<String> request.getParameterNames()
System.out.println("request.getParameterNames() test ... ");
Enumeration<String> parameterNames = request.getParameterNames();
while(parameterNames.hasMoreElements()){
String nextElement = parameterNames.nextElement();
System.out.println(nextElement+":"+request.getParameter(nextElement));
}
//③Map<String, String[]> request.getParameterMap()
System.out.println("request.getParameterMap() test...");
Map<String, String[]> parameterMap = request.getParameterMap();
for(Map.Entry<String, String[]> entry :parameterMap.entrySet()){
System.out.println(entry.getKey()+":"+Arrays.asList(entry.getValue()));
}
//④String[] request.getParameterValues(String)
System.out.println("request.getParameterValues test ... ");
System.out.println(Arrays.asList(request.getParameterValues("interesting")));
HttpServletRequest httpRequest=(HttpServletRequest) request;
//⑤httpRequest.getMethod() 获取请求方法;
System.out.println("本次请求的请求方法是:"+httpRequest.getMethod());
//⑥httpRequest.getRequestURI()获取请求的URI;
System.out.println("本次请求的URI是:"+httpRequest.getRequestURI());
//⑦httpRequest.getRequestURL()获取请求的URL
System.out.println("本次请求的URL是:"+httpRequest.getRequestURL());
//⑧httpRequest.getQueryString()若为get请求获取?后面的请求参数
System.out.println("若请求是get方法,那么请求参数为:"+httpRequest.getQueryString());
//⑨httpRequest.getServletPath() 获取servlet的请求路径
System.out.println("请求的路径为:"+httpRequest.getServletPath());
}
请求的url为:http://localhost:8080/JavaWeb_001/login.html
打印结果如下:
request.getParameter() test ...
user:zhangsan
password:123456
request.getParameterNames() test ...
user:zhangsan
password:123456
interesting:shopping
submit:submit
request.getParameterMap() test...
user:[zhangsan]
password:[123456]
interesting:[shopping, tv, coding]
submit:[submit]
request.getParameterValues test ...
[shopping, tv, coding]
本次请求的请求方法是:GET
本次请求的URI是:/JavaWeb_001/loginServlet
本次请求的URL是:http://localhost:8080/JavaWeb_001/loginServlet
若请求是get方法,那么请求参数为:user=zhangsan&password=123456&interesting=shopping&interesting=tv&interesting=coding&submit=submit
请求的路径为:/loginServlet