JSP实用教程实验六servlet的应用

实验六  servlet的应用

一、实验目的

1. servlet的部署、创建、运行。

2. servlet的各种方法,主要service、doGet、doPost方法。

3. 重定向与转发。

4. 掌握servlet创建、部署,理解servlet运行原理,掌握service、doGet、doPost方法的应用,会用JSP表单调用servlet。

二、实验内容

1、教材6.8.1节 绘制多边形数。

2、教材6.8.2节 双色球福利彩票。

3、教材6.8.3节 分析整数。

三、实验步骤

1.绘制多边形数

① 实验代码

文件:ch6_1.jsp

<%@ page contentType="text/html" %><%@ page pageEncoding = "utf-8" %><%
		String s ="(25,230)(210,24)(410,240)(225,425)";
		%>

输入多边形的顶点,格式是(m,n)
m,n为整数 0<=m<=800,0<=n<=600

文件:DrawPolygon_Servlet.java

package one;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.image.BufferedImage;
import java.awt.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.awt.geom.*; 
import javax.imageio.ImageIO;
public class DrawPolygon_Servlet extends HttpServlet{
   HttpServletRequest request;
   HttpServletResponse response;
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void service(HttpServletRequest request,HttpServletResponse response)
                       throws IOException{
      request.setCharacterEncoding("utf-8");
      String polygonVertex = request.getParameter("polygonVertex");
      if(polygonVertex == null||polygonVertex.length()==0){
          response.sendRedirect("ch6_1.jsp");
          return;
      }
      response.setContentType("image/jpeg");
      Polygon  polygon = getPolygon(polygonVertex);
      BufferedImage image = getImage(polygon);
      OutputStream outClient= response.getOutputStream();
      boolean boo =ImageIO.write(image,"jpeg",outClient);
   }
   Polygon getPolygon(String polygonVertex){ 
      Polygon polygon = new Polygon();
      Pattern pattern;
      Matcher matcher;
      String regex="(\\d+[,, ]+\\d+)" ;
      pattern = Pattern.compile(regex);
      matcher = pattern.matcher(polygonVertex);
      while(matcher.find()) {
         String str = matcher.group(); 
         String []vertex = str.split("[( ),, ]+");
         polygon.addPoint(Integer.parseInt(vertex[0]),Integer.parseInt(vertex[1]));
      } 
      return polygon;
   }
   BufferedImage getImage(Shape shape){
        int width=1000, height=800;
        BufferedImage image = 
        new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.fillRect(0, 0, width, height);
        Graphics2D g_2d=(Graphics2D)g; 
        g_2d.setColor(Color.blue);
        g_2d.draw(shape); 
        return image;
   }
}

文件:web.xml

  drawPolygon one.DrawPolygon_Servlet   drawPolygon /drawPolygon 

② 运行结果

2.双色球福利彩票

①实验代码

文件:ch6_2.jsp

<%@ page contentType="text/html" %><%@ page pageEncoding = "utf-8" %>

输入6个红球号码(1-33)逗号或非数字字符分隔:

输入1个蓝球号码(1-16):

 文件:Lottery_Servlet.java

package two;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.*;
public class Lottery_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void  service(HttpServletRequest request,HttpServletResponse response)
                       throws IOException{
      request.setCharacterEncoding("utf-8");
      response.setContentType("text/html;charset=utf-8");
      PrintWriter out=response.getWriter();
      out.println("");
      String digitRedball = request.getParameter("digitRedball");
      String digitBlueball = request.getParameter("digitBlueball");
      if(digitRedball.length()==0 ||digitBlueball.length()==0) {
          response.sendRedirect("ch6_2.jsp");
          return;
      }
      HashSet userRedball =  getUserDigit(digitRedball);
      HashSet userBlueball = getUserDigit(digitBlueball);
      if(userRedball.size()!=6||userBlueball.size()!=1){
          response.sendRedirect("buyLottery.jsp");
          return;
      }
      HashSet drawLotteryRedball = drawLottery(6,33);
      HashSet  drawLotteryBlueball = drawLottery(1,16);
      out.print("

摇奖出的红球
"+drawLotteryRedball.toString()+"
"); out.print("摇奖出的蓝球"+drawLotteryBlueball.toString()+"

"); drawLotteryRedball.removeAll(userRedball); drawLotteryBlueball.removeAll(userBlueball); int leftRedball = drawLotteryRedball.size(); int leftBlueball = drawLotteryBlueball.size(); if(leftRedball == 0&&leftBlueball == 0){ out.println("

头奖

"); } else if(leftRedball == 0&&leftBlueball == 1){ out.println("

二等奖

"); } else if(leftRedball == 1&&leftBlueball == 0){ out.println("

三等奖

"); } else{ out.println("

没中奖

"); } out.print("

用户买的红球
"+userRedball.toString()+"
"); out.print("用户买的蓝球"+userBlueball.toString()+"

"); } public HashSet getUserDigit(String input){ HashSet set = new HashSet(); Pattern pattern; Matcher matcher; String regex="[0-9][0-9]*" ; pattern = Pattern.compile(regex); matcher = pattern.matcher(input); double sum = 0; while(matcher.find()) { String str = matcher.group(); set.add(Integer.parseInt(str)); } return set; } public HashSet drawLottery(int count,int allNumber){ LinkedList saveNumber = new LinkedList(); HashSet set = new HashSet(); for(int i=1;i<=allNumber;i++) { saveNumber.add(i); } Random random = new Random(); while( count > 0) { int index = random.nextInt(saveNumber.size()); int number = saveNumber.remove(index); count--; set.add(number); } return set; } }

文件:web.xml

  lottery two.Lottery_Servlet  lottery /lottery 

②运行结果

3.分析整数

①实验代码

文件:ch6_3.jsp

<%@ page contentType="text/html" %><%@ page pageEncoding = "utf-8" %>


输入整数,用逗号或非数字字符分隔:


 文件:HandleForward.java

package three;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HandleForward_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void  service(HttpServletRequest request,HttpServletResponse response) 
                       throws ServletException,IOException{
      RequestDispatcher dispatcher = null; 
      request.setCharacterEncoding("utf-8");
      response.setContentType("text/html;charset=utf-8");
      String mess = request.getParameter("submit");
      String integers = request.getParameter("number");
      if(integers == null ||integers.length()==0) {
          response.sendRedirect("ch6_3.jsp");
          return;
      }
      if(mess.contains("personOne")) {
          dispatcher = request.getRequestDispatcher("personOne");
          dispatcher.forward(request,response);
      }
      else if(mess.contains("personTwo")){
          dispatcher = request.getRequestDispatcher("personTwo");
          dispatcher.forward(request,response);
      }
   } 
} 

文件:PersonOne_Servlet.java

package three;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class PersonOne_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void  service(HttpServletRequest request,HttpServletResponse response)
                       throws ServletException,IOException{
      request.setCharacterEncoding("utf-8");
      response.setContentType("text/html;charset=utf-8");
      PrintWriter out=response.getWriter();
      String integers = request.getParameter("number");
      String backMess = analysisIntegers(integers); 
      out.print("

"+backMess+"
"); } public String analysisIntegers(String input){ Pattern pattern; Matcher matcher; String regex="-?[0-9][0-9]*" ; pattern = Pattern.compile(regex); matcher = pattern.matcher(input); StringBuffer evenNumbers = new StringBuffer("
偶数:"); StringBuffer oddNumbers = new StringBuffer("
奇数:"); while(matcher.find()) { String str = matcher.group(); if(Integer.parseInt(str)%2==0){ evenNumbers.append(str+","); } else { oddNumbers.append(str+","); } } StringBuffer buffer = evenNumbers.append(oddNumbers); return new String(buffer); } }

文件:PersonTwo_Servlet.java

package three;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class PersonTwo_Servlet extends HttpServlet{
   public void init(ServletConfig config) throws ServletException{
      super.init(config);
   }
   public void  service(HttpServletRequest request,HttpServletResponse response)
                       throws ServletException,IOException{
      request.setCharacterEncoding("utf-8");
      response.setContentType("text/html;charset=utf-8");
      PrintWriter out=response.getWriter();
      String integers = request.getParameter("number");
      String backMess = analysisIntegers(integers); 
      out.print("

"+backMess+"
"); } public String analysisIntegers(String input){ Pattern pattern; Matcher matcher; String regex="-?[0-9][0-9]*" ; pattern = Pattern.compile(regex); matcher = pattern.matcher(input); StringBuffer numbersZero = new StringBuffer("3的倍数:
"); StringBuffer numbersOne = new StringBuffer("
除以3余1:
"); StringBuffer numbersTwo = new StringBuffer("
除以3余2:
"); while(matcher.find()) { String str = matcher.group(); if(Integer.parseInt(str)%3==0){ numbersZero.append(str+","); } else if(Integer.parseInt(str)%3==1){ numbersOne.append(str+","); } else if(Integer.parseInt(str)%3==2){ numbersTwo.append(str+","); } } StringBuffer buffer = numbersZero.append(numbersOne.append(numbersTwo)); return new String(buffer); } }

文件:web.xml

  handleForward three.HandleForward_Servlet   handleForward /handleForward   personOne three.PersonOne_Servlet   personOne /personOne   personTwo three.PersonTwo_Servlet   personTwo /personTwo 

②运行结果

四、实验总结

本次实验使用from表单对servlet的请求操作以及一些有关servlet的相关操作处理,掌握servlet创建、部署。使用了重定向对页面的有关操作。其中实验中把三个实验的web.xml文件写在了一个web.xml文件中。