JavaWeb---tomcat容器

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文件



    4.0.0

    war
    com.github.sweeeeeet
    tomcat-http
    1.0-SNAPSHOT


    
        javax.servlet
        javax.servlet-api
        3.1.0
        provided
    


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文件




    
    
    
        
        MyFirstServlet
        
        com.github.sweeeeeet.tomcat.MyFirstServlet
    
    
    
        MyFirstServlet
        
        /myFirstServlet
    
     
    
        HelloServlet
        com.github.sweeeeeet.tomcat.HelloServlet
    
    
        HelloServlet
        /helloServlet
    

6.使用maven打成war包,放入tomcat程序中

请求的流程:
1.tomcat 服务器启动–创建Servlet对象
2.将request对象封装到HttpServlet中,成为HttpServletRequest
3.解析HttpServlet中的一些内置方法并初始化

在maven的web工程中,提交一个uri请求,tomcat会优先在web.xml文件中查询动态资源地址,如果没有,在当前根目录下查询静态资源。

映射路径的写法

  1. 精确匹配
    /文件名;在浏览器请求的uri为:http://localhost:8080/文件名
  2. 模糊匹配
    a./* ;*表示任意路径
    b.*.action;以指定后缀名结尾

在映射路径中不能以精确匹配加模糊匹配的方式出现
精确匹配的优先级高于模糊匹配
以指定后缀名结尾的后缀名模糊匹配的优先级最低

你可能感兴趣的:(JavaWeb---tomcat容器)