tomcat
底层支持Socket之间的通信进行数据共享是通过内部web服务器软件(容器:将servet/jsp进行对象的创建,将jsp翻译为java文件,ide将java文件编译为class文件)实现,tomcat 虽然不完全支持javaEE(不支持EJB),但是也是一款能支持web服务器的免费软件
容器的功能:
1.通信支持:
利用容器提供的方法,能够轻松让Servlet与Web服务器对话,无需自己建立ServerSocket,监听端口,创建 流等操作。
2.生命周期管理
它会负责加载类,实例化和初始化Servlet,调用Servlet的方法,并使Servlet实 例能够被垃圾回收。
3.多线程处理
容器会自动地为它接收到的每个Servlet请求创建一个新的Java线程。
4.具有安全性:
使用XML部署描述文件来配置安全性(Servlet 3.0开始可以使用注解描述),而不必将其硬编 码写到Servlet或者其它类中
tomcat 安装目录下文件夹:
bin:tomcat的可执行目录
- startup.bat/startup.sh(linux)
- shutdown.bat/shutdown.sh(linux)
conf:tomcat的配置目录
- web.xml:定义全局参数,网站信息的配置
- server.xml服务器的配置
lib:tomcat支持的jar包(本身已经包含了serlvet和jsp包)
为了防止版本冲突,因此当需要在maven项目中提供依赖时需要指定依赖范围为provide
依赖范围:
compile:编译
test:测试
provide:仅仅是当前提供者
logs:日志记录文件
temp:存储临时文件
webapp:存放网站信息(一个网站可以看成是一个文件夹),默认访问root(tomcat_home)
work:存放jsp文件(hello.jsp–>hello_jsp.java–>class文件)
WEB-INF:网站的配置信息,web.xml(配置servet/初始化参数)
- classes:存放字节码文件
- lib:存放jar包
启动tomcat经常会出现的问题:
闪屏
原因:tomcat启动时从bin目录的start.bat启动,会找java环境变量(JAVA_HOME)
解决:配置JAVA_HOME,添加tomcat的安装目录
启动失败
原因:一个电脑上有多个tomcat,配置了catalina_HOME
解决:不要配置catalina_HOME,只保留一个tomcat
tomcat启动后(http://localhost:8080),tomcat会发送一个请求,携带当前当问数据类型支持的语言
tomcat默认端口:8080
qq:5555
mysql:3306
servlet:针对服务器应用程序开发
其实就是一个单实例多线程的普通java类,能够被web应用服务器解析的一类
通过它的源码是否变化来区分动态资源还是静态资源:
静态资源:Html/css/js/.jpg/gif
动态资源:Servlet
在maven的web工程中,提交一个uri请求,会现在web.xml文件中查询动态资源地址,如果没有,在当前根目录下查询静态资源
利用容器手动开发Servlet:
Servler是一个接收客户端的请求,处理后回应数据给客户端的(接收客户端的请求,回应服务器的响应)
创建一个maven工程(目录符合web工程结构)
1.在pom.xml下打war包
2.补全目录结构
src
Man
java
Resource
Webapp
WEB-INF
Web.xml
3.创建一个Servlet(必须在pom文件中导入依赖导入javax.servlet-api),配置pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<packaging>war</packaging>
<groupId>com.github.sweeeeeet</groupId>
<artifactId>tomcat-http</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
4.创建类继承HttpServlet,覆盖doGet():执行get方法提交;覆盖doPost():使用post方法提交
package com.github.sweeeeeet.tomcat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Author:sweet
* Created:2019/4/25
* 开发者不new MyFirstServlet(),由tomcat服务器创建对象
*/
public class MyFirstServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置编码
resp.setContentType("text/html;charset=utf-8");
//向浏览器输出内容
resp.getWriter().write("hello,这是我的第一个Servlet");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
5.配置web.xml文件
<?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_3_1.xsd"
version="3.1">
<!--配置网站信息-->
<!--配置一个Servlet-->
<servlet>
<!--相当于在tomcat中穿梭的标识-->
<servlet-name>MyFirstServlet</servlet-name>
<!--Servlet类名,必须为全限定名-->
<servlet-class>com.github.sweeeeeet.tomcat.MyFirstServlet</servlet-class>
</servlet>
<!--配置Servlet的映射信息-->
<servlet-mapping>
<servlet-name>MyFirstServlet</servlet-name>
<!--映射路径-->
<url-pattern>/myFirstServlet</url-pattern>
</servlet-mapping>
<!--配置另一个Servlet的映射信息-->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.github.sweeeeeet.tomcat.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
</web-app>
6.使用maven打成war包,放入tomcat程序中
请求的流程:
1.tomcat 服务器启动–创建Servlet对象
2.将request对象封装到HttpServlet中,成为HttpServletRequest
3.解析HttpServlet中的一些内置方法并初始化
在maven的web工程中,提交一个uri请求,tomcat会优先在web.xml文件中查询动态资源地址,如果没有,在当前根目录下查询静态资源。
映射路径的写法
- 精确匹配
/文件名
;在浏览器请求的uri为:http://localhost:8080/文件名 - 模糊匹配
a./*
;*表示任意路径
b.*.action
;以指定后缀名结尾
在映射路径中不能以精确匹配加模糊匹配的方式出现
精确匹配的优先级高于模糊匹配
以指定后缀名结尾的后缀名模糊匹配的优先级最低