service方法的学习(req和resp的使用)2020-12-08

request对象

  • List item

作用:request对象中封存了当前请求的所有请求信息
使用:
获取请求头数据
req.getMethod();//获取请求方式
req.getRequestURL();//获取请求URL信息
req.getRequestURI();//获取请求URI信息
req.getScheme();//获取协议
获取请求行数据
req.getHeader(“键名”);//返回指定的请求头信息
req.getHeaderNames();//返回请求头的键名的枚举集合
获取用户数据
req.getParameter(“键名”);//返回指定的用户数据
req.getParameterValues(“键名”);//返回同键不同值的请求数据(多选),返回的数组。
req.getParameterNames()//返回所有用户请求数据的枚举集合
注意:
如果要获取的请求数据不存在,不会报错,返回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);
		//获取请求行数据
					//获取指定的请求行信息
					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()	
	}
}

设置对客户端请求进行重新编码的编码
req.setCharacterEncoding(“utf-8”);//放到最上面

Respone对象

  • List item

作用:用来响应数据到浏览器的一个对象
使用:
设置响应头
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”);

public class ResponseServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
			//获取请求信息
				//获取请求头
				//获取请求行
				//获取用户数据
			//处理请求
				
			//响应处理结果
				//设置响应头
				resp.setHeader("mouse", "two fly birds");
				resp.setHeader("mouse", "bjsxt");
				resp.addHeader("key", "thinkpad");
				resp.addHeader("key", "wollo");
				//设置响应编码格式
					//resp.setHeader("content-type", "text/html;charset=utf-8");
					//resp.setContentType("text/plain;charset=utf-8");
					//resp.setContentType("text/xml;charset=utf-8");
					resp.setContentType("text/html;charset=utf-8");
				//设置响应状态吗
					//resp.sendError(404, "this Method is not supported");
				//设置响应实体
					resp.getWriter().write("<b>今天天气真好,适合学习</b>");
				
				
	}
}

请求转发:

服务器在接收到浏览器的请求后,仅仅使用一个
Servlet 进行请求处理,会造成不同的 Servlet 逻辑代码
冗余,Servlet 的职责不明确。
特点:
一次请求
地址栏信息不改变。
Request 对象作用域
使用请求转发后,不同的 Servlet 之间怎么进行数据的共享
呢?或者说数据怎么从一个 servlet 流转给另外一个 Servlet 呢?
使用 request 对象的作用域
request.setAttribute(object name,Object value);
request.getAttribute(Object obj)
作用:解决了一次请求内的不同 Servlet 的数据(请求数据+其他数
据)共享问题。
作用域:基于请求转发,一次请求中的所有 Servlet 共享。
注意:
使用 Request 对象进行数据流转,数据只在一次请求内有效。
特点:
服务器创建
每次请求都会创建
生命周期一次请求

示例代码

req.setAttribute("error", "用户名密码不正确");//添加文字提醒
req.getRequestDispatcher("index.jsp").forward(req, resp);

重定向

问题:
如果当前的请求,Servlet 无法进行处理怎么办?
如果使用请求转发,造成表单数据重复提交怎么办?
解决:
使用重定向
使用:
response.sendRedirect(“路径”). 本地路径为:uri
网络路径为:定向资源的 URL 信息
特点:
两次请求
浏览器地址栏信息改变
避免表单重复提交

resp.sendRedirect("main.jsp");

请求乱码问题

使用 String 进行重新编码:
uname=new String(uname.getBytes(“iso8859-1”),“utf-8”);//一个属性重新编码一次
适用于get和post方法

String uname = req.getParameter("uname");//一个属性重新编码一次
uname=new String(uname.getBytes("iso8859-1"),"utf-8");

Get 方式请求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);
在 tomcat 服务器目录下的 conf 文件下找到 server.xml 文件,打开进
行如下配置:
 tomcat 服务器目录下的 conf 文件下找到 server.xml 文件

Post 方式请求:
在 service 方法中使用: req.setCharacterEncoding(“utf-8”);

Servlet 的使用流程:
设置请求编码格式
req.setCharacterEncoding(“utf-8”);
设置响应编码格式
resp.setContentType(“text/html;charset=utf-8”);
获取请求信息
req.getParameter(“键名”);
处理请求信息
req.getRequestDispatcher(“index.jsp”).forward(req, resp);
响应处理结果
resp.sendRedirect(“路径”).

数据流转流程:
浏览器------>服务器------->数据库
浏览器<------服务器<-------数据库

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值