以Java EE实现“某范围的质数查找”(servlet)

    科技2022-09-08  117

    一·新建动态Web工程

    1·创建Web工程

    2·第一次运行添加Java Web服务器

    3·一直点击Next到

    勾选“生成web.xml”,整个程序的配置文件(部署描述符)

    在构建Web工程的过程中,要指定Web工程生活的容器。我们指定在tomcat中,他就会被安装到Tomcat中执行。

    4·会弹出“是否切换相关联的视图”

    可以选择“no”,暂时不切换。

    二·新建网页

    与普通Java工程相比,Java Web多了与网页相关的WebContent和Tomcat的库

    1·在WebContent下选择other

    2·搜索,选择HTML

    3·自定义网页名

    4·点击Finish,完成创建

    5· 创建测试网页

    6·将web工程运行在服务器上

    点击next

    点击Finish

    7·服务器启动

    8·将此处的网址加上test.html,放在浏览器上试一下

    二·创建网页

    1·新建HTML文件“search_Prime”

    点击Finish

    2·search_Prime内容如下

    网页做结构,样式表做外观

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <style> h3{ font-size:30px; } body{ padding:30px; font-size:20px; } div{ margin-bottom:10px; } input{ padding:5px; color:blue; font-size:20px; } button{ font-size:20px; } </style> <body> <!-- 标题 --> <h3>某范围质数查找器</h3> <!-- form: 表单 --> <form action="findPrime" method="post"> <div> <span>开始范围:</span> <!-- 名字起识别作用 --> <input type="text" name="begin"> </div> <div> <span>结束范围:</span> <input type="text" name="end"> </div> <button>质数查找</button> </form> </body> </html>

    3· 点击Run On Server即可得

    三·网络世界与Java世界的对接器——servlet

    1·添加包(包的命名是域名倒装)

    这个包是根包

    2·添加一个控制器(包)

    3·将servlet放在包——edu.mju.demowork.controller中

    next

    4· 设置servlet的映射地址

    将映射地址更名为findPrime

    映射地址就是网页,以后访问这个地址就可以访问到这个servlet。实现访问一个网址就是访问一个Java类的某一个方法

    选择默认选项 Finish

    完成servlet创建

    5·doGet/doPost

    doGet:小数据,直接访问网址 doPost:大数据,点击按钮将按钮所在的表单的输入控件的值提交,即提交表单

    6· 提交表单相关

    <!-- 提交地址 --> action="findPrime" <!-- 提交方式:get/post --> method="post"

    7· 提交网址与servlet的对应

    在Servlet的头部自动生成的注解,标明这个servlet对应的网址是“findPrime”。由Tomcat搞定。 修改doGet的内容为:

    8·直接访问网址“http://localhost:8080/demowork/findPrime”验证doGat提交

    如出现404: 404类似空指针异常,可能是服务器没有同步更新。解决方法:

    重新发布

    如果控制台还是没有反应,就重新部署: 服务器会重新启动。

    9·访问网址“http://localhost:8080/demowork/search_Prime.html”,点击按钮验证doPost提交

    点击“质数查找”

    四· 流(request,response)——容器提供的服务

    1· 流

    一个是浏览器往servlet流动的流,包含了表单的提交参数。一个是servlet往浏览器流动的流。

    2· 试取得网页返回的参数

    得到的参数,返回值都是字符串,要装换为int

    //得到的参数,返回值都是字符串,要装换为int int begin = Integer.parseInt(request.getParameter("begin")); int end = Integer.parseInt(request.getParameter("end"));

    运行结果如下: 网页送到Java的收到了

    五·开启业务逻辑包

    2·在其下新建一个“数学服务类”接口

    内容如下:

    package edu.mju.demowork.service; import java.util.List; public interface MathService { List<Integer> findScopedPrimes(int begin,int end);//找到某个范围的质数 }

    3· 新建“数学服务的实现类”,实现接口“MathService”

    内容如下:

    package edu.mju.demowork.service; import java.util.ArrayList; import java.util.List; public class MathServiceImpl implements MathService { public List<Integer> findScopedPrimes(int begin, int end) { List<Integer> primeList = new ArrayList<>(); //泛型,说明了这个集合类型所能存放的类型 for(int num=begin;num<=end;num++) if(isPrime(num)){ //如果是质数 primeList.add(num); } return primeList; } private boolean isPrime(int num){//判断一个数是不是质数,返回值是Boolen,疑问句,以驼峰命名 if(num<=1) return false; if(num==2) return true; int top = (int)Math.sqrt(num); int i; for(i=2;i<=top;i++) if(num%i==0) break; return i==top+1; } }

    4· 在 下建立“test”包

    5·建立“Tester”类

    “Tester.java”内容如下:

    /** * */ package edu.mju.demowork.test; import edu.mju.demowork.service.MathService; import edu.mju.demowork.service.MathServiceImpl; /** * @author 20159 * */ public class Tester { /** * @param args */ public static void main(String[] args) { MathService mathService = new MathServiceImpl(); System.out.println(mathService.findScopedPrimes(3, 100)); } }

    试运行: 结果如下:

    6·更新“FindPrimeServlet”

    package edu.mju.demowork.controller; import java.io.IOException; import java.io.PrintWriter; import java.util.List; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import edu.mju.demowork.service.MathService; import edu.mju.demowork.service.MathServiceImpl; /** * Servlet implementation class FindPrimeServlet */ @WebServlet("/findPrime") public class FindPrimeServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public FindPrimeServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("servlet do get is here"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // System.out.println("servlet do post is here"); int begin = Integer.parseInt(request.getParameter("begin"));//得到的参数,返回值都是字符串,要装换为int int end = Integer.parseInt(request.getParameter("end")); // System.out.println(begin+","+end); MathService mathService = new MathServiceImpl();//servlet找Java干活,承担翻译的工作 List<Integer> primeList = mathService.findScopedPrimes(begin, end); //结果用response返回浏览器 PrintWriter writer = response.getWriter(); writer.println(primeList.toString()); writer.flush(); writer.close(); } }

    五·结果测试

    点击“质数查找”: 成功!

    Processed: 0.013, SQL: 9