12.编写inputCircle. jsp,页面提供form表单,该form表单提供两个text 文本框,用用户输人圆的圆心(例如(12,34))和圆的半径,用户单击submit提交键请求名drawCircle的servlet.编写创建servlet的Servler类,该类创建的servlet可以绘制圆。
一、使用form表单实现inputCircle的jsp页面:
inputCircle. jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>inputCircle</title>
</head>
<body>
<form action="drawCircle" method="post" id=textStyle>
请输入圆心位置:
<input type="text" id=textStyle name="yuanxing" value="(250,250)" >
(格式用xx,xx)
<br>请输入圆的半径:
<input type="text" id=textStyle name="banjing" value="200">
<br>
<input type="submit" id=textStyle value="提交">
</form>
</body>
</html>
1.提交的名称写类的名字,提交方式使用get和post都行
<form action="drawCircle" method="post" id=textStyle>
2.记住自己取的名字,后面用的上,并且设置初始值,使用的时候就不用再打
<input type="text" id=textStyle name="yuanxing" value="(250,250)" >
(格式用xx,xx)
<br>请输入圆的半径:
<input type="text" id=textStyle name="banjing" value="200">
<br>
<input type="submit" id=textStyle value="提交">
二、在Java Resource下的src中创建包 名为:moon.sun;包下创建drawCircle的servlet类
drawCircle.java
package moon.sun;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class drawCircle
*/
@WebServlet("/drawCircle")
public class drawCircle extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public drawCircle() {
super();
// TODO Auto-generated constructor stub
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("image/jpeg");
String yuanxing=request.getParameter("yuanxing");
String banjing=request.getParameter("banjing");
if(yuanxing == null||yuanxing.length()==0 ||banjing == null||banjing.length()==0){
response.sendRedirect("inputCircle.jsp");//重定向到输入数据页面。
return;
}
int i=0;
Pattern pattern; //模式对象。
Matcher matcher; //匹配对象。
String regex="-?[0-9][0-9]*[.]?[0-9]*" ;//匹配整数的正则表达式。
pattern = Pattern.compile(regex); //初试化模式对象。
matcher = pattern.matcher(yuanxing); //初始化匹配对象,用于检索input。
String[] Number=new String[2];
while(matcher.find()) {
String str = matcher.group();
Number[i]=str;
i++;
}
double x=Double.parseDouble(Number[0]);
double y=Double.parseDouble(Number[1]);
Double r=Double.parseDouble(banjing);
draw(r,x,y,response);
}
void draw(double r,double x,double y,HttpServletResponse response){
int width=800, height=600;
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;
Ellipse2D ellipse=new Ellipse2D.Double(x-r,y-r,2*r,2*r);
g_2d.setColor(Color.blue);
g_2d.draw(ellipse);
try{
OutputStream outClient = response.getOutputStream();
boolean boo =ImageIO.write(image, "jpeg", outClient);
}
catch(Exception exp){}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
1.直接在eclipse新建servlet类,勾选doget与dopost方法,方法写在get与post里面都行因为他们互相调用
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
2.代码大概可以分为三部分一是初始化对象,与jsp页面建立联系;二是使用正则表达式与数组将圆心位置赋予给x,y;三就是画圆方法
初始化对象,判断是否为空
response.setContentType("image/jpeg");
String yuanxing=request.getParameter("yuanxing");
String banjing=request.getParameter("banjing");
if(yuanxing == null||yuanxing.length()==0 ||banjing == null||banjing.length()==0){
response.sendRedirect("inputCircle.jsp");//重定向到输入数据页面。
return;
}
赋予给x,y
int i=0;
Pattern pattern; //模式对象。
Matcher matcher; //匹配对象。
String regex="-?[0-9][0-9]*[.]?[0-9]*" ;//匹配整数的正则表达式。
pattern = Pattern.compile(regex); //初试化模式对象。
matcher = pattern.matcher(yuanxing); //初始化匹配对象,用于检索input。
String[] Number=new String[2];
while(matcher.find()) {
String str = matcher.group();
Number[i]=str;
i++;
}
double x=Double.parseDouble(Number[0]);
double y=Double.parseDouble(Number[1]);
Double r=Double.parseDouble(banjing);
draw(r,x,y,response);
画圆的方法与dopost方法是同等的,它独立出来
void draw(double r,double x,double y,HttpServletResponse response){
int width=800, height=600;
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;
Ellipse2D ellipse=new Ellipse2D.Double(x-r,y-r,2*r,2*r);
g_2d.setColor(Color.blue);
g_2d.draw(ellipse);
try{
OutputStream outClient = response.getOutputStream();
boolean boo =ImageIO.write(image, "jpeg", outClient);
}
catch(Exception exp){}
}
实现的效果图
到这里就结束了,有问题可以在评论区问我,但我不一定会,大家一起讨论学习,如果这篇对你用,请点个赞,谢谢!