JavaWEB-Servlet&Tomcat

一、熟悉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应用中有一个文件夹: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

出现的页面右侧中,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.0JRE 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请求响应过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sJb6oVlq-1605196200635)(理解Servlet请求响应过程.png)]

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 SDKProject 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包存放路径】

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值