ToB企服应用市场:ToB评测及商务社交产业平台

标题: day01-Tomcat框架分析 [打印本页]

作者: 羊蹓狼    时间: 2022-11-15 20:55
标题: day01-Tomcat框架分析
引入课程和Maven

1.Maven

maven中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com)
maven仓库是国外的一个网站,由于网络问题,我们也常使用maven仓库的镜像
maven的原理和java程序操作数据库,然后数据库返回相关数据类似。
1.1创建maven-web项目

2.测试小案例

编写如下的测试案例
创建java目录,存放源文件
创建Servlet(如果选项中没有Servlet,点击右边的maven,重新导一下包)
在web.xml文件中配置Servlet(使用注解也可以)
  1. <servlet>
  2.     <servlet-name>CalServlet</servlet-name>
  3.     <servlet-class>com.li.servlet.CalServlet</servlet-class>
  4. </servlet>
  5. <servlet-mapping>
  6.     <servlet-name>CalServlet</servlet-name>
  7.     <url-pattern>/calServlet</url-pattern>
  8. </servlet-mapping>
复制代码
编写程序
WebUtils:
  1. package com.li.utils;
  2. public class WebUtils {
  3.     /**
  4.      * 将一个字符串数字转成int,如果转换失败,就返回传入的defaultVal
  5.      *
  6.      * @param strNum
  7.      * @param defaultVal
  8.      * @return
  9.      */
  10.     public static int parseInt(String strNum, int defaultVal) {
  11.         try {
  12.             return Integer.parseInt(strNum);
  13.         } catch (NumberFormatException e) {
  14.             System.out.println(strNum + "输入的格式错误");
  15.         }
  16.         return defaultVal;
  17.     }
  18. }
复制代码
CalServlet:
  1. package com.li.servlet;
  2. import com.li.utils.WebUtils;
  3. import javax.servlet.*;
  4. import javax.servlet.http.*;
  5. import java.io.IOException;
  6. import java.io.PrintWriter;
  7. public class CalServlet extends HttpServlet {
  8.     @Override
  9.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  10.         doPost(request, response);
  11.     }
  12.     @Override
  13.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  14.         //接收提交的数据进行计算
  15.         String strNum1 = request.getParameter("num1");
  16.         String strNum2 = request.getParameter("num2");
  17.         //把strNum1和strNum2转成int类型
  18.         int num1 = WebUtils.parseInt(strNum1, 0);
  19.         int num2 = WebUtils.parseInt(strNum2, 0);
  20.         int result = num1 + num2;
  21.         response.setContentType("text/html;charset=utf-8");
  22.         PrintWriter writer = response.getWriter();
  23.         writer.print("<h1>" + num1 + "+" + num2 + "=" + result + "</h1>");
  24.         writer.flush();
  25.         writer.close();
  26.     }
  27. }
复制代码
cal.html:
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>计算器</title>
  6. </head>
  7. <body>
  8. <h1>计算器</h1>
  9. <form action="/calServlet" method="post">
  10.     num1:<input type="text" name="num1"/><br/>
  11.     num2:<input type="text" name="num2"/><br/>
  12.     <input type="submit" value="提交">
  13. </form>
  14. </body>
  15. </html>
复制代码
配置Tomcat(注意application context的配置)
点击运行tomcat,在浏览器地址栏中输入:http://localhost:8080/cal.html,显示页面如下:
输入数据,点击提交:

2.Tomcat整体项目架构分析

我们创建web项目,都要依赖于Tomcat等web服务以及实现继承Servlet接口。
可以看出对Tomcat的底层机制和调用到Servlet的流程的理解是十分重要的。
现在我们来模拟Tomcat底层实现,并能调用我们自己设计的Servlet,完成相同的功能。
说明:Tomcat有三种运行模式(BIO,NIO,APR),因为核心讲解的是Tomcat如何接受客户端请求,解析请求,调用Servlet,并返回结果的流程机制,因此采用BIO线程模型来模拟。
整个流程如下:

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4