文章目录
HttpServletRequest类作用
每次只要有请求进入Tomcat服务器,Tomcat服务器就会把请求过来的HTTP协议信息解析好封装到Request对象中,然后传递到servlet方法(doGet和doPost)中给我们使用。也就是说,每次(一次)请求一个项目只会有一个Request对象供此次的响应使用,但是如果再次请求的话就会再次创建一个Request对象供这次的响应使用,也就是说,每次的请求都会有一个属于项目自己的Request对象域。我们可以通过HttpServletRequest对象,获取到所有的请求信息。我们可以看到,这里有HttpServletRequest类创建的对象
HttpServletRequest类的常用方法
getRequestURI() 获取请求的资源路径
getRequestURL() 获取请求的统一资源定位符(绝对路径)
getRemoteHost() 获取客户端的IP地址
getHeader() 获取请求头
getParameter() 获取请求的参数
getParameterValues() 获取请求的参数(多个值的时候使用)
getMethod() 获取请求的方式Get或Post
setAttribute(key,value);设置域数据
getAttribute(key); 获取域数据
getRequestDispatcher() 获取请求转发对象
getRequestURI()+getRequestURL()
注意:
一个结尾是I一个结尾是L
我们这里先创建一个类,然后继承HttpServlet来实现servlet程序,然后我们按shift+Alt+0选择第三个,然后选择重写doGet方法,然后如下
可以看到,我们就这么简单的实现了我们这两个方法
getRemoteHost()
如果使用localhost或者172.0.0.1访问的话返回值都是127.0.0.1,如果用的是真是IP则返回真实IP
getHeader()
获取请求头信息我们需要传入参数,参数即为请求头信息里面的值名,值名即为下图红笔选圈着的那些东西,当然这里只是一个例子,这里圈着的并不是所有的值名
下图我们查看User-Agent的值
getMethod()
如下图
getParameter()
语法:
HttpServletRequest对象.getParameter("参数名")
参数名就是HTML标签中的name属性
我们先写一个类用于接收数据:
然后配置一下他的地址
我们这里设置他的访问地址为/hello2
然后我们这里写一个表单,用于发送数据:
注意我们的action的设置,后面两个是/项目名/访问地址
然后我们重启一下我们的程序,注意我们这里一定要重启,如果只是重新加载可能有些东西会加载不上去
然后我们点击提交让我们就可以接收到参数信息了
getParameterValues()
当我们要获取多个同参数名的参数值,我们再用getParameter()
只能获取到第一个参数的值,所以我们可以用getParameterValues()
,这个返回的是一个数组
看,我们可以定义一个数组接收这个数据,然后用Arrays.asList(数组名)
来返回数组中的值,然后输出
这一疙瘩是代码如果接受参数值的不是中文,那么用在doGet和doPost请求里面都是没问题的,但是如果有中文那么用在Post中可能会出现问题
如下:
解决Post中的中文乱码问题
我们可以用HttpServletRequest
对象的setCharacterEncoding()
方法,来设置一下请求体的字符集,一般都设置为UTF-8
非常简单的就解决了我们Post乱码问题
注意很重要一点,这个玩意一定要放在请求参数的前面才能生效,不然可能会失效,可能还会乱码
比如,如果我们在我们设置字符集的方法前面进行获取密码参数可以看到如果我们在获取参数之后才设置字符集的话,会导致所有设置的字符集失效