文章目录
一、熟悉Tomcat
1、了解Tomcat的作用
- 当开发环境搭建好后(即下载好JDK,配置好环境变量,下载好编码工具Eclipse),此时只能用来开发动态网站但无法运行动态网站,因此还需要搭建动态网站的运行环境。
- 运行环境就是可以发布并管理动态网站的一种软件,被称为服务器软件
- Java领域中,常用的轻量级服务器软件有:Tomcat、Jetty、Resin等
- Tomcat就是一个容器,是一个服务器
- 在Tomcat官网下载对应版本的zip文件,直接解压即为安装,将解压文件删除即为卸载
- Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp,开源免费,支持一些性能良好的集群
- JavaEE:Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范
2、获取Tomcat
在官网上(http://tomcat.apache.org/)下载好Tomcat9的zip绿色压缩包,解压到当前目录
3、认识Tomcat的目录结构
bin
:存放操作Tomcat的命令,比如启动Tomcat、关闭Tomcat等conf
:存放Tomcat的全局配置文件,比如server.xml(web部署描述符)等lib
:存放Tomcat所依赖的jar文件,大部分属于Tomcat的核心实现logs
:存放Tomcat的运行日志,比如启动日志、访问记录等temp
:存放Tomcat产生的临时文件webapps
:存放Web应用,这个目录下的每个目录都是一个Web应用(以网页形式存在)docs
:Tomcat官方提供的文档examples
:Tomcat官方提供的实例程序host-manager
:用于对Tomcat主机进行管理的工具manager
:用于管理Tomcat内所有Web应用的工具ROOT
:特殊的应用,默认表示Tomcat服务的根目录,当我们启动Tomcat并在浏览器中访问时,出现的页面即为ROOT中的内容,ROOT是一个web应用
work
:是Web应用的临时工作目录,web应用运行时产生的文件存放在该目录中,例:jsp运行时产生的 .java文件和 .class文件就存放在该目录中- 其他文件:
LICENSE
:是Apache许可证 ( Tomcat 是开源软件,使用 Apache License 发布 )NOTICE
:是关于 Apache Tomcat 当前版本的说明文件RELEASE-NOTES
:是当前版本的发行说明RUNNING.txt
:是 Apache Tomcat 运行环境配置说明文件
- 通常,我们将上述目录称作 Tomcat 主目录
4、启动Tomcat
- 方法一:进入bin目录,双击startup.bat批处理文件(脚本)
- 方法二:在cmd中进入bin目录,输入 【catalina.bat run】(Windows下) / 【catalina.sh run】(Linux/Unix/mac下)
5、访问Tomcat
- 方法一:在浏览器中输入:127.0.0.1:8080
- 方法二:在浏览器中输入:localhost:8080
6、关闭Tomcat服务器
- 方法一:直接关闭cmd窗口
- 方法二:在命令行中使用命令 Ctrl+C (推荐)
7、部署web项目
-
方式一:
- 直接把web项目复制到webapps
- 简化版:当web项目很大复制耗时,此时可以将项目打包成war包,在把war包放置到webapps目录下,war包会自动解压;war包删除后,解压的文件夹会自动删除
- 浏览器访问:
ip地址:端口号/web项目名/访问的html文件名
- ip地址,本地可以用localhost或127.0.0.1;在他人电脑上访问,在cmd中输入ipconfig可查看到 IPv4 地址192.168.1.19
- 端口号,在conf\server.xml文件中查看
- 端口号冲突,要么在cmd中输入netstat -ano,找到被占用的端口号对应的进程号PID,再根据PID去任务管理器找到此应用,结束任务
- 要么在conf\server.xml文件中更改端口号,注意不仅是port的端口号要改,其他端口号也要改
- 缺点:麻烦,能否不复制web项目,直接配置虚拟路径访问?
-
方式二:
-
配置
conf\server.xml
文件<!-- 在<Host>标签体的任意位置配置 --> <Context docBase="存放web项目的绝对路径" path="/虚拟目录"></Context>
-
浏览器访问:
ip地址:端口号/虚拟目录/访问的html文件名
-
缺点:server.xml文件是Tomcat服务器的核心配置文件,在此处配置某一特定web项目,可能导致Tomcat整体运行出错,能否不在核心配置文件中配置,而是到专门配置的xml中配置某一web项目?
-
-
方式三:
-
在
conf/Catalina/localhost
文件夹下创建任意名称的xml文件,文件中编写:<Context docBase="存放web项目的绝对路径"></Context> <!-- 虚拟目录:xml文件的名称 -->
-
浏览器访问:
ip地址:端口号/虚拟目录/访问的html文件名
-
二、采用原始方法开发servlet
1、认识WEB-INF
-
Tomcat主目录下的webapps中所有目录都是web应用
-
java web动态项目结构目录:
- 项目名称
- WEB-INF
- web.xml:该项目的核心配置文件
- classes目录:放置字节码文件
- lib目录:放置项目依赖的jar包
- WEB-INF
- 项目名称
-
web应用中有一个文件夹:WEB-INF,这个目录不仅是web工程的描述信息,还有web应用的配置
-
webapps/web应用名/WEB-INF
-
容器必须保证WEB-INF下的内容隐藏,对外不公开(利用Tomcat可以保证这一点)
-
如果将目录WEB-INF重命名,则重命名后的目录变为普通目录,此时目录下的内容公开,可以通过浏览器访问
-
WEB-INF目录下可以存放文件、图片、视频、数据库配置信息、编译好的类等
-
常见应用:实现付费才能观看的功能,付费后,在服务器内部 中转(例如用forward),即可间接访问WEB-INF下的文件,不可直接访问
-
-
web应用中,所有web应用都遵守的规范:都得有WEB-INF目录,WEB-INF目录下都有classes目录,classes目录下存放数据库配置信息、字节码文件(别人无法拿走.class文件对类进行反编译)
2、创建web应用
在webapps目录下,创建一个web应用:first
并在web应用下,创建WEB-INF目录,再创建以下目录及文件:
-
创建
index.html
文件:first\WEB-INF\index.html
这个文件默认为访问Tomcat的web应用时出现的首页- 通过http://localhost:8080/first/访问即可(无论是first\index.html还是first\WEB-INF\index.html)
- 通过http://localhost:8080/first/index.html访问(只有first\index.html可以,一般直接放web应用下)
-
创建
classes
目录:first\WEB-INF\classes\下一般存放将 .java文件(源代码)、.class文件(字节码)classes
目录 是java
中类路径的根目录- 其实源代码最好不要放在classes目录下
-
创建
lib
目录:first\WEB-INF\lib\下一般存放jar包(如数据库驱动包) -
创建
web.xml
文件:first\WEB-INF\web.xml,是一个web应用的部署描述符
3、编写index.html
- 浏览器中输入地址:http://localhost:8080/first/ 访问默认访问index.html(在web.xml中已配置)
<! DOCTYPE html >
<html>
<head>
<meta charset="GBK">
<title>毛宁</title>
</head>
<body>
<h1 style="text-align:center;"> 我是默认打开的页面</h1>
</body>
</html>
4、运行classes下的.java文件
- 由于jdk11中没有
javax.servet.*
,因此需要导入j2ee的jar包,以此得到java.servlet.*
下的类 - 在
Tomcat/lib
下找到servlet-api.jar
包,将这个包的路径配置java环境变量的类路径变量中- 即在
CLASSPATH
下添加路径:D:\application\apache-tomcat-9.0.37\lib\servlet-api.jar
- 即在
- 此时,下面的 .java文件可以在cmd中编译成功:
javac -d . HelloServlet.java
(带包编译)- 无需运行,只编译得到 .class文件即可
- 如果没有在环境变量
CLASSPATH
中配置jar包路径,则使用另一种 方法- cmd中输入javac 或 java,查看可以书写的参数列表
- 可以用
-cp
、-classpath
、--class-path
书写搜索类文件的目录 javac -cp D:\application\apache-tomcat-9.0.37\lib\servlet-api.jar -d . HelloServlet.java
- 若有多个类文件,可以在
servlet-api.jar;...
省略号的位置继续书写
- 若有多个类文件,可以在
HelloServlet.java
package cn.edu.ecut.servlet ;
import java.time.LocalDate;
import java.io.PrintWriter;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class HelloServlet implements Servlet{
public void init(ServletConfig config) throws ServletException{
}
public void service(ServletRequest req , ServletResponse resp) throws ServletException,IOException{
//字符打印流
PrintWriter out = resp.getWriter();
out.println( "<h1>" + LocalDate.now() + "</h1>" );
}
public void destroy(){
}
public ServletConfig getServletConfig(){
return null ;
}
public String getServletInfo(){
return null ;
}
}
5、编写web.xml
-
注册:告知Tomcat,这里有一个HelloServlet类,以后运行时要创建一个HelloServlet类的实例,实例名为maoning
-
<servlet> <servlet-name>maoning</servlet-name> <servlet-class>cn.edu.ecut.servlet.HelloServlet</servlet-class> </servlet> <!-- 1、servlet 表示一个servlet实例; 2、servlet-name 表示servlet实例对应的变量名(servlet实例名),其实也不算变量名,是key名,这个key可以找到类的实例(由Tomcat内部实现),名称可任意书写,比如mao.ning ; 3、servlet-class 表示是对应哪个类的servlet实例;(classes是这个类的根路径,因此对应类在classes目录下查找,查找的是.class文件即对应类的实例) -->
-
-
映射:期望将来用户在浏览器访问的路径使用url-pattern中的路径,url-pattern称作路径模式或网址模式
-
url-pattern 可任意书写
-
当用户输入网址http://localhost:8080/first/mao/ning/first(
http://localhost:8080/web应用名/url-pattern
)时,寻找名为maoning的实例,执行maoning的service方法,此过程由Tomcat完成 -
即Tomcat会根据用户在浏览器的请求路径,找到实例名,进而找到实例名对应的类,创建这个类的实例,并执行这个类中的service方法
-
即service方法不是点右键运行的,而是Tomcat调用的 ------(servlet的本质)
-
<servlet-mapping> <servlet-name>maoning</servlet-name> <url-pattern>/mao/ning</url-pattern> </servlet-mapping>
-
-
web.xml(由于编码方式的不同,建议 .xml文件 中不写中文)
- 可以一个类产生多个独立的实例
- 更改web.xml内容,如新增一个servlet的注册和映射,在启动Tomcat的cmd窗口中,会自动加载
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<servlet>
<servlet-name>maoning1</servlet-name>
<servlet-class>cn.edu.ecut.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>maoning1</servlet-name>
<url-pattern>/mao/ning/first</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>maoning2</servlet-name>
<servlet-class>cn.edu.ecut.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>maoning2</servlet-name>
<url-pattern>/mao/ning/second</url-pattern>
</servlet-mapping>
</web-app>
6、测试
浏览器地址栏输入:http://localhost:8080/first/mao/ning/first 或 http://localhost:8080/first/mao/ning/second 即可得到由 HelloServlet.java 运行出的 页面
三、用Eclipse创建Java Project,手动部署到Tomcat
1、创建一个java工程
【File】->【new】->【Project…】->【Java Project】->【命名为second】
2、创建web应用
-
【java工程鼠标右键创建文件夹Folder,命名为app】
- 这个文件夹可以当作一个web应用,即可以将app文件夹直接复制到Tomcat主目录下的webapps下,作为一个web应用直接执行
-
【app上鼠标右键创建文件夹WEB-INF】
-
【WEB-INF上鼠标右键创建文件夹classes和文件夹lib】
-
【WEB-INF目录下复制一个web.xml到此目录】
3、更改source编译好的字节码输出位置
由于Eclipse中,当我们运行一个src下的类后,产生的字节码文件会放在java工程的bin目录下
但我们希望放在app\WEB-INF\classes目录下
因此,做以下修改:
【java工程second上,右键】->【Build Path】->【Configure Build Path】->【Source】->【Default out folder:将second/bin改为second/app/WEB-INF/classes】->【Apply and Close】
此时可以看到Ecplise默认classes是受保护的,因此在Ecplise左侧,无法看到classes文件夹
4、开始工作
在src下书写java文件,产生的字节码默认输出到classses文件夹,最后把app目录部署到Tomcat下的webapps
5、配置环境
书写HelloServlet.java,此时Eclipse下找不到javax.servlet.*,这里的配置与first中的两种配置方法不同
(1)创建服务端运行时环境
- 【Window】->【Perferences】->【Server】->【Runtime Environments】->【Add】->【Apache Tomcat v9.0】->【Next】->【进入服务端运行时环境(Server Runtime Environment),指定Tomcat 安装目录:
D:\application\apache-tomcat-9.0.37
】->【Finish】 - 此时多了一个服务端运行时环境:Apache Tomcat v9.0
(2)将服务端运行时环境中包含的库加载到java工程中
- 【java工程second上,右键】->【Build Path】->【Configure Build Path】
- 【Libraries】->【Classpath】->【add Library】(以库的形式将Tomcat下lib包含的所有包都加载)->【Server Runtime】->【Next】->【Apache Tomcat v9.0】->【Finish】
- 此时ClassPath下多了一个库-Apache Tomcat v9.0[Apache Tomcat v9.0]
- 【Apply and Close】后,Ecplise左侧工程second下多了一个Apache Tomcat v9.0[Apache Tomcat v9.0]
(3)现在可以成功运行HelloServlet.java
6、手动部署工程
-
在Tomcat下发布:将app文件夹复制到Tomcat的webapps目录下;
-
启动Tomcat;
(注意不要直接运行HelloServlet.java,这是一个没有main入口的java类,是通过Tomcat来创建类实例并执行service方法)
四、用Eclipse创建动态Web工程,通过Tomcat部署该工程
1、认识如何管理Tomcat
- 启动Tomcat,在浏览器中输入localhost:8080
出现的页面右侧中,Server Status
是服务器状态,Manager App
是管理应用(有助于我们后续理解会话),Host Manager
是主机管理
- 先配置Tomcat主目录下的conf/tomcat-users.xml文件:
<tomcat-users>
<role rolename="manager-gui"/>
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui,admin-gui"/>
</tomcat-users>
- 配置好manager的角色名后,可以登录Server Status查看服务器状态,可登录Manager App查看Tomcat Web应用管理
<role rolename="manager-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
- 配置好admin的角色名后,可登录Host Manager,作为Tomcat虚拟主机管理员进行主机管理
<role rolename="admin-gui"/>
<user username="tomcat" password="tomcat" roles="manager-gui"/>
2、用Tomcat页面管理web应用
- 登录Manager App,可以对之前部署到Tomcat的web应用进行管理
- 卸载,卸载后web应用从webapps中移除
- 部署,(利用Eclipse创建一个特殊工程,即动态Web工程)
3、了解动态web工程
动态web工程:服务器端支持动态生成内容的工程
如页面上的时间 - 由servlet生成标签中的内容(不一定要使用jsp);查询数据库返回的数据 - 由servlet查询数据库
- 创建过程:【File】->【Dynamic Web Project】->【命名,Next】->【可以修改Default output folder-字节码输出文件夹,一般为build\classes,Next】->【Context root-工程的上下文路径即根目录,一般写工程名;Content directory-将来写的web应用放入此路径,一般写WebContent;勾选Generate web.xml deployment descriptor-生成web.xml部署描述符,Finish】,会创建与工程有关的元数据,因此可能略慢,耐心等待创建完成
- 创建完成后,右侧出现动态web项目目录,其中
Java Resources\src
放置java源码和数据库连接文件,注意如果在Server下已创建服务端运行时环境,则动态web工程会在Java Resources\Libraries
下自动加载运行环境的库:Apache Tomcat v9.0
和JRE System Library
4、可以开始写java文件
- 先导入之前写过的
jdbc.properties
,放在Java Resources/src
下 - 再导入mysql和oracle连接数据库的jar包,放在
WebContent/WEB-INF/lib
下;Eclipse会自动导入到编译环境,放在Java Resources/Libraries/Web App Libraries
下 - 在
Java Resources/src
下写好java文件,并在web.xml中进行配置(注册和映射)
5、将工程导出
【工程名,右键】->【Export】->【WAR file】
war file就是Tomcat管理的压缩包,把我们编译好的文件及WebContent文件夹打包到一个压缩包中,放在Tomcat的目录下后,当Tomcat一启动就会自动解压
6、Tomcat自动部署工程
通过Tomcat自动部署:在Tomcat首页的Manager App
中,上传要部署的WAR文件,此时在Tomcat的webapps目录下会多一个压缩包并自动解压,解压后即可访问
注意:需要先连接数据库,再启动Tomcat;
注意:数据库的监听服务需要启动
五、用Eclipse创建动态Web工程,并在Eclipse中创建Server-Tomcat的镜像,直接在Eclipse中启动Tomcat并运行java文件
1、创建Dynamic Web Project工程
创建动态Web工程,并在src下创建同第四部分一样的 java文件及jdbc.properties及导入驱动包
2、在Eclipse中配置Tomcat镜像
在Servers
窗口下,点击No servers are available.Click this link to create a new server...
,选择【Tomcat v9.0 Server】,其他如Server name则保持默认的名字:Tomcat v9.0 Server at localhost,【Next】,在【Add and Remove】窗口中Available为由Eclipse管理的web工程,Configure为已部署的web应用,此时暂时不选择,直接【Finish】,此时,【Servers】窗口下出现【Tomcat v9.0 Server at localhost】;左侧导航栏【Project Explorer】下的【Servers文件夹】会出现【Tomcat v9.0 Server at localhost-config】文件夹
-
【Servers】窗口下,右击【Tomcat v9.0 Server at localhost】,选择
Open
,更改配置:- 可在此处改端口号
- 在Server Locations下选择
Use custom location (does not modify Tomcat installation)
,选择Server path为自定义的路径,此路径下存放着Tomcat映像的文件,比如路径为D:/mytomcat,下面存放着conf、logs、temp、webapps、work目录 - 在Server Locations下选择Deploy path为webapps,之后的web应用都会部署发布在D:/mytomcat/webapps下
- Ctrl+s 保存
- 注意要先
open
配置,再右击选择Add And Remove
进行web应用的发布,因为add and remove后无法再更改配置,除非删除这个server
-
其实有两次拷贝,先是创建Tomcat镜像–是从Tomcat本体目录拷贝到Eclipse的【Project Explorer的Servers目录下】;然后是发布web应用–从【Servers目录】拷贝到【mytomcat目录】
-
【Servers】窗口下,右击【Tomcat v9.0 Server at localhost】,如果要删除这个Tomcat镜像,则选择
delete
;如果动态web工程的文件有改动,则选择Publish
,保持Tomcat镜像中的web应用 与 动态web工程中的代码一致
3、运行
-
【Servers】窗口下,右击【Tomcat v9.0 Server at localhost】,选择
Start
启动Tomcat,以后可以不必在Tomcat的安装目录bin下进行启动 -
可选择在浏览器中输入
localhost:8080/web应用名/映射路径名
来访问 -
也可选择在Eclipse中点击 绿色的启动按钮 ,此时会在Eclipse中弹出网页,输入路径进行访问
4、添加首页
动态Web工程的WebContent下的文件即为到时候发布在mytomcat/webapps下的文件,即WebContent的文件就是web应用的文件,但是到时候发布时,web应用名为动态Web工程的名字,而不是WebContent
-
在WebContent目录下创建一个index.html页面(Eclipse会自动把index.html拷贝到mytomcat/webapps/动态Web工程名 目录下,因为Eclipse已经配置了Server,会自动接管 Project-工程 到 Application-应用 的转变)
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <h1>首页</h1> <a href="/third2/em">跳转</a> </body> </html>
-
点击Eclipse的绿色启动按钮,路径为:http://localhost:8080/third2,出现index.html,点击【跳转】,跳到路径http://localhost:8080/third2/em(web.xml配置的url-pattern为/em)
- 其实Eclipse对于标签类文件(标记语言,前端)的支持很差,不如IDEA
-
注意:如果【Servers】窗口下,右击【Tomcat v9.0 Server at localhost】,把所有的web应用都remove,则此时的mytomcat就是一个纯粹的tomcat,直接start启动后,输入网址localhost:8080,会看到404错误,因为镜像mytomcat下没有首页
六、理解servlet请求响应过程
servlet中,请求对象request和响应对象response是同时创建的,即当客户端(浏览器)向服务器端(Tomcat)进行HTTP响应时,Tomcat中的web应用中的java文件中继承的servlet就创建了request和response,即服务器端已知向哪个对象进行响应,并将response对象中的数据封装成HTTP响应,发送回客户端
七、将Tomcat集成到IEDA中,并对JavaEE项目进行创建与部署
1、在IDEA中配置Tomcat
【Run】->【Edit Configurations…】->【Tomcat Server】->【Local】->【点击Application server后面的Configure…,弹出Tomcat Server窗口】->【在Tomcat Home中选择Tomcat的安装目录】->【Apply】
2、创建与部署一个带web应用的JavaEE项目
【New】->【Module(也可以选Project,但现在我们选择建一个模块)】->【Java Enterprise(Java企业版的Javaee项目,以前我们创建的都是Java)】->【在Additional Libraries and Framework下勾选Web Application】->【Next】->【自取一个模块名】->【Finish】
创建好项目后,此时项目也已部署在Tomcat上了
运行时,出现错误:
Cannot start compilation: the output path is not specified for module "tomcat_test".
Specify the output path in the Project Structure dialog.
这个错误是因为没有设置output的路径,只要打开File->Project Structure
窗口修改两个地方的设置就可以了
- 在Modules设置里勾选”Inherit project compile path”
- 设置Project中的”Project compiler output” :选择”Project的路径”+”\out”
注意此时,运行后可以访问页面,但是如果页面内容修改了,需要重新启动tomcat才能访问修改过的页面
在【Run】->【Edit Configurations…】弹出窗口点击左侧的Tomcat Server下的Tomcat 9.0.37,更改右侧Server配置:On ‘Update’ action中选择 Update resources,On frame deactivation中选择Update resources即可,在资源更新时在服务器上重新部署(不选择Update classes and resources,因为java代码改动次数较多,重新部署影响性能 ),此为热部署
热部署概念:
热部署就是正在运行状态的应用,修改了他的源码之后,在不重新启动的情况下能够自动把增量内容编译并部署到服务器上,使得修改立即生效。
热部署为了解决的问题有两个, 一是在开发的时候,修改代码后不需要重启应用就能看到效果,大大提升开发效率;二是生产上运行的程序,可以在不停止运行的情况下进行升级,不影响用户使用。
八、认识资源分类
-
静态项目:只存在静态资源
-
动态项目:存在静态资源和动态资源,下面讲的是动态项目
资源分类:服务器中有静态资源和动态资源
-
静态资源:所有用户访问后,得到的结果是一样的,称为静态资源,静态资源可以直接被浏览器解析
- 如:html,css,javascript
-
动态资源:每个用户访问相同资源后,得到的结果可能不一样,称为动态资源
- 动态资源被访问后,需要先转换为静态资源,之后静态资源返回给客户端(浏览器),客户端有静态资源解析引擎,解析后将页面呈现给用户。
九、Servlet:server applet
1、概述
-
概念:运行在 服务器端 的小程序
-
Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。
(此java类没有main方法,依赖于服务器才能运行,tomcat执行它,需要遵守一定的规则(接口),才能被tomcat所识别
动态资源具有逻辑性,利用Java代码实现动态资源-不同人访问显示的页面不同)
- 将来我们自定义一个类,实现Servlet接口,复写方法(Servlet接口要在Java EE的API上找,不再在jdk的API上找)
2、快速入门
1、创建JavaEE项目(Java项目不行)
2、在项目的src下定义一个类,类必须实现Servlet接口
3、实现接口中的抽象方法
package cn.itcast.web.servlet;
import javax.servlet.*;
import java.io.IOException;
public class ServletDemo implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
//提供服务的方法
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("Hello Servlet");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
}
}
4、在web.xml中配置Servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置Servlet -->
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>cn.itcast.web.servlet.ServletDemo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demotest</url-pattern>
</servlet-mapping>
</web-app>
运行成功的话,应该是前台访问http://localhost:8080/tomcat_test_war_exploded/demotest,刷新一次,IDEA的控制台就输出一次 Hello Servlet
运行时出错:Error:java:无效的源发行版
原因在于模块的target bytecode version和实际的编译器版本不一致所导致的错误,把所有jdk版本统统改成一样的即可
在【File->Projact Structure】的【Project】中,把Project SDK
和Project language level
,【Modules】中,Source的Language level
和Dependencies的Module SDK
的jdk版本改为一致
在【File->Settings】的【Java Compiler】中,Project bytecode version的jdk版本保持统一
如果是maven项目,改一下pom.xml中的jdk版本
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
更改服务器的打包路径(war包)
【File】->【Project Structure】->【Project】->【Project compile output,设置war包存放路径】