简述Servlet的Request与Response的用法

Servlet容器,request对象,response对象

概述Servlet,request对象和response对象。

1 Servlet

1.1什么是Servlet?

Servlet(全称为 Server Applet),是在服务器上运行的Java程序。
Servlet是由SUN公司提供的动态web资源开发技术。本质上是一段java程序。
和之前的Java程序不同的是,Servlet程序没有main函数,不能独立运行,必须放在服务器中(Servlet容器,比如tomcat),由服务器调用才可以执行。

(1)浏览器发送请求到服务器, 服务器负责接收请求
(2)服务器调用某一个Servlet来处理请求, (在此期间可能需要Servlet访问数据库) , 最后得出请求处理的结果
(3)将处理的结果写入JSP或者HTML中, 由服务器负责将页面响应给浏览器
因此, Servlet的作用是服务器端的一个Java程序, 负责处理请求!!

需要注意的是这段java程序无法独立运行, 必须放在Servlet容器(比如: tomcat服务器)中, 由容器调用才可以执行!
Servlet 的作用是处理请求,服务器会将接受到的请求交给Servlet处理。这个过程为:

1)客户端发送请求至服务器端;
2)服务器将请求信息交给 Servlet 处理;
3)最终处理的结果交给服务器;
4)服务器将结果响应给客户端。

总结:
(1)Servlet本质上一段java程序
(2)Servlet程序无法独立运行,必须放在服务器中,由服务器调用才可以执行!
(3)Servlet的作用是:接受请求、处理请求、将结果响应给浏览器。

1.2开发Servlet程序的步骤

1、写一个类,实现一个Servlet接口(按规范来写),并添加未实现的方法

  • 实现Servlet接口, 可以写一个类直接 implements Servlet实现
  • 也可以写一个类,继承Servlet接口的子类,比如GenericServlet或HttpServlet

(将编译后类放在WEB应用中)
2、在WEB应用web.xml文件中配置Servlet对外访问的虚拟路径
3、将WEB应用部署到虚拟主机中即可。(将Web应用和Servlet一起发布到服务器中, 启动服务器就可以访问Servlet程序了。)

  • 如果使用Eclipse创建Servlet, 在创建时会自动在web.xml中配置Servlet相关的配置信息
  • 将Eclipse和Tomcat整合之后, 也可以非常方便的将Web项目部署到服务器中.

1.3 Servlet继承关系

在这里插入图片描述
Servlet接口 – 通用的Servlet接口, 提供了一个Servlet应该具有的功能
|— GenericServlet类, 实现了Servlet接口, 并实现了其中的大部分的方法, 但是service方法没有实现, 如果继承了GenericServlet,service方法需要开发人员自己来实现
|— HttpServlet类,继承了GenericServlet, 并实现了service方法, 在service方法中, 会判断请求方式,根据不同的请求方式, 调用不同doXxx方法, 比如GET提交将会调用doGet方法, POST提交将会调用doPost方法

因此在开发中, 我们只需要写一个类(XxxServlet), 继承HttpServlet, 并覆盖其中的doGet和doPost方法, 分别来处理GET请求和POST请求即可!!

2 request对象

Request对象的三大特征:
(1)生命周期:一次请求开始时创建Request对象, 一次请求结束时销毁request对象。
(2)作用范围:一次请求范围内。
(3)主要功能: 通过请求转发+域对象实现带数据到目的地

2.1 获取请求参数

request.getParameter(String name)
– 根据请求参数的名字,获取对应的参数值
request.getParameterValues(String name)
– 根据请求参数的名字,获取该参数对应的所有值组成的数组。
代码示例:

//获取用户名
String user = request.getParameter("user");
System.out.println("user:"+user);
//获取爱好
String[] likes = request
       .getParameterValues("like");
for(String like : likes) {
    System.out.println(like);
}

**关于请求参数的乱码问题?
(1)如果请求方式是GET提交,并且tomcat服务器是8.0及以后的版本。GET提交的请求参数是没有乱码,因为服务器在接收请求行中的数据时,默认使用utf-8编码,因此不会有乱码,所以也不用处理。请求行代码如下:
/day09/RequestDemo1?user=zhangfei&like=basketball&like=football
如果请求方式是GET提交,并且tomcat服务器是8.0之前的版本(比如,tomcat6.0或者tomcat7.0), GET提交也会有乱码, 该如何处理?
可以到server.xml文件中添加一个配置:URIEncoding=”utf-8”

改完后,最后到tomcat/conf/server.xml中的对应位置,也加上这个配置。

(2)如果请求方式是POST提交,不管tomcat服务器是哪个版本,POST提交都是有乱码的。因为服务器在接收请求实体(POST通过请求实体发送参数)内容中的数据时,默认使用iso8859-1编码,因此在接收中文数据时,POST提交一定会有乱码。请求实体代码:
user=zhangfei&like=basketball&like=football
解决方式:通过一行代码通知服务器使用utf-8接收请求实体内容中的数据即可!!
request.setCharacterEncoding(“utf-8”);
注意,这行代码需要放在任何获取参数的代码之前执行,否则不会生效!!

2.2 请求转发

请求转发:当浏览器来访问服务器中的某一个资源(比如访问一个Servlet或JSP),在处理请求的过程中,当前这个资源最后将请求转发给一个其他的资源(比如是一个Servlet/jsp/html等),让其他资源来处理请求(由另外一个资源来作响应),这就是请求转发。
实现请求转发的代码:
request.getRequestDispatcher(“所转发到资源的路径”).forward(request, response);
请求转发的特点:
(1)转发前后地址栏地址不会发生变化
(2)请求转发是一次请求,一次响应
(3)转发只能是同一个Web应用内的资源互相转发, 不可以是不同的Web应用之间的资源进行转发。

2.3作为域对象使用

域对象:就是一个具有map的集合对象,能够在指定的范围内, 利用自身的map实现数据的共享
request对象上就具有一个map集合, 而且request对象也具有被访问的范围(一次请求范围内),因此request对象就是一个域对象。
该对象提供了往自身的map集合中存取数据的方法:
request.setAttribute(“String name”, Object value);
– 往request域中添加一个域属性
request.getAttribute(“String name”);
– 获取域中的属性值
request对象的三大特征:
(1)生命周期: 一次请求开始时创建Request对象, 一次请求结束时销毁request对象。
(2)作用范围: 一次请求范围内。
(3)主要功能: 通过请求转发+域对象实现带数据到目的地

请求转发和域对象经常配合着使用,实现从Servlet中带数据到JSP进行显示!!

在这里插入图片描述

3 response对象

response对象的方法:
在这里插入图片描述

3.1 向客户端发送数据

向浏览器客户端发送响应数据, 可以通过两个流进行:
response.getOutputStream() – 字节流
ServletOutputStream out = response.getOutputStream();
response.getWriter() – 字符流
PrintWriter out = response.getWriter();

通过字符流向浏览器发送数据时, 会出现中文乱码问题!解决方法如下:

/* 0.通知服务器使用utf-8发送数据给浏览器
 * 同时通知浏览器也使用utf-8接收(服务器发送过来的)数据 */
response.setContentType("text/html;charset=utf-8"); 
//1.获取字符流
PrintWriter out = response.getWriter();
out.write("你好~~~");

3.2 实现重定向

转发只能在同一个Web应用内部的两个资源之间进行跳转, 不可以是不同的Web应用或者不同的服务器中进行跳转. 重定向和请求转发都是一种资源的跳转方式
重定向:是指当用户浏览某个网址时,将其导向到另一个网址的技术。

实现重定向:(模拟登录成功后跳转到首页) 例如,在注册或登录成功后,浏览器地址栏地址将会跳转到首页。

response.sendRedirect("所重定向到资源的地址");
response.sendRedirect("/LoginServlet/index.html");

请求重定向特点:
(1)两次请求, 两次响应
(2)重定向前后地址栏地址都会发生变化。
(3)重定向可以在同一个Web应用内部的资源之间进行跳转,也可以在不同的Web应用或者不同的主机之间进行跳转

  • 5
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值