servlet——09请求转发和res作用域

请求转发

作用

实现多个servlet联动操作处理请求,这样避免代码冗余,让servlet的职责更加明确。(servlet由服务器进行创建,由服务器进行调用)

使用

req.getRequestDispatcher(“要转发的地址”).forward(req, resp);
地址:相对路径,直接书写servlet的别名即可

特点

一次请求,浏览器地址栏信息不改变
注:
请求转发后直接return结束即可

代码实现

package com.youdian.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.youdian.pojo.User;
import com.youdian.service.LoginService;
import com.youdian.service.impl.LoginServiceImpl;
public class LoginServlet extends HttpServlet {
	
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		//设置请求编码格式:
			req.setCharacterEncoding("utf-8");
		//设置响应编码格式
			resp.setContentType("text/html;charset=utf-8");
		//获取请求信息
			String uname=req.getParameter("uname");
			//uname=new String(uname.getBytes("iso8859-1"),"utf-8");
			//使用String进行数据重新编码
			String pwd=req.getParameter("pwd");
			System.out.println(uname+":"+pwd);
		//处理请求信息
			//获取业务层对象
			LoginService ls=new LoginServiceImpl();
			User u=ls.checkLoginService(uname, pwd);
			//检验 用户名密码是否在数据库存在
			System.out.println(u);
		//响应处理结果
			if(u!=null){
				resp.getWriter().write("登陆成功");
			}else{
//				resp.getWriter().write("<html>");
//				resp.getWriter().write("<head>");
//				resp.getWriter().write("</head>");
//				resp.getWriter().write("<body>");
//				
//				resp.getWriter().write("<form action='login' method='get'>");
//				resp.getWriter().write("用户名:<input type='text' name='uname' value='' /><br/>");
//				resp.getWriter().write("密码:<input type='password' name='pwd' value='' /><br/>");
//				resp.getWriter().write("<input type='submit'   value='登陆' /><br/>");
//
//				resp.getWriter().write("</form>");
//				resp.getWriter().write("</body>");
//				resp.getWriter().write("</html>");
				//请求转发
				req.getRequestDispatcher("page").forward(req, resp);
				return ;
			}
				
	}		  
}

Request 对象作用域

request 的作用域

一次请求内的servlet共享;
使用请求转发后,不同的 Servlet 之间通过res对象进行数据的共享,数据从一个 servlet 流转给另外一个 Servlet

使用

request.setAttribute(objectname,Objectvalue);
request.getAttribute(Objectobj)
作用:解决了一次请求内的不同 Servlet 的数据(请求数据+其他数据)共享问题

//使用request对象实现不同servlet数据流转
				req.setAttribute("str", "用户名或密码错误");
				//请求转发
				req.getRequestDispatcher("page").forward(req, resp);
				return ;

第二次数据流转到:

//获取request作用域数据
				String str=(String) req.getAttribute("str")==null?"":(String) req.getAttribute("str");
								
resp.getWriter().write("<font color='red' size='20px'>"+str+"</font>");
				

特点

  1. 服务器创建
  2. 每次请求都会创建
  3. 生命周期一次请求
    注:
    使用 Request 对象进行数据流转,数据只在一次请求内有效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值