02基于Tomcat手动实现静态动态的WEB开发,熟悉Tomcat的工作流程

基于Tomcat手动实现WEB开发

Tomcat服务器要求所有部署的WEB应用都要放到CATALINA_HOME\webapps目录下, 这样Tomcat才能方便管理这些web应用

部署静态的web应用

第一步:在CATALINA_HOME\webapps目录下新建一个oa的子目录(oa就是项目名/web应用的根)

第二步:在oa目录下新建一个静态资源文件如index.html

第三步:执行bin目录下的startup.bat命令文件启动Tomcat服务器

第四步:打开浏览器在地址栏上输入URL: http://127.0.0.1:8080/oa/index.html

第五步:Tomcat服务器会在它管理的的所有web项目中先找到oa项目,然后查找index.html文件,最后将这个index.html文件中的内容直接输出响应到浏览器上(浏览器是能够识别html代码的)

部署动态的web应用

第一步:在CATALINA_HOME\webapps目录下新建一个crm的子目录

第二步:在crm目录下新建一个WEB-INF目录(这个目录的名字是Servlet规范中规定的)

第三步:在WEB-INF目录下新建一个classes目录(目录名固定) , 用来存放Java程序编译之后的class文件

第四步:在WEB-INF目录下新建一个lib目录(目录名固定) , lib目录不是必须的, 但如果一个web应用有依赖第三方的jar包的话就要放到这个目录下

第五步:在WEB-INF目录下新建一个web.xml配置文件(文件名固定), 这个文件用来描述请求路径和Servlet之间的对照关系,

web.xml文件的模板最好从其他的webapp中复制粘贴,手写容易出错

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                      https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
  version="5.0"
  metadata-complete="true">
    <!--在这里指定请求路径和Servlet之间的对照关系-->
</web-app>

第六步:配置环境变量CLASSPATH指定加载class文件的路径 , 只是为了保证编写的Java程序可以编译通过和Tomcat服务器的运行没有关系

  • CLASSPATH=.;C:\dev\apache-tomcat-10.0.12\lib\servlet-api.jar (从当前路径和指定路径加载class文件)

第七步:编写一个Java程序实现Servlet接口(JavaEE的规范中的一员), Java程序的源代码的位置可以任意

第八步:将java源代码编译成功之后生成的class文件拷贝到WEB-INF\classes目录下

//这些类都不是JDK中的jar包 , 需要通过classpath环境变量告诉虚拟机从哪加载这些类 
import jakarta.servlet.Servlet;
import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;
import jakarta.servlet.ServletConfig;
import java.io.IOException;
import java.io.PrintWriter;
//实现Servlet接口中的五个方法
public class HelloServlet implements Servlet{
    
    
    public void init(ServletConfig config) throws ServletException{
    
    

    }
    
    public void service(ServletRequest request,ServletResponse response) throws ServletException , IOException{
    
    
        // 向控制台打印输出
        System.out.println("My First Servlet, Hello Servlet");
        
        // 在获取流对象之前设置响应的内容类型是普通文本或html代码才会生效
        response.setContentType("text/html");

        // response表示响应:将数据信息从服务器发送到浏览器输出,浏览器是能够识别html代码的
        // out这是一个输出流,负责输出字符串到浏览器, 这个输出流不需要我们刷新和关闭,都由Tomcat来维护
        PrintWriter out = response.getWriter();
        out.print("<h1>hello servlet,你好Servlet</h1>");

    }

    public void destroy(){
    
    

    }

    public String getServletInfo(){
    
    
        return "";
    }

    public ServletConfig getServletConfig(){
    
    
        return null;
    }
}

第九步:在web.xml文件中编写配置信息,指定“请求路径”和“Servlet类名”的对照关系

标签名 功能
< servlet>描述标签 描述Servlet程序的信息
< servlet-name>子标签 指定Servlet程序的名字(Servler的名字是唯一的)
< servlet-class>子标签 指定Servlet程序的全类名 (用于Tomcet服务器利用反射机制创建对象)
< servlet-mapping>映射标签 描述Servlet的请求映射路径(servlet和请求路径之间是一一对应的)
< servlet-name>子标签 指定映射的Servlet程序的名字
< url-pattern>子标签 指定这个Servlet程序对应的请求路径 (请求路径必须以 “/” 开始 , 且不带项目名)

在web.xml文件中注册Servlet类

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                      https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
  version="5.0"
  metadata-complete="true">

	<!--servlet描述信息-->
	<servlet>
		<servlet-name>fdsafdsagfdsafdsa</servlet-name>
		<!--带有包名的全限定类名-->
		<servlet-class>com.bjpowernode.servlet.HelloServlet</servlet-class>
	</servlet>

	<!--servlet映射信息-->
	<servlet-mapping>
		<!--指定映射的Servlet程序的名字-->
		<servlet-name>fdsafdsagfdsafdsa</servlet-name>
		<!--这个路径唯一的要求是必须以 "/" 开始,且不带项目名-->
		<url-pattern>/fdsa</url-pattern>
	</servlet-mapping>
</web-app>

第十步:启动Tomcat服务器 , 然后打开浏览器在地址栏上输入一个URL: http://127.0.0.1:8080/crm/fdsa

  • 浏览器地址栏上的请求路径必须和web.xml文件中的< url-pattern>标签内的路径一致并且带项目名/crm

  • 当浏览器地址栏上编写的路径太复杂时,可以先访问HTML页面然后通过超链接发起请求 (静态资源只有放到WEB-INF目录外面才可以被访问)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>index page</title>
    </head>
    <body>
        <!--前端超链接发送请求的时候请求路径都以“/”开始,并且要带着项目名(等价于在地址栏上发起请求)-->
        <a href="/crm/fdsa">Hello Servlet</a>
    </body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_57005976/article/details/131029004