request(请求):用于接受客户端发出的请求(如,请求的参数,发送的头信息等属于客户端发来的信息)。request是javax.servlet.http.HttpServletRequest接口的实例化对象,表示此对象主要应用在HTTP协议;
javax.servlet.http.HttpServletRequest的定义:
public interface HttpServletRequest extends ServletRequest
HttpServletRequest是ServletRequest接口的子接口(在查找request对象方法时除了要查询HttpServletRequest接口,也要查询ServletRequest接口);
1,为什么不将HttpServletRequest和ServletRequest作为一个接口?
文档中ServletRequest接口只有HttpServletRequest一个子接口,而HttpServletRequest接口也只继承了ServletRequest接口,既然如此官方还是将它们分开了,这样作的好处是什么?
这样的设计是为了以后的扩展应用,目前在java web中只是支持HTTP协议,所有用HttpServletRequest,如果以后有新的协议出现(它们之间总会有一些共同的操作),则就可以很好的扩展应用;
2,request内置对象的常用方法:
No | 方法 | 类型 | 描述 |
1 | public String getParameter(String name) | 普通 | 接收客户端发送过来的请求参数 |
2 | public String[] getParameterValues(String name) | 普通 | 取得客户端发来的一组请求参数内容 |
3 | public Enumeration getParameterNames() | 普通 | 取得全部请求参数的名称 |
4 | public String getRemoteAddr() | 普通 | 获得客户端的IP地址 |
5 | void setCharcterEncoding(String env) throws UnsupportedEncodingException | 普通 | 设置统一的请求编码 |
6 | public boolean isUserInRole(String role) | 普通 | 进行用户身份的验证 |
7 | public Httpsession getSession() | 普通 | 取得当前session的对象 |
8 | public StringBuffer getRequestURL() | 普通 | 返回正在请求的路径 |
9 | public Enumeration getHeaderNames() | 普通 | 取得全部请求的头信息的名称 |
10 | public String getHeader(String name) | 普通 | 根据名称取得头信息的内容 |
11 | public String getMethod() | 普通 | 取得用户的提交方式 |
12 | public String getServletPath() | 普通 | 取得访问的路径 |
13 | public String getContextPath() | 普通 | 取得上下文资源路径 |
3,防止乱码:
在web开发中,接受request请求参数是最常见的操作,但是在进行参数提交时也会存在一些中文乱码问题。由于浏览器默认编码是UTF-8;而有时jsp默认的GBK(举一个例子),2者编码是不一样的,造成了乱码;
解决方法就是,在编辑jsp页面的时候和servlet接收消息的的时候,将其都设置统一的字符编码;(以后可以用过滤器进行编码的设置)
4,接受请求参数 :
request内置对象中的getParameter()方法可以接受一个表单的文本框中输入的内容,那么实际上getPrameter()接受的就是一个参数的内容(一个文本框中的名词就是一个参数的名称),这种方法只适合于每次接收一个参数,如果有一组参数呢?则就要使用getParameterValues()方法进行接受;
在实际开发中(比如在表单中),想文本框(text),单选按钮(radio),密码框(password),隐藏域(hidden)等,一般都会使用getPrameter()方法接收,因为这些空间在使用时参数名字不会重复,而像复选框(checked),一般参数的名称都是重复的,是一组参数,所有只能使用getParameterValues()接收,如果不小心使用getPrameter()方法,则只会接受第一个选中的内容;
在表单中通常会有2种方法提交!
- post:提交内容是不会显示在地址栏上,可以提交更多的内容,表单提交多用这个;
- get:使用get提交时,提交内容会显示在地址拦之后,并且会有长度限制一般是4KB~5KB,一些分页,访问自己本身时候多用这个;