七、获取request对象相关值、AServlet执行完后自动跳转到BServlet
1、获取request范围中的内容,通过AServlet跳转到BServlet

|实例|
index.html内容:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="/prj-servlet07/testRequst" >测试Request</a><br>
<a href="/prj-servlet07/a">AServlet</a><br>
<a href="/prj-servlet07/b">BServlet</a>
</body>
</html>
web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>prj-servlet07</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>testRequst</servlet-name>
<servlet-class>com.bj.TestRequestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>testRequst</servlet-name>
<url-pattern>/testRequst</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AServlet</servlet-name>
<servlet-class>com.bj.AServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AServlet</servlet-name>
<url-pattern>/a</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>BServlet</servlet-name>
<servlet-class>com.bj.BServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BServlet</servlet-name>
<url-pattern>/b</url-pattern>
</servlet-mapping>
</web-app>
AServlet文件:
package com.bj;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import entity.User;
public class AServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//创建user对象
User user=new User();
user.setUserName("zhangjunbo");
user.setUserCode("111111");
//将user对象存储到request范围中
request.setAttribute("userObj",user);
//从request范围中取出数据
Object obj=request.getAttribute("userObj");
response.getWriter().print(obj);
/*跳转
执行完成AServlet之后,跳转到BServlet执行,将AServlet执行和BServlet执行放到同一个请求当中
必须使用转发技术 forward[转发的意思]
通过AServlet能够跳转到BServlet请求,但是在BServlet中仍然无法获取到AServlet中的对象,因为AServlet和BServlet
是两个不同的请求
*/
//1.获取请求转发器对象[以下转发器指向了BServlet]
RequestDispatcher dispatcher=request.getRequestDispatcher("/b");
//2.调用请求转发器的forward方法即可完成转发
dispatcher.forward(request, response);
}
}
BServlet内容:
package com.bj;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//从BServlet中读取AServlet中的对象是无法读出来的,因为从AServlet转发到BServlet仍然是一个同一个请求,所以ojb对象还可以获取到,
//要是通过重定向到BServlet是无法获取到AServlet中请求中的数据的,因为重定向之后是另外一个请求。
Object obj=request.getAttribute("userObj");
System.out.println("BServlet--->执行"+obj);
response.getWriter().print(obj);//在浏览器上面的显示为非空
}
}
TestRequestServlet内容:
package com.bj;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class TestRequestServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置响应的内容类型:
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
//获取上下文路径
String contextPath=req.getContextPath();
out.print("contextPath="+contextPath+"<br>");
//获取浏览器的请求方式:
String method=req.getMethod();
out.print("method="+method+"<br>");
//获取请求的uri
String requestUri=req.getRequestURI();
out.print("requestUri="+requestUri+"<br>");
//获取请求URL
String requestURL=req.getRequestURL().toString();
out.print("requestUrL="+requestURL+"<br>");
//获取Servlet的路径
String servletPath=req.getServletPath();
out.print("servletPath="+servletPath+"<br>");
//获取客户端ip地址:
String remoterAddr=req.getRemoteAddr();
out.print("remoterAddr="+remoterAddr+"<br>");
/*
remoterAddr显示在浏览器上面的值为: 0:0:0:0:0:0:0:1
该问题如何解决?
方法一:访问页面的时候不要用http://localhost:8080/...,使用http://127.0.0.1:8080/...即可
方法二:
* */
}
}

浙公网安备 33010602011771号