WEB15Request

1.request与response类似,我们通过抓包工具可以看到request请求分为请求行,请求头,请求体(当请求方式为post的时候有)

WEB15Request_第1张图片
 我们要熟悉request的运行过程:

WEB15Request_第2张图片

2.request获取请求行的信息
获得请求方式request.getMethod()  获得请求的资源路径 request.getRequesturi()  获得web应用的名称request.getContextPath() 获得地址后面的参数字符串request.getQueryString() 

package web15request_1;

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 ServletLine extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1获取我的请求方式
		String method = request.getMethod();
		System.out.println(method);
		//2.获得请求的资源
		String uri = request.getRequestURI();
		System.out.println(uri);
		//获得 web应用的名称
		String name = request.getContextPath();
		System.out.println(name);
		//地址后的参数字符串
		String str = request.getQueryString();
		System.out.println(str);
	}

POST
/web15request_1/servlet/ServletLine
/web15request_1
null 因为这个是post请求所以这里的地址后面的字符串显示为null,他应该存在请求体中

注意,request封装的是客户端的信息,同时里面就包含客户机的信息,谁访问我,我就可以获得谁的机器的信息。

3request获取请求头的信息

WEB15Request_第3张图片

getHeader("User-Agent"); 字符串从上面选择   request.getHeaderNames()

其中referer这个头的目的是检测请求的来源,用来防盗的。服务器检测你的请求来源是不是我服务器的ip地址,如果是就赶回给访问者资源,如果是从别的网站上来请求我的资源 就不给返回。以此防止有的网站会盗用别人的资源。

4request获得请求体的信息

getParameter()此处括号中要填name,所以在写前端的时候用html写,input中的name属性很重要,否则服务器获取不到。

我们重点记住里面的getParameter()和 getParameterMap()


    


足球 蓝球 羽毛球 乒乓球

		//获得所有参数 遍历map
		Map parametermap = request.getParameterMap()
		for(Map.Entry entry:parametermap.entrySet()){
			System.out.println(entry.getKey());
			for(String stri:entry.getValue()){
				System.out.println(stri);
			}
		}

username
cs
---------------
psw
123
---------------
hobby
lan
yumao
--------------- 

注意:对于get请求方式同样适用。

5.request的其他功能

request是一个域对象,同context,就是一块存储数据的内存,提到域对象,我们要知道有三个方法,getAttribute(String name);setAttribute(String name,,Object obj);removeAttribute(String name)

可以把域比作垃圾桶,放在大街上所有人可以用,放到教室,班级学生可以用,而ServletContext是放在大街上的垃圾桶,学这个域之前我们需知道一个概念就是请求转发,与重定向是相互对应的。

两个的区别在于:重定向是客户端两次访问服务器,请求转发是一次访问,特点:快速,省了两次传输过程并且请求地址不变WEB15Request_第4张图片

如何 实现请求转发:

请求就是请求资源地址是啥,将其转给服务器内部的另一个servlet,他们在同一个项目下,实现的步骤有二:

获取转发器,使用转发器将request,reponse作为参数给另一个servlet

getRequestDispatcher(String path)   forward(request,response)

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//response.getWriter().write("hello haohao...");
		//将servlet1的请求转发给其他的servlet
		RequestDispatcher re = request.getRequestDispatcher("/servlet/ServletLine");
//一定把路径写正确 从web15开始的路径
		re.forward(request, response);
		
	}

我们知道,访问一次服务器就会创建一个request对象和response对象,而ServletContext只创建一次就可以了。所以,我们知道request中信息所作用范围:一次请求中

下面就是一个注册的案例:

分析这个过程:先有一个客户端页面form表单,post请求,传给tomcat服务器,tomcat内核会解析http请求,并且创建request对象,同时创建response对象,并且通过web.xml找到我们写好的后台servlet代码,获取request的信息,并且tomcat有一个BeanUtils可以直接将request请求体的内容映射到一个实体。接下来就是将信息存储到数据库中,中间过程会遇到乱码的问题。

WEB15Request_第5张图片

实现步骤:

(1)实现一个注册的页面,action = “servlet的地址”methode=“POST”,并且给每个需要插入数据库的列起名称

(2)servlet中的java代码实现步骤:

        //1.获取request中的内容 // 2.封装成实体 //3 一个业务操作方法,也就是往数据库中插入

package web15request_1;

import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.Map;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.beanutils.BeanUtils;

public class ServletRegister extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//response.getWriter().write("hello haohao...");
		//1.获取request的信息 这里因为要用到BeanUtils映射,所以获取请求体用getparameterMap
		Map reparameter = request.getParameterMap();
		
		//2.封装请求的信息,
		User user = new User();
		try {
			BeanUtils.populate(user,reparameter);
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		register(user);
		
	}

	private void register(User user) {
		// TODO Auto-generated method stub
		//这里用到的是jdbc的知识
		Connection conn = JDBCUtil.getConnection();
		String sql = "insert into user values(?,?,?,?,?,?,?,?,?,?)";
		PreparedStatement pre = null;
		try {
			pre = conn.prepareStatement(sql);
			pre.setString(1,UUID.randomUUID()+"");
			System.out.println(UUID.randomUUID().toString().length());
			pre.setString(2,user.getUsername());
			pre.setString(3,user.getPassword());
			pre.setString(4,user.getName());
			pre.setString(5,user.getEmail());
			pre.setString(6,null);
			pre.setString(7,user.getBirthday());
			pre.setString(8,user.getSex());
			pre.setString(9,null);
			pre.setString(10,null);
			
			pre.executeUpdate();
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

 

 

你可能感兴趣的:(WEB15Request)