【jsp+servlet实战】中Servlet中request和respose详细讲解并且运用代码详细了解方法及特点

本文详细介绍了Servlet中request和response对象的使用,包括获取请求数据、处理响应、请求转发、重定向以及处理编码问题。讲解了如何通过request对象存储和共享请求数据,以及如何利用response对象设置响应头、状态和实体内容。还提到了防止表单重复提交的重定向方法,并展示了servlet的配置和方法实现。
摘要由CSDN通过智能技术生成

Servlet中request和respose学习

Servlet中request代码:

可以结合这个案例进行综合运用。点击这里
问题:
浏览器发起请求到服务器,会遵循HTTP协议将请求数据发送给服务器。
那么服务器接受到请求的数据改怎么存储呢?不但要存,而且要保证完成性。
解决:
使用对象进行存储,服务器每接受一个请求,就创建一个对象专门的存
储此次请求的请求数据。
实现:
request 对象
解释:
服务器接收到浏览器的请求后,会创建一个 Request 对象,对象中
存储了此次请求相关的请求数据。服务器在调用 Servlet 时会将创建的
Request 对象作为实参传递给 Servlet 的方法,比如:service 方法。
使用:
获取请求头数据
获取请求行数据
获取用户数据Response 对象:
问题:
在使用 Request 对象获取了请求数据并进行处理后,处理的结果如何显
示到浏览器中呢?
解决:
使用 Response 对象
解释:
服务器在调用指定的 Servlet 进行请求处理的时候,会给 Servlet 的方
法传递两个实参 request 和 response。其中 request 中封存了请求相关的
请求数据,而 response 则是用来进行响应的一个对象。
使用:
设置响应头
设置响应编码格式设置响应实体
请求乱码问题解决:
使用 String 进行重新编码:
uname=new String(uname.getBytes(“iso8859-1”),“utf-8”);
Get 方式请求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);
在 tomcat 服务器目录下的 conf 文件下找到 server.xml 文件,打开进
行如下配置:
Post 方式请求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);
流程总结:
Servlet 的使用流程:
设置请求编码格式
设置响应编码格式
获取请求信息
处理请求信息
响应处理结果
数据流转流程:
浏览器------>服务器------->数据库
浏览器<------服务器<-------数据库请求转发:
问题:
服务器在接收到浏览器的请求后,仅仅使用一个
Servlet 进行请求处理,会造成不同的 Servlet 逻辑代码
冗余,Servlet 的职责不明确。
解决:
使用请求转发。
特点:
一次请求
地址栏信息不改变。
Request 对象作用域
问题:使用请求转发后,不同的 Servlet 之间怎么进行数据的共享
呢?或者说数据怎么从一个 servlet 流转给另外一个 Servlet 呢?
解决:使用 request 对象的作用域
使用:
request.setAttribute(object name,Object value);
request.getAttribute(Object obj)
作用:解决了一次请求内的不同 Servlet 的数据(请求数据+其他数
据)共享问题。作用域:基于请求转发,一次请求中的所有 Servlet 共享。
注意:
使用 Request 对象进行数据流转,数据只在一次请求内有效。
特点:
服务器创建
每次请求都会创建
生命周期一次请求
重定向
问题:
如果当前的请求,Servlet 无法进行处理怎么办?
如果使用请求转发,造成表单数据重复提交怎么办?
解决:
使用重定向
使用:
response.sendRedirect(“路径”). 本地路径为:uri
网络路径为:定向资源的 URL 信息
特点:
两次请求
浏览器地址栏信息改变
避免表单重复提

在这里插入图片描述

注意:
 * 				如果要获取的请求数据不存在,不会报错,返回null*
 * 
 * 		注意:
 * 			request对象由tomcat服务器创建,并作为实参传递给处理请求的servlet的service方法。*
public class RequestServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//获取请求头数据
				//获取请求方式
					String method = req.getMethod();
					System.out.println(method);
				//获取请求URL
					StringBuffer url=req.getRequestURL();
					System.out.println(url);
					//获取URI
					String uri=req.getRequestURI();
					System.out.println(uri);
				//获取协议
					String h=req.getScheme();
					System.out.println(h);
		//获取请求行数据
					//获取指定的请求行信息
					String value=req.getHeader("aaa");
					System.out.println(value);
					//获取所有的请求行的键的枚举
					Enumeration e = req.getHeaderNames();
					while(e.hasMoreElements()){
						String name=(String) e.nextElement();
						String value2=req.getHeader(name);
						System.out.println(name+":"+value2);
					}
		//获取用户数据
					String name=req.getParameter("uname");
					String pwd=req.getParameter("pwd");
					System.out.println(name+":"+pwd);
					//String fav=req.getParameter("fav");
					String[] favs=req.getParameterValues("fav");
					if(favs!=null){
						for(String fav:favs){
							System.out.println(fav);
						}
					}
					//获取所有的用户请求数据的键的枚举集合---req.getParameterNames()	
	}

servlet中的response方法

在这里插入图片描述

作用:
 * 			用来响应数据到浏览器的一个对象
 * 		使用:
 * 			设置响应头
 * 				setHeader(String name,String value);//在响应头中添加响应信息,但是同键会覆盖
 * 				addHeader(String name,String value);//在响应头中添加响应信息,但是不会覆盖。
 * 			设置响应状态
 * 				sendError(int num,String msg);//自定义响应状态码。
 * 			设置响应实体
 * 				resp.getWrite().write(String str);//响应具体的数据给浏览器
 * 		设置响应编码格式:
 * 				resp.setContentType("text/html;charset=utf-8");
 * 		总结:
 * 			service请求处理代码流程:
 * 				设置响应编码格式
 * 				获取请求数据
 * 				处理请求数据
 * 					数据库操作(MVC思想)	
 * 				响应处理结果

前端实现提交表单方法

 <form action="method" method="get">

servlet中的method方法

*service可以处理get/post方式的请求,如果servlet中有Service方法,会优先调用service方法对请求进行处理*
*实现呢要继承httpservlet并且覆盖service方法让服务器识别你能够处理请求的方法*


public class ServletMethod extends HttpServlet {
	
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		int i=5/0;
		System.out.println("我是service");
		super.service(req, resp);
		
	}
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("我是doGet方法");
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("我是doPost方法");
	}	
}

在这里插入图片描述

servlet实现的配置方法

<servlet>
 	<servlet-name>my</servlet-name>
 	<servlet-class>com.bjsxt.servlet.MyServlet</servlet-class>
 </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ServletLife</servlet-name>
    <servlet-class>com.bjsxt.servlet.ServletLife</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ServletMethod</servlet-name>
    <servlet-class>com.bjsxt.servlet.ServletMethod</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>RequestServlet</servlet-name>
    <servlet-class>com.bjsxt.servlet.RequestServlet</servlet-class>
  </servlet>
  <servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>ResponseServlet</servlet-name>
    <servlet-class>com.bjsxt.servlet.ResponseServlet</servlet-class>
  </servlet>
 <servlet-mapping>
 	<servlet-name>my</servlet-name>
 	<url-pattern>/my</url-pattern>
 </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ServletLife</servlet-name>
    <url-pattern>/life</url-pattern>  //这个映射相对路径可以在编辑器里面进行设置
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ServletMethod</servlet-name>
    <url-pattern>/method</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>RequestServlet</servlet-name>
    <url-pattern>/req</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>ResponseServlet</servlet-name>
    <url-pattern>/resp</url-pattern>
  </servlet-mapping>

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿超程序

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值