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();
}
}