《Java EE指南》04-04:Servlet获取请求数据

在这里插入图片描述


《JavaEE实战指南》
04-04:Servlet获取请求数据

内容导航

  • 前言

前言

有了JSP之后,Servlet不再用来输出动态页面。然而目前还没有学习到JSP,我们暂时还是使用Servlet输出一些动态页面 ,作为测试使用。

Servlet最常见的作用就是获得请求中的数据。

HTTP协议中学习过请求和响应的概念,也就是说,HTTP协议会自动将请求的一些数据传输到服务器端,我们需要学习的就是如何使用Servlet API去获得需要的数据进行编程。

1、理解请求对象

Servlet类的doXXX方法,都有两个参数,分别HttpServletRequest,HttpServletResponse,分别称为请求和响应。注意,它们都是接口,具体实现类是容器实现的,可以用代码验证
在FirstServlet的doGet方法中,添加代码:


System.out.println(request);
System.out.println(response);

通过地址栏访问该Servlet,将调用doGet方法,在控制台可见输出:


org.apache.catalina.connector.RequestFacade@101f23d
org.apache.catalina.connector.ResponseFacade@c68663
   

通过类名可以验证:在运行时,Tomcat创建了具体的请求和响应对象,传递给了doXXX方法。

通过查看请求和响应的具体类型,进一步理解容器的作用。
其实组件都是一些规范,也就是定义了接口,而具体实现类都是容器实现的。
也就是,当我们访问Servlet时,Tomcat创建了请求对象,响应对象,传递给了doXXX方法。

2、HttpServletRequst接口

请求的具体实现类是容器实现的,但是类型是统一的接口,即HttpServletRequest,因此,请求对象可以调用该接口及其父接口中的所有方法,可以查询API帮助文档。

HttpServletRequest接口中获得请求中数据的方法。
获得请求参数的方法:

  • getParameter:通过name获得某请求参数的value
  • getParameterValues:通过name获得某请求参数的所有value,一般用于checkbox,或多选select等
  • 获得请求头的方法(后续学习)
  • 获得请求属性的方法(后续学习)
  • 获得其他信息的方法:如getRemoteAddr获得客户端的IP地址

3、获得单值请求参数

修改FirstServlet中的doPost方法,获得用户名和密码,并输出到页面


String username=request.getParameter("username");
String pwd=request.getParameter("pwd");
out.println("用户名: "+username);
out.println(" 密码:"+pwd);

访问index.jsp,输入用户名和密码,点击登录。

4、获得多值请求参数

修改index.jsp中的表单,加入checkbox,checkbox的name都是style


登录设置:<br>
           <input type="checkbox" name="style" value="隐身">隐身登录<br>
           <input type="checkbox" name="style" value="音乐">音乐提醒<br>
           <input type="checkbox" name="style" value="短信">短信提示<br>

在FirstServlet中,加入代码获得名字为style的请求参数,由于可能多选,有多个style值,所以应该使用请求接口中的getParameterValues方法,返回字符串型数组:


String[] styles=request.getParameterValues("style");
for(String s:styles){
out.println(" 登录方式:"+s+"<br>");
}

4、总结

HttpServletRequest接口中有两个获取请求参数的方法:

  • getParameter:返回一个String值,获得单值的请求参数。
  • getParameterValue:返回一个String数组,获得多值的请求参数。

注意:这两个方法返回都是字符串,实际编程中,常常需要进行类型转换,例如:使用Integer.parseInt转换成int,Double.parseDouble转换成double,Timestamp.valueOf转换成Timestamp等。


好好学习,天天向上!继续下一章…👏👏👏👏👏👏


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AT阿宝哥

给作者送颗薄荷糖吧!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值