基于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>