Tomcat与JavaWeb开发技术详解(第3版)_Ch5_P198实验:请求转发

12.实验题:编写三个Servlet:Servlet1、Servlet2和Servlet3。Servlet1把请求转发给Servlet2,Servlet2再把请求转发给Servlet3。这三个Servlet的作用如下:

(1)Servlet1:读取请求参数num1和num2,检查这两个参数是否为null,或者无法转为数字,如果无法转为数字, 就向客户端返回错误信息;否则就把num1和num2存放在请求范围内,再把请求转发给Servlet2。

(2)Servlet2:计算num1和num2相加的和。把和存放在请求范围内,再把请求转发给Servlet3。

(3)Servlet3:向客户端返回由Servlet2计算出的和。

通过浏览器分别访问一下URL:

http://localhost:8080/helloapp2/servlet1

http://localhost:8080/helloapp2/servlet1?num1=one&num2=100

http://localhost:8080/helloapp2/servlet1?num1=200&num2=100

对于第一个URL,浏览器会得到由servlet1返回的信息:“Please input num1 and num2!”。

对于第二个URL,浏览器会得到由servlet1返回的信息:“The num1 and num2 must be numeric!”。

对于第三个URL,浏览器会得到由servlet3返回的信息:“200+100=300”。

Codes:

(1)Servlet1:

package U5work;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.*;
import javax.servlet.GenericServlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
    Servlet1:读取请求参数num1和num2,检查这两个参数是否为null,或者无法转为数字,如果无法转为数字,
    就向客户端返回错误信息;否则就把num1和num2存放在请求范围内,再把请求转发给Servlet2
*/

public class Servlet1 extends HttpServlet{
    
    
    public boolean isNumeric(String str){
        for(int i=0;i<str.length();i++) {    
            if(!Character.isDigit(str.charAt(i))) {
                return false;
            }
        }
        return true;
    }
    
    public void service(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException{
            
        //读取2个请求参数
        String snum1=request.getParameter("num1");
        String snum2=request.getParameter("num2");
        String message=null;
        if(snum1==null || snum2==null) {
            message="Please input num1 and num2!";
        }else if( !isNumeric(snum1) || !isNumeric(snum2)  ){
            message="The num1 and num2 must be numeric!";
        }else {
            message="ok";
            request.setAttribute("num1",Integer.parseInt(snum1));
            request.setAttribute("num2",Integer.parseInt(snum2));
        }
        
        //在request对象中添加msg属性
        request.setAttribute("msg", message);
        
        //把请求转发给Servlet2
        ServletContext context=getServletContext();
        RequestDispatcher dispatcher=
                context.getRequestDispatcher("/servlet2");
        
        
        PrintWriter out=response.getWriter();
        out.println("Output from Servlet1 ,"+" before forwarding request.");
        
        System.out.println("Output from Servlet1 ,"+" before forwarding request.");
        
        dispatcher.forward(request, response);

        out.println("Output from Servlet1 ,"+" after forwarding request.");
        
        System.out.println("Output from Servlet1 ,"+" after forwarding request.");
        
    }
}

(2)Serlvet2:

package U5work;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/*
 * 
 * Servlet2:计算num1和num2相加的和。把和存放在请求范围内,再把请求转发给Servlet3
 */

public class Servlet2 extends HttpServlet {
    
    public void service(HttpServletRequest request,HttpServletResponse response)
            throws ServletException,IOException{
    
        //读取Servlet1存放在请求范围内的消息
        String message=(String)request.getAttribute("msg");
        if(message.equals("ok")) {
            int num1=(int)request.getAttribute("num1");
            int num2=(int)request.getAttribute("num2");
            int sum=num1+num2;
            message=num1+"+"+num2+"="+sum;
        }
        //在request对象中添加msg2属性        
        request.setAttribute("msg2", message);
        
        
        //把请求转发给Servlet3
        ServletContext context=getServletContext();
        RequestDispatcher dispatcher=context.getRequestDispatcher("/servlet3");
        
        PrintWriter out=response.getWriter();
        
        out.println("Output from Servlet2 , before forwarding request.");
        System.out.println("Output from Servlet2 , before forwarding request.");
        
        dispatcher.forward(request,response);
        
        out.println("Output from Servlet2 , after forwarding request.");
        System.out.println("Output from Servlet2 , after forwarding request.");
    }
    
}

 

(3)Servlet3:

package U5work;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Servlet3 extends HttpServlet{

    public void service(HttpServletRequest request,HttpServletResponse response)
        throws ServletException,IOException{
        
        //读取Servlet2存放在请求范围内的消息
        String message=(String)request.getAttribute("msg2");
        PrintWriter out=response.getWriter();
        
        out.println(message);
        out.close();
    }
    
}
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值