实验六 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文件中。