首页 > 其他分享 >day01-Tomcat框架分析

day01-Tomcat框架分析

时间:2022-11-15 21:13:09浏览次数:66  
标签:Tomcat 框架 int servlet day01 maven 点击 Servlet

引入课程和Maven

1.Maven

maven中央仓库:Maven Repository: Search/Browse/Explore (mvnrepository.com)

maven仓库是国外的一个网站,由于网络问题,我们也常使用maven仓库的镜像

maven的原理和java程序操作数据库,然后数据库返回相关数据类似。

image-20221115171930402 image-20221115171704790

1.1创建maven-web项目

  1. 先创建一个Maven的Web项目

    选择file-new-project

    image-20221115172109262
  2. 在弹出的窗口中选择Maven,点击选择右边的create from archetype

    image-20221115172300940
  3. 在下面选择maven-archetype-webapp,然后点击next

    image-20221115172433603
  4. 输入相关数据,点击next

    image-20221115173632267
  5. 指定项目使用的maven程序(第一次使用可以先不指定2和3,稍后再指定),点击finish

    image-20221115175347101

  6. 默认创建的项目结构如下:

    image-20221115175709223
  7. 点击项目左上角的file-setting,在弹出的窗口中点击build,execution,deployment,再选择maven

    image-20221115180632611
  8. 在右边的maven home path框中,选择默认的或者你自己下载的maven程序(我这里选择默认)

    image-20221115180731870
  9. 在资源管理器中打开该上面的目录,将conf下的setting.xml文件复制到c盘用户目录的m2.目录下

    image-20221115180925756 image-20221115181132822
  10. 打开复制后的setting.xml文件,找到mirror标签,注释掉原来的mirror镜像

    image-20221115181521555

    添加新镜像如下:

     <mirror>
          <id>alimaven</id>
          <name>aliyun</name>
          <url>https://maven.aliyun.com/nexus/content/groups/public</url>
          <mirrorOf>central</mirrorOf>
        </mirror>
    
  11. 返回idea的窗口中,选择刚才配置的xml文件和要存储下载的jar包的目录,点击override,点击ok

    这样就完成了maven的镜像配置

    image-20221115183053123
  12. 在项目的pom.xml文件中添加配置

    在dependency元素中添加配置如下:

    <!--引入Servlet.jar-->
     <!--1.为了开发servlet,需要引入其jar包
    	 2.dependency 表示引入一个包
         3.groupId 表示包的开发公司/组织/个人 的信息 javax.servlet
         4.artifactId 表示包的项目名称 javax.servlet-api
             补充:groupId+artifactId是以目录形式体现
         5.version 表示该包当前的版本
         6.scope 表示引入的包的作用范围
         7.provided 表示 这里你引入的jar包,在编译,测试有效,但是在打包发布的时候,不要带上这个jar包
                     (因为Tomcat本身有jar包)
         8.下载的包在你指定的目录中
         9.可以去修改我们要下载的目录位置
         10.可以去指定maven仓库,即配置maven镜像
         -->
         <dependency>
             <groupId>javax.servlet</groupId>
             <artifactId>javax.servlet-api</artifactId>
             <version>3.1.0</version>
             <scope>provided</scope>
         </dependency>
    
  13. 点击右边的Maven,点击循环按钮,开始下载依赖

    image-20221115185040582
  14. 下载完毕后,可以在配置的下载目录中看到该依赖:

    下一次如果要使用依赖,就会先到下载目录下去找该依赖。

    image-20221115185334672

2.测试小案例

编写如下的测试案例

image-20221115190809188

创建java目录,存放源文件

image-20221115191037149

创建Servlet(如果选项中没有Servlet,点击右边的maven,重新导一下包)

image-20221115191206217

在web.xml文件中配置Servlet(使用注解也可以)

<servlet>
    <servlet-name>CalServlet</servlet-name>
    <servlet-class>com.li.servlet.CalServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>CalServlet</servlet-name>
    <url-pattern>/calServlet</url-pattern>
</servlet-mapping>

编写程序

WebUtils:

package com.li.utils;

public class WebUtils {
    /**
     * 将一个字符串数字转成int,如果转换失败,就返回传入的defaultVal
     *
     * @param strNum
     * @param defaultVal
     * @return
     */
    public static int parseInt(String strNum, int defaultVal) {
        try {
            return Integer.parseInt(strNum);
        } catch (NumberFormatException e) {
            System.out.println(strNum + "输入的格式错误");
        }
        return defaultVal;
    }
}

CalServlet:

package com.li.servlet;

import com.li.utils.WebUtils;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

public class CalServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //接收提交的数据进行计算
        String strNum1 = request.getParameter("num1");
        String strNum2 = request.getParameter("num2");

        //把strNum1和strNum2转成int类型
        int num1 = WebUtils.parseInt(strNum1, 0);
        int num2 = WebUtils.parseInt(strNum2, 0);
        int result = num1 + num2;

        response.setContentType("text/html;charset=utf-8");
        PrintWriter writer = response.getWriter();
        writer.print("<h1>" + num1 + "+" + num2 + "=" + result + "</h1>");
        writer.flush();
        writer.close();
    }
}

cal.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>计算器</title>
</head>
<body>
<h1>计算器</h1>
<!--这里的路径是浏览器要解析的,因此如果写成/calServlet的话,就会解析成http://主机名/calServlet
    想要这样配置的话,tomcat的路径就不要写项目名了-->
<form action="/calServlet" method="post">
    num1:<input type="text" name="num1"/><br/>
    num2:<input type="text" name="num2"/><br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

配置Tomcat(注意application context的配置)

image-20221115194241633

点击运行tomcat,在浏览器地址栏中输入:http://localhost:8080/cal.html,显示页面如下:

image-20221115194627533

输入数据,点击提交:

image-20221115194717837 image-20221115194730259

2.Tomcat整体项目架构分析

我们创建web项目,都要依赖于Tomcat等web服务以及实现继承Servlet接口。

可以看出对Tomcat的底层机制和调用到Servlet的流程的理解是十分重要的。

现在我们来模拟Tomcat底层实现,并能调用我们自己设计的Servlet,完成相同的功能。

说明:Tomcat有三种运行模式(BIO,NIO,APR),因为核心讲解的是Tomcat如何接受客户端请求,解析请求,调用Servlet,并返回结果的流程机制,因此采用BIO线程模型来模拟。

整个流程如下:

  1. 浏览器在地址栏输入请求的URL,发送http请求
  2. http请求到达Tomcat后,底层的socket网络编程会接收这个请求,创建一个线程(每一个请求对应一个线程)
  3. 被创建的线程就会去解析这个URL是什么请求,如果是请求Servlet资源,就去调用Servlet(底层会用反射实例化);如果调用的是静态资源,就直接返回

标签:Tomcat,框架,int,servlet,day01,maven,点击,Servlet
From: https://www.cnblogs.com/liyuelian/p/16893932.html

相关文章

  • 开发框架、七层协议
    内容概要软件开发架构网络编程简介OSI七层协议简介OSI七层协议网络相关专业名词软件开发架构#1.软件开发架构的目的 程序员在编写软件的时候应该遵......
  • 工业互联网安全技术保障平台功能框架设计分享,博奥智源
    子系统功能模块二级功能功能点安全数据采集子系统省通信管理局/基础电信企业IDC/ISP信息安全管理系统对接工互-机房数据工互-机架信息......
  • Tomcat多实例部署
    一、实例操作:Tomcat多实例1、关闭防火墙,将安装Tomcat所需软件包传到/opt目录下2、安装JDK3、安装tomcat4、配置tomcat环境变量5、修改tomcat2中的server.......
  • Spring Boot框架下实现Excel服务端导入导出
    SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板......
  • websocket 进阶!netty框架实现websocket达到高并发
    引言:在前面两篇文章中,我们对原生websocket进行了了解,且用demo来简单的讲解了其用法。但是在实际项目中,那样的用法是不可取的,理由是tomcat对高并发的支持不怎么好,特别是tomca......
  • 隐私计算开源框架「隐语SecretFlow」分层拆解和联邦学习算法使用
    本文首发于微信公众号:隐语的小剧场一、“隐语”架构设计全貌1.隐语框架设计思想隐私计算是一个新兴的跨学科领域,涉及密码学、机器学习、数据库、硬件等多个领域。根据......
  • Apache Tomcat 历史版本下载地址 官网地址
    Apache Tomcat历史版本下载地址官网地址官网地址:http://archive.apache.org/dist/tomcat/  点击需要下载的Tomcat版本,Tomcat版本和JDK版本对应关系如下  ......
  • Tomcat的概述、部署及优化
    一、Tomcat概述1、Tomcat的概念Tomcat是Java语言开发的,服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下......
  • Tomcat 热部署
    Tomcat有个后台管理功能,可以实现工程热部署。可以使用maven实现tomcat热部署,Tomcat启动时部署工程。配置方法:一、需要修改tomcat的conf/tomcat-users.xml配置文......
  • PHP的TP框架的limit使用注意事项
    使用limit时需要注意不要用find()需要用paginage或select这种多选的方法比如: Db::name('user')->limit($offset,1)->order('id','asc')->find();......