前台到后台的几种请求的方式
- 地址栏输入
- 超链接
- Form表单(可以传送数据)
- ajax(可以传送数据,还有可以接受的回调函数)
- 请求转发
- 重定向
HttpServletRequest对象
HttpSevletRequest对象:主要作用是用来接收客户端发送过来的请求信息,例如:请求的参数,发送的头信息等都属于客户端发来的信息,service()方法中形参接收的是HttpServletRequest接口的实例化对象,表示该对象主要应用在HTTP协议上,该对象是由Tomcat封装好传递过来
常用的一些方法
-
getRequestURL() 获取客户端发出请求时的完整URL
- getRequestRUI() 获取请求行中欧冠的资源名称部分(项目名称开始)
- getQueryString() 获取请求行中的参数部分
- getMethod() 获取客户端请求方式
- getProtocol() 获取HTTP版本号
- getContextPath() 获取webapp名字
- getHeader(String) 获取单个请求头内容
- Enumeration getHeaderNames() 获取所有的请求头名称集合
- getParameter(name) 获取指定名称的参数
- getParameterValues(String name) 获取指定名称参数的所有值
- getParameterNames() 获取一个包含请求消息的所有参数名的Eumeration对象
- getParameterMap() 返回一个保存了请求消息中的所有参数名称和值的Map对象
请求乱码问题
1. **乱码原因**
1. 由于现在的request属于接受客户端的参数,所有必然有其默认的语言编码,主要是由于在解析过程中默认使用的编码方法为ISO-8859-1(此编码不支持中文),所以解析时一定会出现乱码。
2. **post请求**
1. Tomcat8乱码
2. Tomcat7乱码
3. **get请求**
1. Tomcat7乱码
2. Tomcat8不会乱码
4. **解决POST请求乱码**
1. request.setCharacterEncoding("UTF-8"); // 设置服务器的编码方式,该方式只对post请求生效,如果是get请求没有任何效果
2. new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
5. **解决GET请求乱码:(如果原来不乱码,通过new String()去处理,会出现另外一种乱码)**
1. new String(request.getParameter(name).getBytes("ISO-8859-1"),"UTF-8");
6. **总结**
1. Post请求:无论什么版本的服务器,都乱码
2. Get请求:Tomcat8及以上版本,不乱码;Tomcat7及以下版本乱码。
请求转发
-
request.getRequestDispatcher(url).forward(request, response);
- 是服务器行为
- 地址栏不会发生改变
- 只有一次请求,request对象共享
request域对象
-
将数据存到request作用域中,前台页面(JSP)从作用域中获取域对象的值
- setAttribute(name,value):设置作用域,name是字符串类型,value是object类型
- getAttribute(name):获取指定名称的域对象的值,返回的是object类型
- removeAttribute(name):移除指定名称的域对象的值