Servlet 学习笔记②

1. HTTP 简介

  • WEB 浏览器和WEB 服务器之间的一问一答的交互过程必须遵循一定的规则,这个规则就是HTTP 协议。
  • HTTP 是 hypertext transefer protocal(超文本传输协议)的简写, 它是TCP/IP协议集中的的一个应用层协议,用于定义WEB浏览器与WEB 服务器之间交换数据的过程以及数据本身的格式。
  • HTTP 协议的版本HTTP/1.0, HTTP/1.1, HTTP-NG

 

2. HTTP 的会话方式

  • 浏览器与WEB 服务器的连接过程是短暂的,每次连接只处理一个请求和响应。对每一个页面的访问,浏览器与WEB 服务器都要建立一次单独的连接。
  • 浏览器到WEB 服务器之间的所有通讯都是完全独立分开的请求和响应对。
  • 四个步骤:

  • 浏览器访问多图网页的过程:如果一个网页文档里面有三张图片,则会有4个请求响应对。

 

3. HTTP 请求消息, 请求消息的结构:一个请求行,多个消息头,以及实体内容。其中的一些消息头和实体内容都是可选的,消息头和实体内容之间要用空行隔开。

 

   POST 请求和GET 请求方式传递参数:

  • POST 特点:
    • POST 请求方式主要用于向WEB 服务器端程序提交FORM 表单中的数据: form 表单的method 设置为POST
    • POST 方式将各个表单的字段元素以及数据作为HTTP 消息的实体内容发送给WEB 服务器, 传送的数据量比使用GET 方式传送的数据量大的多。
    • POST 方式保密性好,不会像GET 方式那样把用户名密码之类的信息显示在请求URL 中, 作为表单的请求,一般都采用这种方法。
    • POST 请求实例:

  • GET 特点:
    • 在浏览器的地址栏中输入某个URL 地址或者单击网页的一个超链接时,浏览器翻出的HTTP 请求消息的请求方式为GET
    • 如果网页中的 <form> 表单元素的method 值被设置为“GET,浏览器提交这个FROM表单时生成的HTTP 请求消息的请求方式也为GET。
    • 使用GET请求方式给WEB 服务传递参数的形式:

    • 传递的数量是有限制的,一般在1kb 以下;
    • 用户数据保密性差
    • Get 请求实例:

 

4. 如何在Servlet 中获取请求信息

① Servlet 中的service() 方法用于应答请求: 因为每次请求都会调用service() 方法.

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException 

  • ServletRequest: 封装了请求信息,可以从中获取到任何的请求信息
  • ServletResponse: 封装了响应信息,如果想给用户什么响应,具体可以使用该接口的方法实现

这两个接口的实现类都是服务器给予实现的,并在服务器调用service 方法时传入。

 

②. ServletRequest (这里只列举了部分的方法,所有和请求有关的信息都可以查阅ServletRequest(一般我们使用其子接口HttpServletRequest) 的文档)

  • 获取请求参数
    • String getParameter(String name) 根据参数名称,返回参数值。若请求参数有多个值(比如复选框),则只能返回参数的第一个值。
    • String[] getParameterValues(String name): 根据参数名称,返回参数值数组。
    • Enumeration<String> result = request.getParameterNames(); 返回参数名称对应的Enumeration 对象,类似于ServletConfig (或者ServletContext) 对应的getInitParameterNames() 方法
    • Map getParameterMap(): 返回请求参数的键值对: key: 参数名  value: 参数值(String 数组类型)
  • 获取请求的URI

String requestUri = httpRequest.getRequestURI();
System.out.println(requestUri);

  • 获取请求的Method:

String requestMethod = httpRequest.getMethod();
System.out.println(requestMethod);

  • 若是一个GET 请求,获取请求参数对应的字符串,即“?” 后面的字符串

String queryString = httpRequest.getQueryString();
System.out.println(queryString);

  • 获取请求Servlet 的映射路径:

String servletPath = httpRequest.getServletPath();
System.out.println(servletPath);

  • 和attribute 相关的几个方法:

。。。。。待续

 

 

③ HttpServletRequest: 是ServletRequest 的子接口,针对HTTP 请求所定义,里面包含了大量的获取HTTP 请求的相关方法。

④ ServletResponse 中的常用方法

  • getWriter()

PrintWriter out = response.getWriter();
out.write("hellowolrd");

 

  • 设置响应的内容类型

response.setContentType("applocation/msword");

  • 获取输出流:

getOutputStream() 

  • void senRedirect(String location): 请求的重定向,这是一个非常重要的方法

代码:

package servlettest;

import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import java.util.Set;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class HttpServletTest implements Servlet {

	@Override
	public void init(ServletConfig config) throws ServletException {
		// TODO Auto-generated method stub

	}

	@Override
	public ServletConfig getServletConfig() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		System.out.println("This is service");
		String user = request.getParameter("user");
		String password = request.getParameter("password");

		System.out.println(user);
		System.out.println(password);

		String[] interesting = request.getParameterValues("interesting");
		System.out.println(interesting.length);
		for (int i = 0; i < interesting.length; i++) {
			System.out.println(interesting[i]);
		}

		System.out.println("===============================");
		Enumeration<String> result = request.getParameterNames();
		while (result.hasMoreElements()) {
			System.out.println(result.nextElement());
		}

		System.out.println("===============================");
		Map<String, String[]> resultMap = (Map<String, String[]>) request.getParameterMap();
		Set<String> resultMapKey = resultMap.keySet();
		for (Object key : resultMapKey) {
			for (int i = 0; i < resultMap.get(key).length; i++) {
				System.out.println(resultMap.get(key)[i]);
			}
		}

		System.out.println("===============================");
		for (Map.Entry<String, String[]> entry : resultMap.entrySet()) {
			System.out.println(entry.getKey() + " " + Arrays.asList(entry.getValue()));
		}

		System.out.println("===============================");
		HttpServletRequest httpRequest = (HttpServletRequest) request;

		String requestUri = httpRequest.getRequestURI();
		System.out.println(requestUri);

		String requestMethod = httpRequest.getMethod();
		System.out.println(requestMethod);

		String queryString = httpRequest.getQueryString();
		System.out.println(queryString);

		String servletPath = httpRequest.getServletPath();
		System.out.println(servletPath);
	}

	@Override
	public String getServletInfo() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}
}

 

XML配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
    
    <servlet>
        <servlet-name>httpServletTest</servlet-name>
        <servlet-class>servlettest.HttpServletTest</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>httpServletTest</servlet-name>
        <url-pattern>/loginServlet</url-pattern>
    </servlet-mapping>
</web-app>

 

HTML 文件: 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <form action="loginServlet" method="get">
        user: <input type="text" name="user">
        password: <input type="text" name="password">
        
        <br><br>
        interesting:
        <input type="checkbox" name="interesting" value="reading">reading
        <input type="checkbox" name="interesting" value="palyboy">palyboy
        <input type="checkbox" name="interesting" value="playgirl">playgirl
        <input type="checkbox" name="interesting" value="football">football
        <input type="checkbox" name="interesting" value="basketball">basketball
        <input type="checkbox" name="interesting" value="swiming">swiming
        <input type="checkbox" name="interesting" value="eating">eating
        
        <input type="submit" value="Submit"/>
    </form>

</body>
</html>

  

 

posted on 2016-04-07 10:04  我表情悠哉  阅读(250)  评论(0编辑  收藏  举报

导航