实验六 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)"; %>
文件: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" %>
文件: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; } HashSetuserRedball = 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.removeAll(userRedball); drawLotteryBlueball.removeAll(userBlueball); int leftRedball = drawLotteryRedball.size(); int leftBlueball = drawLotteryBlueball.size(); if(leftRedball == 0&&leftBlueball == 0){ out.println("
"+drawLotteryRedball.toString()+"
"); out.print("摇奖出的蓝球"+drawLotteryBlueball.toString()+"头奖
"); } else if(leftRedball == 0&&leftBlueball == 1){ out.println("二等奖
"); } else if(leftRedball == 1&&leftBlueball == 0){ out.println("三等奖
"); } else{ out.println("没中奖
"); } out.print("用户买的红球
"); } public HashSet
"+userRedball.toString()+"
"); out.print("用户买的蓝球"+userBlueball.toString()+"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文件中。