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项目
先创建一个Maven的Web项目
选择file-new-project
在弹出的窗口中选择Maven,点击选择右边的create from archetype
在下面选择maven-archetype-webapp,然后点击next
输入相关数据,点击next
指定项目使用的maven程序(第一次使用可以先不指定2和3,稍后再指定),点击finish
默认创建的项目结构如下:
点击项目左上角的file-setting,在弹出的窗口中点击build,execution,deployment,再选择maven
在右边的maven home path框中,选择默认的或者你自己下载的maven程序(我这里选择默认)
在资源管理器中打开该上面的目录,将conf下的setting.xml文件复制到c盘用户目录的m2.目录下
打开复制后的setting.xml文件,找到mirror标签,注释掉原来的mirror镜像
添加新镜像如下:
<mirror>
<id>alimaven</id>
<name>aliyun</name>
<url>https://maven.aliyun.com/nexus/content/groups/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
复制代码
返回idea的窗口中,选择刚才配置的xml文件和要存储下载的jar包的目录,点击override,点击ok
这样就完成了maven的镜像配置
在项目的pom.xml文件中添加配置
在dependency元素中添加配置如下:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
复制代码
点击右边的Maven,点击循环按钮,开始下载依赖
下载完毕后,可以在配置的下载目录中看到该依赖:
下一次如果要使用依赖,就会先到下载目录下去找该依赖。
2.测试小案例
编写如下的测试案例
创建java目录,存放源文件
创建Servlet(如果选项中没有Servlet,点击右边的maven,重新导一下包)
在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>
<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的配置)
点击运行tomcat,在浏览器地址栏中输入:http://localhost:8080/cal.html,显示页面如下:
输入数据,点击提交:
2.Tomcat整体项目架构分析
我们创建web项目,都要依赖于Tomcat等web服务以及实现继承Servlet接口。
可以看出对Tomcat的底层机制和调用到Servlet的流程的理解是十分重要的。
现在我们来
模拟Tomcat底层实现,并能调用我们自己设计的Servlet,完成相同的功能。
说明:Tomcat有三种运行模式(BIO,NIO,APR),因为
核心讲解的是Tomcat如何接受客户端请求,解析请求,调用Servlet,并返回结果的流程机制
,因此采用BIO线程模型来模拟。
整个流程如下:
浏览器在地址栏输入请求的URL,发送http请求
http请求到达Tomcat后,底层的socket网络编程会接收这个请求,创建一个线程(每一个请求对应一个线程)
被创建的线程就会去解析这个URL是什么请求,如果是请求Servlet资源,就去调用Servlet(底层会用反射实例化);如果调用的是静态资源,就直接返回
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4