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

ゝ一世哀愁。 2022-11-21 14:54 247阅读 0赞

动态资源和静态资源

静态资源

所有用户访问后,得到的结果都是一样的,称为静态资源,静态资源可以直接被浏览器解析。如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

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

  1. taskmgr.exe

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

  1. <Connector port="8080" protocol="HTTP/1.1"
  2. connectionTimeout="20000"
  3. redirectPort="8443" />

关闭

正常关闭

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

  1. bin/shutdown.bat

通过ctrl+c

强制关闭

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

配置

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

  1. 直接将文件目录或者war包放在webapps目录下即可
    项目目录+虚拟目录(不用war包,直接拷贝)
    简化部署:达成war包,拷贝到webapps下面即可。tomcat将会自动解压并完成部署。
  2. 配置文件部署
    hello.html文件
    在这里插入图片描述

    <!DOCTYPE html>




    跳转首页




    30秒钟后自动跳转首页



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

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

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

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

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

卸载

删除安装目录即可

静态项目和动态项目

java动态项目的目录结构:

  1. 项目的根目录
  2. -- WEB-INF目录:
  3. -- web.xmlweb项目的核心配置文件
  4. -- classes目录:放置字节码文件的目录
  5. -- 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方法写入响应代码:

    //提供服务的方法

    1. @Override
    2. public void service(ServletRequest servletRequest,
    3. ServletResponse servletResponse) throws ServletException, IOException {
    4. System.out.println("hello java");
    5. }
  4. 配置servlet
    需要在web.xml中配置servlet接口。

    <?xml version=”1.0” encoding=”UTF-8”?>
    <web-app xmlns=”http://xmlns.jcp.org/xml/ns/javaee“

    1. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    2. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
    3. http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    4. version="4.0">
    5. <!--set servlet-->
    6. <servlet>
    7. <servlet-name>test01</servlet-name>
    8. <servlet-class>com.feitian.web.servlet.My01Servlet</servlet-class>
    9. </servlet>
    10. <servlet-mapping>
    11. <servlet-name>test01</servlet-name>
    12. <url-pattern>/test01</url-pattern>
    13. </servlet-mapping>

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

  1. 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被创建,该方法别执行,该方法只能被执行一次

    1. @Override
    2. public void init(ServletConfig servletConfig) throws ServletException {
    3. }
    4. //获取servlet配置对象,了解一下即可
    5. @Override
    6. public ServletConfig getServletConfig() {
    7. return null;
    8. }
    9. //提供服务的方法,每访问一次Servlet,就执行一次service方法。可以多次执行
    10. @Override
    11. public void service(ServletRequest servletRequest,
    12. ServletResponse servletResponse)
    13. throws ServletException, IOException {
    14. System.out.println("hello java");
    15. }
    16. //获取servlet的一些信息,版本作者等等。
    17. @Override
    18. public String getServletInfo() {
    19. return null;
    20. }
    21. //销毁方法,在服务器正常关闭之前执行,只执行一次。
    22. //非正常关闭,该方法就不会别执行。
    23. @Override
    24. public void destroy() {
    25. }

    }

servlet执行的生命周期

被创建:

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

  1. 在<servlet>标签下配置
  2. 1)第一次被访问时,创建
  3. <load-on-startup>的值为负数
  4. 2)在服务器启动时,创建
  5. <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 {

    1. String name() default "";
    2. String[] value() default { };
    3. String[] urlPatterns() default { };
    4. int loadOnStartup() default -1;
    5. WebInitParam[] initParams() default { };
    6. boolean asyncSupported() default false;
    7. String smallIcon() default "";
    8. String largeIcon() default "";
    9. String description() default "";
    10. String displayName() default "";

    }

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

  1. servlet实现类上加入
  2. @WebServlet(urlPatterns = "/test02")
  3. //或者直接使用省略模式
  4. @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:多层路径,目录结构

  3. *.do:扩展名匹配

发表评论

表情:
评论列表 (有 0 条评论,247人围观)

还没有评论,来说两句吧...

相关阅读