服务器温习笔记(一)Tomcat和Servlet

动态资源和静态资源

静态资源

所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器解析。如html, css, JavaScript

动态资源

每个用户访问相同的资源后,得到的结果可能不一样。称为动态资源。动态资源被访问后,需要转换成为静态资源,在返回给浏览器。如:sevlet/jsp/php,asp;

web服务器软件

服务器: 安装了服务器软件的计算机
服务器软件: 接收用户的请求,处理请求,做出响应
web服务器软件: 接收用户请求,处理请求,做出响应。

  1. web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目。
  2. web容器
    javaEE: Java语言在企业级开发中使用的技术规范的总和。一共规定了13项大的规范。

常见java web服务器软件

weblogic

weblogic为oracle 公司开发的大型JavaEE服务器,支持所有的JavaEE规范,收费的。

webSphere

webSphere:IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费的。

JBOSS

JBOSS:JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,本身免费,但文档等服务是收费的,所以是间接收费的。

Tomcat

Tomcat:Apache基金组织,中小型的JavaEE服务器,仅仅支持少量的JavaEE规范servlet/jsp,开源的,免费的。

Tomcat

web服务器软件

下载

下载地址
直接找到download下载即可:
在这里插入图片描述
tomcat目录结构
在这里插入图片描述

安装

安装也是比计较简单,直接解压即可完成安装。
notes:安装目录建议不要有中文和空格。

使用(windows环境)

启动

在windows下启动比较简单,进入解压后的tomcat的bin目录,直接双击startup.bat即可启动
在这里插入图片描述
在这里插入图片描述
访问浏览器输入:http://localhost:8080
http://ip:8080
已经启动成功
在这里插入图片描述

tomcat启动常见的问题
  1. 黑窗口一闪而过
    原因: 没有正确的配置JAVA_HOME环境
    tomcat的启动和运行都是依赖于JAVA_HOME,可以参考脚本文件。
    在这里插入图片描述在这里插入图片描述
    此类可直接配置正确的jdk环境变量即可,若果不会配置,请看小猿的文章jdk离线安装即可。
  2. 启动报错
    可以查看日志文件
    在这里插入图片描述
    在这里插入图片描述
    此类问题有两种解决方法:
    方法一:暴力解决方案
    cmd进入黑窗口,输入命令:
netstat -ano

在这里插入图片描述
在黑窗口中输入命令.

taskmgr.exe

如果pid不显示,可进行如下操作
在这里插入图片描述
在这里插入图片描述
再次启动就不会报错了。
方法二:修改配置文件
修改tomcat安装目录下的config目录下的server.xml中的默认端口,比较麻烦,还可能会导致修改一次不成功的现象。需要根据错误信息,将所有冲突端口逐一修改。
一般情况下只需要修改下面的一段配置文件。

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

关闭

正常关闭

通过tomcat bin目录下的批处理文件

bin/shutdown.bat

通过ctrl+c

强制关闭

直接点击启动窗口的关闭按钮(X)

配置

配置主要体现在部署项目的方式上:

  1. 直接将文件目录或者war包放在webapps目录下即可
    项目目录+虚拟目录(不用war包,直接拷贝)
    简化部署:达成war包,拷贝到webapps下面即可。tomcat将会自动解压并完成部署。
  2. 配置文件部署
    hello.html文件
    在这里插入图片描述
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>跳转首页</title>
    <style>
        p{
    
    
            text-align: center;
            font-size: large;
        }
        span{
    
    
            color: red;
        }
    </style>
    <script>
        var userTime = 30;
        var timer = setInterval(fun,1000);
        function fun() {
    
    
            var spanElem = document.getElementById("time");
            userTime --;
            spanElem.innerHTML = userTime+"";
            if(userTime ===0){
    
    
                clearInterval(timer);
                window.location="http://www.openedv.com/"
            }
        }
    </script>
</head>
<body>
<p><span id="time">30</span>秒钟后自动跳转首页</p>
</body>
</html>

在server.xml中添加部署文件。

<Context docBase="D:\hello"  path="/tomcat"/>

其中path是虚拟目录,访问项目。
在这里插入图片描述
tomcat中可以部署多个项目,若直接在server.xml配置文件中部署项目,则会破坏原有的默认配置,若有多个部署的项目,则此种方法无法完成。

  1. 在conf/Catalina/localhost目下写入xml文件(热部署方法,最推荐的部署方式)
    在这里插入图片描述
    xml文件直接可以将原来的项目标签复制过来并删除path属性
<Context docBase="D:\hello" />

在这里插入图片描述
在这里插入图片描述

卸载

删除安装目录即可

静态项目和动态项目

java动态项目的目录结构:

 项目的根目录
	-- WEB-INF目录:
		-- web.xml:web项目的核心配置文件
		-- classes目录:放置字节码文件的目录
		-- lib目录:放置依赖的jar包

如果是静态项目则进行配置即可。

tomcat与idea的整合

需要设置tomcat
在这里插入图片描述
在这里插入图片描述
最后连续点击ok即可实现tomcat配置,目前小猿的tomcat已成功配置。
建立项目。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击finish后返回到上一层窗口,点击ok等待项目创建完成即可。

tomcat虚拟目录配置

在这里插入图片描述

tomcat实现热部署

在这里插入图片描述
在这里插入图片描述
选择后就可实现更新资源热部署。

tomcat与idea的相关配合

  1. IDEA会为每一个tomcat部署的项目单独建立一份配置文件
    查看控制台的log:Using CATALINA_BASE:
C:\Users\lxpxu\AppData\Local\JetBrains\IntelliJIdea2020.1\tomcat\_day15

在这里插入图片描述
修改端口会改变临时的Servlet
在这里插入图片描述

在这里插入图片描述

  1. 工作空间项目 和tomcat部署的web项目
    tomcat真正访问的是“tomcat部署的web项目”,“tomcat部署的web项目"对应着"工作空间项目” 的web目录下的所有资源。
    web。
    WEB-INF目录下的资源不能被浏览器直接访问。
  2. tomcat断点调试
    在需要调试的程序里面打上断点,然后以小虫子的方式启动即可
    在这里插入图片描述

linux环境下tomcat的安装和使用

至于linux环境下tomcat的安装和使用请看小猿tomcat专栏下的如何在tomcat服务器中手动部署war包文章,其中详细描述了如何在linux下使用tomcat。

servlet

什么是servlet

servlet :server applet 即运行在服务器端的小程序。
servlet 的英文解释是:
在这里插入图片描述
servlet本质是一个接口,该接口定义了java类被浏览器访问到(tomcat识别)的规则
servlet原理图示:
在这里插入图片描述

servlet 的用法

  1. 创建javaEE项目。
  2. 定义一个类,实现Servlet接口。
  3. 实现接口中的抽象方法
    实现servlet中五个方法的重写。
    在service方法写入响应代码:
    //提供服务的方法
    @Override
    public void service(ServletRequest servletRequest, 
                        ServletResponse servletResponse) throws ServletException, IOException {
    
    
        System.out.println("hello java");
    }

  1. 配置servlet
    需要在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">
    <!--set servlet-->
    <servlet>
        <servlet-name>test01</servlet-name>
        <servlet-class>com.feitian.web.servlet.My01Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>test01</servlet-name>
        <url-pattern>/test01</url-pattern>
    </servlet-mapping>
</web-app>

测试结果:
在浏览器输入栏中键入访问地址,就不断会执行service里面的方法。

http://localhost:8080/servlet/test01

在这里插入图片描述

servlet执行原理

在这里插入图片描述
执行说明:

  1. 当服务器接受到客户端浏览器的请求后,会解析请求URL路径,获取访问的Servlet的资源路径
  2. 查找web.xml文件,是否有对应的标签体内容。
  3. 如果有,则在找到对应的全类名
  4. tomcat会将字节码文件加载进内存,并且创建其对象
  5. 调用其方法(上个例子中暂时调用servlet方法)。
    servlet 中几个重要的函数
public class My01Servlet implements Servlet {
    
    
//首次访问servlet时,servlet被创建,该方法别执行,该方法只能被执行一次
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
    
    

    }
    //获取servlet配置对象,了解一下即可
    @Override
    public ServletConfig getServletConfig() {
    
    
        return null;
    }
    //提供服务的方法,每访问一次Servlet,就执行一次service方法。可以多次执行
    @Override
    public void service(ServletRequest servletRequest,
                        ServletResponse servletResponse) 
            throws ServletException, IOException {
    
    
        System.out.println("hello java");
    }
    //获取servlet的一些信息,版本作者等等。
    @Override
    public String getServletInfo() {
    
    
        return null;
    }
    //销毁方法,在服务器正常关闭之前执行,只执行一次。
    //非正常关闭,该方法就不会别执行。
    @Override
    public void destroy() {
    
    

    }
}

servlet执行的生命周期

被创建:

执行init方法,只执行一次,一般用于加载资源
Servlet什么时候被创建?
默认情况下,第一次被访问时,Servlet被创建
可以配置执行Servlet的创建时机。

<servlet>标签下配置
1)第一次被访问时,创建
 <load-on-startup>的值为负数
2)在服务器启动时,创建
<load-on-startup>的值为0或正整数

Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
多个用户同时访问时,可能存在线程安全问题。
解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值

提供服务

每次访问Servlet时,Service方法都会被调用一次,可执行多次

被销毁

Servlet被销毁时执行。服务器关闭时,Servlet被销毁。
只有服务器正常关闭时,才会执行destroy方法且只执行一次。
destroy方法在Servlet被销毁之前执行,一般用于释放资源。

Servlet3.0

优点:
支持注解配置,可以不创建web.xml

注解开发使用步骤

  1. 创建JavaEE项目,选择Servlet的版本3.0以上,可以不创建web.xml
  2. 定义一个类,实现servlet接口
  3. 复写方法
  4. 在类上使用@WebServlet注解,进行配置
    @WebServlet注解代码
public @interface WebServlet {
    
    
    String name() default "";

    String[] value() default {
    
    };

    String[] urlPatterns() default {
    
    };

    int loadOnStartup() default -1;

    WebInitParam[] initParams() default {
    
    };

    boolean asyncSupported() default false;

    String smallIcon() default "";

    String largeIcon() default "";

    String description() default "";

    String displayName() default "";
}

其中最重要的有urlPatterns,还有value

在servlet实现类上加入
@WebServlet(urlPatterns = "/test02")
//或者直接使用省略模式
@WebServlet("/test02")

Servlet 的体系结构

在这里插入图片描述
GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象
将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可
HttpServlet:对http协议的一种封装,简化操作。
1. 定义类继承HttpServlet。
2. 复写doGet/doPost方法。

Servlet相关配置

  1. urlpartten:Servlet访问路径
    一个Servlet可以定义多个访问路径 : @WebServlet({"/directory01","/directory02","/directory03"})
  2. 路径定义规则:
    1)/xxx:路径匹配
    2)/xxx/xxx:多层路径,目录结构
  1. *.do:扩展名匹配

猜你喜欢

转载自blog.csdn.net/xueshanfeitian/article/details/109445085
今日推荐