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" %>
		<style>
			#tom{
			font-family:宋体;font-size:26;color:blue 
		}
		</style>
		<%
		String s ="(25,230)(210,24)(410,240)(225,425)";
		%>
<HTML>
	<body bgcolor=#ffccff>
		<p id=tom>
		<form action="drawPolygon" id= tom method=post>
		输入多边形的顶点,格式是(m,n)<br>m,n为整数 0<=m<=800,0<=n<=600<br>
		<textArea name="polygonVertex" id =tom rows=5 cols=30 >
		<%= s %>
		</textArea>
		<br><input type=submit id=tom value="提交"/>
		</form>
		</p>
	</body>
</HTML>

文件: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

<?xml version="1.0" encoding="utf-8"?>
<web-app>
   <servlet>
       <servlet-name>drawPolygon</servlet-name>
       <servlet-class>one.DrawPolygon_Servlet</servlet-class>
   </servlet>
   <servlet-mapping>
        <servlet-name>drawPolygon</servlet-name>
        <url-pattern>/drawPolygon</url-pattern>
   </servlet-mapping>
</web-app>

② 运行结果

2.双色球福利彩票

①实验代码

文件:ch6_2.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
	<style>
		#red{
			font-family:宋体;font-size:26;color:red 
		}
		#blue{
			font-family:宋体;font-size:26;color:blue 
		}
	</style>
<HTML>
	<body bgcolor="#ffccff">
		<form action="lottery"  method=post>
			<br>输入6个红球号码(1-33)逗号或非数字字符分隔:<br>
			<textArea name="digitRedball" id =red rows=1 cols=30 ></textArea>
			<br>输入1个蓝球号码(1-16):<br>
			<input type = text name ="digitBlueball" id = blue maxlength=2 size =2/>
			<input type=submit id = blue value="提交"/>
		</form>
	</body>
</HTML>

 文件: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("<html><body bgcolor=cyan>");
      String digitRedball = request.getParameter("digitRedball");
      String digitBlueball = request.getParameter("digitBlueball");
      if(digitRedball.length()==0 ||digitBlueball.length()==0) {
          response.sendRedirect("ch6_2.jsp");
          return;
      }
      HashSet<Integer> userRedball =  getUserDigit(digitRedball);
      HashSet<Integer> userBlueball = getUserDigit(digitBlueball);
      if(userRedball.size()!=6||userBlueball.size()!=1){
          response.sendRedirect("buyLottery.jsp");
          return;
      }
      HashSet<Integer> drawLotteryRedball = drawLottery(6,33);
      HashSet <Integer> drawLotteryBlueball = drawLottery(1,16);
      out.print("<h1>摇奖出的红球<br>"+drawLotteryRedball.toString()+"<br>");
      out.print("摇奖出的蓝球"+drawLotteryBlueball.toString()+"</h1>");
      drawLotteryRedball.removeAll(userRedball);
      drawLotteryBlueball.removeAll(userBlueball);
      int leftRedball = drawLotteryRedball.size();
      int leftBlueball = drawLotteryBlueball.size();
      if(leftRedball == 0&&leftBlueball == 0){ 
          out.println("<h1>头奖</h1>");
      }
      else if(leftRedball == 0&&leftBlueball == 1){
          out.println("<h1>二等奖</h1>");
      }
      else if(leftRedball == 1&&leftBlueball == 0){
          out.println("<h1>三等奖</h1>");
      }
      else{
          out.println("<h1>没中奖</h1>");
      }
      out.print("<h1>用户买的红球<br>"+userRedball.toString()+"<br>");
      out.print("用户买的蓝球"+userBlueball.toString()+"</h1>");
   } 
   public HashSet<Integer> getUserDigit(String input){
      HashSet<Integer> set = new HashSet<Integer>();
      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<Integer> drawLottery(int count,int allNumber){ 
        LinkedList<Integer> saveNumber = new LinkedList<Integer>();
        HashSet<Integer> set = new HashSet<Integer>();
        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

 <servlet>
       <servlet-name>lottery</servlet-name>
       <servlet-class>two.Lottery_Servlet</servlet-class>
   </servlet>
<servlet-mapping>
        <servlet-name>lottery</servlet-name>
        <url-pattern>/lottery</url-pattern>
   </servlet-mapping>

②运行结果

3.分析整数

①实验代码

文件:ch6_3.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %>
		<style>
			#tom{
				font-family:宋体;font-size:26;color:blue; 
			}
		</style>
<HTML>
	<body bgcolor=#ffccff>
		<p id=tom>
			<form action="handleForward" id =tom  method=post>
				<br>输入整数,用逗号或非数字字符分隔:<br>
				<textArea name="number" id =tom rows=3 cols=32 ></textArea><br>
				<input type=submit name = "submit" id =tom value="提交(看personOne的分析)"/><br>
				<input type=submit name = "submit" id=tom  value="提交(看personTwo的分析)"/>
			</form>
		</p>
	</body>
</HTML>

 文件: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("<html><body><h1>"+backMess+"</body></html>");
   } 
   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("<br>偶数:");
      StringBuffer oddNumbers  = new StringBuffer("<br>奇数:");
      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("<html><body><h1>"+backMess+"</body></html>");
   } 
   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的倍数:<br>");
      StringBuffer numbersOne = new StringBuffer("<br>除以3余1:<br>");
      StringBuffer numbersTwo = new StringBuffer("<br>除以3余2:<br>");
      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

   <servlet>
       <servlet-name>handleForward</servlet-name>
       <servlet-class>three.HandleForward_Servlet</servlet-class>
   </servlet>
   <servlet-mapping>
        <servlet-name>handleForward</servlet-name>
        <url-pattern>/handleForward</url-pattern>
   </servlet-mapping>
    <servlet>
       <servlet-name>personOne</servlet-name>
       <servlet-class>three.PersonOne_Servlet</servlet-class>
   </servlet>
   <servlet-mapping>
        <servlet-name>personOne</servlet-name>
        <url-pattern>/personOne</url-pattern>
   </servlet-mapping>
    <servlet>
       <servlet-name>personTwo</servlet-name>
       <servlet-class>three.PersonTwo_Servlet</servlet-class>
   </servlet>
   <servlet-mapping>
        <servlet-name>personTwo</servlet-name>
        <url-pattern>/personTwo</url-pattern>
   </servlet-mapping>
</web-app>

②运行结果

四、实验总结

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

  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孙同学1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值