静态页面:页面的内容,是固定(以文件的形式,静静躺在你的硬盘指定目录中,无论是什么时候访问神秘人访问都是一样的效果)
动态页面:不是一个真实的硬盘文件,而是通过代码在内存中构造出的一个虚拟资源,就可以根据用户访问的时间不同,访问的人不同,带有的参数不同来构造不同的页面来
1.创建项目(是maven项目)
maven是什么?
maven是一个构建工具,包括但不限于编译,打包,部署。我们在idea里只需要点击main方法前面的三角号就可以自动编译运行,针对一些比较简单的程序我们可以这么做,但是针对复杂的程序尤其是有多个模块,相互依赖的程序就十分麻烦。例如A依赖B,B依赖C,想要编译运行A就要先编译运行B,想要编译运行B就要先编译运行C,
构建工具就是为了解决这个问题,让我们在开发比较复杂的项目的时候也可以比较方便的去编译和打包操作,我们使用maven主要就是借助maven进行编译,打包,依赖管理
目录中有:
其中src是存放源代码的,main中存放业务代码,test中存放测试代码,resource存放代码中需要依赖的资源,pom.xml是项目中的阵眼,全局配置文件,写了很多关于项目相关的配置属性
2.引入Servlet依赖
servlet不是java标准库自带的,需要使用就需要额外的下载安装并引入到项目中
maven的核心功能就是可以自动的管理依赖,就会把咱们使用的库里依赖的东西
直接去网站上找需要使用的依赖:
然后复制其maven内容
使用dependencies标签来引入
拷贝过来的时候有些字段可能是被标红的,因为idea这个时候会自动的从中央仓库下载好这个依赖,没下载好之前就是红色的
dependencies标签可以包含多个dependency
3.创建目录结构
虽然maven已经给我们创建了一些目录,但是还不够,我们需要一个
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name >Archetype Created Web Application</display-name>
</web-app>
绿色字叫做schema文件,描述了你的xml中都允许写哪些节点,节点之间的层级关系哪些是合法的,作用为验证和补全,如果这里报红只是影响idea对于web.xml的验证和补全功能。
4.编写代码
可以把代码放到java文件下
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created with IntelliJ IDEA.
* Description:
* User: admin
* Date: 2023-05-08
* Time: 15:07
*/
@WebServlet("/hello")
// 这里的/hello意思就是get请求并且url里面的路径是/hello的请求,才会生效
//tomcat可以让你关联上很多路径的,可以给请求中的不同路径关联上不同1类,也就是执行了不同的方法
public class HelloServlet extends HttpServlet {
// 这个httpservlet就来自通过maven下载的servlet的jar包里
// doget是httpservlet父类里已经包含的方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// super.doGet(req, resp);
//上面这个自动生成的调用父类方法的代码,一定要自动注释掉来排除问题
//是tomcat那边打印一个日志
System.out.println("hello");
// 还可以给客户端返回个hello
resp.getWriter().write("hello");
}
// doget表示,当tomcat在收到某些get请求的时候,会调用这个doget方法
//doget做的工作就是根据请求来计算响应
//req对象,这是tomcat把http的请求报文解析成一个对象了
//resp对象,则是tomcat构造的一个空的对象,resp相当于一个输出型参数
//doget就需要根据req里的一些数据和业务逻辑构造生成一个完整的resp对象
//再进一步,tomcat就把resp对象转成一个http响应报文
}
5.打包程序
当前的servlet代码没有main方法,我们只需要把servlet放到tomcat上,就可以跑起来
打包就是先把缺失的依赖下载好,编译所有的java文件来得到.class文件,然后吧.class给打到一个压缩包中
位置在左侧的target文件夹中
但是tomcat不认jar包,只认识war包, war包会吧整个webapp目录打进去(包括web,xml以及未来放的一些静态html,css)
我们需要修改下pom.xml来实现打包成war包
<packaging>war</packaging>
<build>
<finalName>java105</finalName>
</build>
打包之后是这样的
6.部署程序
吧war包拷贝到tomcat的webapps中,然后启动tomcat tomcat就会加载war包并且解压缩成一个目录
7.验证程序
通过浏览器构造一个http请求来访问tomcat服务器
浏览器写一个url,构造了一个http请求(get/java105/hello),服务器就会解析请求,先获取url中的第一级路径(也就是/java105,来确定一个webapp)
tomcat找到java105目录之后,就会加载里面的类,尤其是重点去识别出@webservlet注释修饰的类,就会取出url的第二级路径(也叫作servlet path)(/hello)然后就在@webservlet注解中,找到名为/hello的类,并且创建实例(只会创建一次,创建过了就复用用之前的)
再解析出http请求的方法get,取出get之后,就可以根据http方法来调用对应的servlet中的方法。
get请求调用doget方法
post请求调用dopost方法
put请求调用doput方法
delete请求调用dodelete方法
同时还会构造出httpservletrequest对象和httpservletresponse对象