Tomcat与Servlet基础

Tomcat和Servlet

Javaweb基础回顾

在学习Tomcat和Servlet之前,最好了解并熟悉下面的内容

1.软件架构

目前两种主流的软件架构:

  • C/S:客户端/服务端
  • B/S: 浏览器/服务器

该文中使用的就是B/S架构。

2.资源分类

  1. 静态资源:所有用户访问得到的结果都是一样的,静态资源能够直接被浏览器解析,例如HTML,CSS,JS
  2. 动态资源:每个用户访问得到的结果可能是不同的,动态资源在访问的时候,需要先转换为静态资源,然后返回给servlet/sjp,php等等

3. 网络通信三要素

  • IP:设备在网络中的唯一标识
  • 端口:应用程序在网路中的唯一标识,范围是0-65536
  • 传输协议:规定了数据传输的规则
    1. TCP:安全协议,要经过三次握手,但是速度较慢
    2. UDP:不安全协议,速度较快

web服务软件

  • 服务器:安装了服务器软件的计算机
  • 服务器软件:接收用户的请求,处理请求,做出相应反馈
  • web服务软件:在web服务软件中,能够部署web项目,让用户通过浏览器访问这些项目

常见的Java相关的服务器软件:

  1. webLogic:大型JavaEE服务器,支持所有的JavaEE规范
  2. webSphere
  3. JBOSS
  4. Tomcat:Apache基金会的开源项目

TomCat

Tomcat是由Apache激进化开发的一款开源免费的服务器软件,该服务器软件的部署比较简单,使用场景也比较多。但是不能够承载太大的项目,智能用于开发和维护一些中小型的web项目。对于个人使用,已经绰绰有余了。

安装和卸载都很简单,主要重要的就是项目的部署。

安装和卸载:

  • Tomcat官网Apache Tomcat® - Welcome!下载需要的版本的压缩包即可
  • 将压缩包解压到合适的目录中,这样就安装好了
  • 卸载也很简单,将整个文件删除就卸载完成了

目录中的各文件夹作用

  • bin:存放启动和关闭Tomcat脚本的,要启动服务器就直接双击startup.bat文件即可,服务器的默认端口号是8080
    • 启动后dos窗口中可能会出现乱码的情况,这并不影响服务器的运行,解决方案会面会讲到
  • lib:存放依赖jar包
  • lconf:存放配置文件
  • webapps:最重要的目录之一,以后所有开发的项目都部署在这个目录中

部署项目的方式有下面几种(后面使用IDEA进行开发的时候就不用再这里进行部署了,但是手动配置的时候需要知道怎么修改配置文件)

  1. 直接将项目放在webapps目录下即可

    • /hello:项目的访问路径–>虚拟路径(中间的就是虚拟路径)

      localhost/hello/hello.html
      
    • 简化部署,将项目打包成war包,然后将war包放在webapps目录下,war包会自动解压缩,不用任何干预

  2. 通过配饰config文件,在 < Host > 标签中添加项目的实际路径和虚拟路径

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

    其中docBase是项目存放的路径,path是访问的时候使用的虚拟路径

  3. 在conf\Catalina\localhost创建任意名称的xml文件。在文件中编写

    <Conntext docBase="D:\\hello">
    

    这种部署方式下,虚拟路径的名称就是xml文件的文件名

静态项目和动态项目

静态项目和动态项目具有不同的目录结构

Java动态项目目录结构

– 项目的根目录

– WEB-INF目录

–web.xml:web项目的核心配置文件

– calss目录:放置字节码文件的目录

– lib目录:放置依赖的jar包

将tomcat集成到IDEA

在实际的开发中,基本是不会每次将项目创建在本地的webapps中,不仅非常麻烦,而且每次编译后又要将字节码文件重新放进相关目录中,开发效率非常的低。所以一般在集成开发环境中配置Tomcat,例如IDEA

在IDEA中部署tomcat的具体步骤

  1. 点击菜单栏中的run ,选择Edit acaonfiguration,在其中添加Tomcat Server(Local),在右边的Configuration中选择要使用的Tomcat的版本,添加就行。默认的端口号不需要进行修改
  2. 点File,在其中new Moudle,选择模块为Java Enterpise,然后一直默认就行

成功部署之后,可以将其改为热部署,这样就不用每次重新启动服务,直接访问指定的页面就行

Servlet

servlet实际上就是一个接口,定义了Java类被浏览器访问到的

举一个简单的例子,即使是使用tomcat部署并访问一个简单的html文件的时候,访问的是一个静态的资源,如果希望让静态资源编成动态资源,就需要进行数据库的连接。连接数据库需要使用JDBC技术,也就是说要编写java程序连接数据库,数据库中有多少条记录,页面上就显示多少条记录,这种技术被称为动态网页技术(动态网页技术指的是网页中的数据是动态的,根据数据库中的数据而变化)

后端在执行动态资源对应的java小程序的时候,取决于前端浏览器发送的请求路径,一个路径就对应一个java小程序,而小程序如果想要能和服务器进行交互,就要实现Servlet接口。所以这种程序也叫做Servlet程序。

在整个BS结构体系中,参与的角色

  • 浏览器的开发团队
  • WEB Server的开发团队
  • DB Server的开发团队
  • webapp的开发团队

不同角色之间遵守的规范

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bgCUINWS-1645876440617)(D:/ALB/Java%E5%85%A8%E6%A0%88%E7%B3%BB%E7%BB%9F%E5%AD%A6%E4%B9%A0/JavaWeb%20BS%E7%B3%BB%E7%BB%9F%E7%BB%93%E6%9E%84%E8%A7%92%E8%89%B2%E5%92%8C%E5%8D%8F%E8%AE%AE.png)]

由于大部分的规范已经被实现,所以在进行webapp开发的时候,只需要

  • 编写一个类实现servlet接口

  • 将编写的类配置到配置文件中,在配置文件中:指定请求路径和类名的关系

    注意:配置文件的存放路径和文件名不能随便设定,文件名和文件路径都是sun公司制定的规范中的明细

严格意义上servlet并不是一个简单的接口,其中明确的规定了

  • 一个合格的webapp应该是怎样的目录结构
  • 一个合格的webapp应该有怎样的配置文件
  • 一个合格的webapp配置文件路径应该放在哪里
  • 一个合格的webapp中java程序放在哪里

如何开发一个带有servlet的webapp

先不使用IDEA继承集成开发环境,先直接手撸,之后再使用集成开发环境进行编写。管使用IDEA进行编写非常的方便,但是在初学的时候还是建议先手撸,这样能够更好的熟悉各个项目部署的目录结构、各个目录的作用以及其之间的依赖关系、jar包的存放位置等等

  1. 在webapp目录下创建一个文件夹,名字为crm,文件夹名随便,这个名字就是项目的名称。根己项目的名称取名字就行

  2. 在crm目录下创建一个名为——WEB-IHF的目录,这个目录的名字是servlet规范中规定的,必须这样用

  3. 在WEB-INF目录下新建一个目录——classes。这个目录的名字也是servlet规范中规定的,必须一摸一样。这个目录的作用是用来存放以后java文件编译后的字节码文件

    之所以这样使用是为了确保项目的可移植性,即使以后使用的是其他的服务器,服务器也能够找到对的文件

  4. 在WEB-INF目录下新建一个目录——lib。这个目录是用来存放第三方的jar包的,jar包要放在这个地方。这个目录的名字也不能瞎写

  5. 在WEB-INF目录下新建一个文件——web.xml。这个文件是必须添加的,并且文件名也是规范的。web.xml实际上就是一个配置文件,其中定义了请求路径和servlet类之间的关系。这个文件最好从webapps目录中已有其他的项目中直接拷贝,不需要一定手写。

    <?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">
    </web-app>
    
  6. 上述步骤已经将目录结构定义好了,下面就是编写java程序和web页面了。其中java程序必须要实现servlet接口

    • 其中要注意的就是,使用到的servlet接口并不是JDK中的,而是JAVAEE的,是由Oracle提供的。并且servelet的jar包就在tomcat目录的lib目录中,这也就表示tomcat服务器中就有这个接口
    • 编写的Java源代码文件放在那里无所谓,只要将编译后的class文件放在calsses目录中就行
  7. 编写一个简单的HelloServlet.java

    package com.example.ServletDemo;
    
    import javax.servlet.*;
    
    public class HelloServlet implements Servlet {
        public void init(ServletConfig config) throws ServletException {
        }
    
        public void service(ServletRequest request, ServletResponse response) {
        }
    
        public void destroy() {
    
        }
    
        public String getServletInfo() {
            return " ";
        }
        
        public ServletConfig getServletConfig() {
            return null;
        }
    }
    
    
  8. 然后将上述java文件编译得到的class文件放在calsses目录中

  9. 编写配置文件,使得请求路径和Servlet类名关联在一起

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jKyxL4fj-1645876440624)(C:\Users\ALB\AppData\Roaming\Typora\typora-user-images\image-20220223172445081.png)]

    这里的注释只是做个样子,如果带着这里的注释启动tomcat的话,会报错的。

    正确的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_4_0.xsd"
             version="4.0">
    
            
             <servlet>
                <servlet-name>com</servlet-name>
                <servlet-class>com.example.ServletDemo.HelloServlet</servlet-class>
             </servlet>
    
           
             <servlet-mapping>
                <servlet-name>com</servlet-name>    
                <url-pattern>/com</url-pattern>         
            </servlet-mapping>
    </web-app>
    
    1. 启动tomcat服务器并在浏览器中输入http://127.0.0.1:8080/crm/com就能够将我们实现的Servlet接口类中的service中的信息发送到服务器中,在tomcat的dos窗口中就能看到刚才发送的字符串

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-L9mJQBeb-1645876440626)(C:\Users\ALB\AppData\Roaming\Typora\typora-user-images\image-20220223180523579.png)]

    2. 编写一个HTML文件:注意HTML文件只能放在WEB-INF目录之外,不能放在WEB-INF目录里面。以后就可以通过这个web页面中的一些操作进行向服务器发送数据了

    浏览器发送请求,到最终服务器调用servlet的过程

    • 用户输入URL,或者直接点击web页面中的超链接型服务器发送请求
    • Tomcat服务器获取请求,截取到项目名和虚拟路径
    • Tom找到项目
    • Tomcat服务器在web.xml文件中找到路径对应的servlet
    • Tomcat通过反射机制创建相应的对象,
    • Tomcat调用对象的service方法

    如何将信息直接输出到浏览器上

    需要使用ServletResponse接口:response。response表示响应,从服务器向浏览器发送数据叫响应

    response.setContentType("text/html");
    PrintWriter out=response.getwriter();
    
    

    然后调用out的print方法直接将要打印的字符串信息打印到浏览器页面中

    out.print("*******");
    

使用IDEA开发一个简单的Servlet

  1. 还是一如既往的创建一个项目,但与平时创建简单的项目不同,之前在IDEA中创建项目都是直接new Projecrt,这时候要新建的是Java EnterPrise.

  2. 创建Java Enterprise项目也并不复杂,目前阶段一直OK就行

  3. 这就是创建Java EnterPrise后的目录结构,是严格遵守Servlet规范的

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cB3uJ2Da-1645876440628)(C:\Users\ALB\AppData\Roaming\Typora\typora-user-images\image-20220226194516164.png)]

  4. 然后再将之前写的代码房间这里就行了,最好是放在java目录下

  5. 然后修改web.xml配置信息,编写一个HTML页面,其中HTML页面中再写链接至servlet程序的超链接的时候需要添加一个项目名,这个项目名是自定义的,随便写啥都行,但一定要/开头

    <a href="/hello/servlet/customers"> customers' information</a>
    
  6. 再添加项目名之后,一定要记得到tomcat的配置中的deployment中将默认的项目名修改成我们html文件中的项目名

  7. 然后编译代码,重启项目,再浏览器地址栏输入对应地址就能成功访问信息了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xEdfqNDf-1645876440633)(C:\Users\ALB\AppData\Roaming\Typora\typora-user-images\image-20220226195303853.png)]

未完待续… … … … … …

  • 0
    点赞
  • 5
    收藏
  • 打赏
    打赏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:深蓝海洋 设计师:CSDN官方博客 返回首页
评论

打赏作者

AlbCoolBoy

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值