七、获取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/...即可
  方法二:

   * */
 }

}

 

posted @ 2017-02-14 09:07  爱笑的berg  阅读(244)  评论(0)    收藏  举报