JavaWeb第十三天

本文回顾了Web基础知识,介绍了C/S和B/S架构,区分静态和动态资源,并详细讲解了Tomcat服务器、Servlet的工作原理及部署。重点讲解了如何配置Servlet和使用JavaEE项目,以及Servlet生命周期和注解配置。
摘要由CSDN通过智能技术生成

1、web相关概念回顾

软件架构
  C/S 客户端/服务器端
  B/S 浏览器/服务器端
资源分类
  静态资源
    所有用户访问后,得到的结果都是一样的,称为静态资源,
    静态资源可以直接被浏览器解析
    如:html css JavaScript
  动态资源
    每个用户访问相同资源后,得到的结果可能不一样,称为动态资源,
    动态资源被访问后,需要先转换为静态资源,再返回给浏览器
    如:servlet/jsp php asp
网络通信三要素
  IP 电子设备(计算机)在网络中的唯一标识
  端口 应用程序在计算机中的唯一标识 0-65536
  传输协议 规定了数据传输的规则
    基础协议
      TCP 安全协议,三次握手,速度较慢
      UDP 不安全协议,速度较快

2、web服务器软件

服务器
  安装了服务器软件的计算机
服务器软件
  接收用户的请求,处理请求,做出响应
web服务器软件
  接收用户的请求,处理请求,做出响应
  在web服务器软件中,可以部署web项目,让用户通过浏览器来访问这些项目
  web容器
常见的Java相关的web服务器软件
  webLogic Oracle公司 大型的JavaEE服务器,支持所有的JavaEE规范,收费
  webSphere IBM公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
  JBOSS JBOSS公司,大型的JavaEE服务器,支持所有的JavaEE规范,收费
  Tomcat Apache基金组织,中小型的JavaEE服务器,仅支持少量的JavaEE规范如servlet/jsp,开源免费
JavaEE
  Java语言在企业级开发中使用的技术规范的总和,一共规定了13项大的规范

3、Tomcat web服务器软件

下载
  http://tomcat.apache.org/
安装
  解压即可 安装目录建议不要包含中文
卸载
  删除安装目录即可
安装目录的结构
  bin
    可执行文件 .bat .exe .sh
  conf
    配置文件 .xml .properties
  lib
    依赖jar包
  logs
    日志文件
  temp
    临时文件
  webapps
    存放web项目
  work
    存放运行时的数据
启动
  双击bin/startup.bat
  浏览器访问自己localhost:8080
     访问别人 别人的ip:8080 8080是tomcat默认端口
可能遇到的问题
  启动tomcat,黑窗口一闪而过
    原因:没有正确配置JAVA_HOME这个环境变量,
       而startup.bat中用到了JAVA_HOME变量
  启动报错
    启动两次tomcat就会报错端口号被占用,错误可以在logs中看到
    解决
      将占用端口号的应用程序杀死
        cmd输入netstat -ano找到要使用的端口号对应的进程ID,即PID
        任务管理器打开进程选项卡,点击查看-选择列-勾上PID,
        找到对应的进程,右键结束进程
      或自己改一个端口号
        conf/server.xml 将两个Connector标签中的port和redirectPort,
        以及一个Server标签中的port改为别的
注意
  一般会将tomcat的端口改为80,因为其为HTTP协议的默认端口,改完访问就不用输入端口号
关闭
  正常
    双击shutdown.bat
    或在黑窗口中输入ctrl+c
  强制
    点击右上角的叉
配置
  部署项目的方式 开发了解法1 运维了解全部
    法1 直接将项目hello放到webapps目录下,就可以用浏览器访问了
        /hello 项目的访问路径(虚拟目录)
      简化部署
        将项目里的资源打包,改后缀名为war
        好处:打包后占用内存小,传输快
           复制war包到webapps下会自动解压,
           删除war包会自动删除其解压出的资源
        缺点:需要复制到webapps下
    法2 编辑conf/server.xml
      在标签体中配置
      
      需要重启服务器生效
      缺点:server.xml文件是用来配置tomcat整体的,
      在里面部署项目可能会损坏文件
    法3 推荐

        在conf/Catalina/localhost中创建一个任意名称的xml文件
        <Context docBase="项目存放的路径"/>
        访问路径就是该xml文件的名称
        优点:热部署,不想用这个xml文件了直接加上后缀_bak,不需要重启服务器就访问不到了

静态项目
  只能放静态资源
动态项目
  可以放静态资源和动态资源
  Java动态项目的目录结构
  – 项目的根目录
    – WEB-INF目录
      --web.xml web项目的核心配置文件
      --classes目录 放置字节码文件的目录
      – lib目录 放置依赖的jar包
将tomcat集成到idea中,并创建JavaEE的项目,部署项目
集成
  Run->Edit Configurations->Defaults->Tomcat Server->Local
  Application server 点击Configure… 选择tomcat安装目录,点击OK
创建项目
  创建Java项目,右键添加web框架,不勾选web.xml
部署项目
  Run->Edit Configurations->Tomcat->Deployment
  点击+,将项目对应的war exploded加上
  并修改项目对应的虚拟目录
  修改On update action和On frame deactivation为Update Resources,就可以不重启服务器就访问修改后的页面

4、Servlet 查找JavaEE的API文档

Server Applet
概念
  运行在服务器端的小程序
  不同用户看到的动态资源可能不一样,因为动态资源存在一定的逻辑性,由Java代码体现,封装在Java类中
  浏览器请求动态资源找的是对应的Java类,这种Java类依赖于服务器执行,没有主方法,需要遵守一定的规则(接口)才能被Tomcat所识别
  Servlet就是一个接口,定义了Java类被浏览器访问到(被tomcat识别到)的规则
  定义这个接口的实现类就可以被tomcat所识别
快速入门
  创建JavaEE项目
  实现一个类,实现servlet接口
  实现接口中的抽象方法
  配置servlet 将上述实现类映射为虚拟目录,即访问的URL中最后的那项
  在web.xml中

    <!--配置Servlet-->
        <servlet>
            <!--映射后的URL的最后一项-->
            <servlet-name>demo01</servlet-name>
            <!--要进行映射的Servlet接口实现类的全类名(全类名想到反射)-->
            <servlet-class>web.servlet.Demo01Servlet</servlet-class>
        </servlet>
        <servlet-mapping>
            <servlet-name>demo01</servlet-name>
            <url-pattern>/demo01</url-pattern>
        </servlet-mapping>
      实现Servlet接口的步骤:
        在web.servlet包中新建一个类文件,实现Servlet接口,重写方法
           在web.xml中配置这个类文件所对应的资源路径
public class Demo01Servlet implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("hello,servlet");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

执行原理
  补充:修改虚拟目录路径 Run->Edit Configuration->Tomcat9.0.40->Deployment->Application context
  浏览器输入URL:http://localhost:8080/day13/demo01
  localhost:8080找到tomcat day13找到当前项目
  /demo01找到资源
  tomcat先找到web.xml,遍历寻找是否有url-pattern标签中是/demo01,然后找对应的servlet-name->demo01,
  接着通过servlet-name找到对应servlet标签里的servlet-class,
    (1)tomcat将全类名对应的字节码文件加载进内存 Class.forName();
    (2)创建对象 cls.newInstance();
    (3)调用方法 service();因为我们实现了Servlet接口,其中有service方法,所以实现类中必须重写service方法
Servlet方法
  生命周期
    init 初始化方法 用于加载资源
      在Servlet被创建时执行,只会执行一次
      默认清况下,第一次被访问时创建
      可以修改创建时机为服务器启动时
        web.xml->servlet标签中的load-on-startup标签
        标签体为负数则访问时创建 默认-1
        标签体为0或正数则启动时创建 一般0-10
      只会执行一次说明Servlet在内存中只存在一个对象,是单例的
        多线程访问同一对象可能存在多线程访问安全问题(多用户同时访问)
        加锁(同步代码块)会严重影响性能
        解决:尽量不要在Servlet中定义成员变量,而在方法中定义局部变量
           即使定义了成员变量,也不要对其修改值
    service 提功服务方法
      每一次Servlet被访问时执行,执行多次
    destroy方法 销毁方法 用于释放资源
      在服务器正常关闭时执行,关闭时servlet被销毁,执行一次。
      在servlet被销毁之前执行
    getServletConfig
      获取ServletConfig对象
    getServletInfo
      获取ServletInfo对象(Servlet的一些信息,如版本、作者等等)

public class Demo02ServletMethod implements Servlet {

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

Servlet3.0 JavaEE6之后才支持
  好处:
    支持注解配置 可以不需要web.xml进行配置
  步骤:
    (1)创建JavaEE项目,选择Servlet的版本3.0以上 可以不勾选创建web.xml
    (2)定义Servlet实现类
    (3)重写方法
    (4)在类上使用@WebServlet注解进行配置
      @WebServlet(urlPatterns = “/demo01”)
      或@WebServlet("/demo01")
        注解中有一个特别的变量value表示最重要的属性,赋值时可以省略value=
  IDEA与tomcat的相关配置
  (1)IDEA会为每一个tomcat部署的项目单独建立一份配置文件
    查看控制台的log
      Using CATALINA_BASE:       
      “C:\Users\Administrator\AppData\Local\JetBrains
      \IntelliJIdea2020.2\tomcat\Tomcat_9_0_40_JavaWeb”
  (2)工作空间项目和tomcat部署的web项目
    tomcat真正访问的是tomcat部署的web项目
    tomcat部署的web项目对应着工作空间项目的web目录下的所有资源
    WEB-INF目录下的资源不能被浏览器直接访问
  (3)tomcat的断点调试 使用启动按钮旁边的小虫子按钮 debug启动
Servlet体系结构
  Servlet接口 有1个实现类
    GenericServlet 抽象类 有1个子类 只有一个抽象方法service,其它方法做了默认空实现
      要实现Servlet接口只要继承GenericServlet类,重写service方法即可
      在service方法中需要实现:判断请求方式并获取数据
        String method = req.getMethod();
        if(“GET”.equals(method)) //常量放在equals前面防止空指针异常
        {
          GET方式获取数据
        } 
        else if(“POST”.equals(method))
        {
          POST方式获取数据
        }
      而在HttpServlet中封装了这些代码,在判断请求中调用了doGet和doPost方法
        String method = req.getMethod();
        if(“GET”.equals(method)) {doGet();}
        else if(“POST”.equals(method)) {doPOST();}
      HttpServlet 抽象类 对http协议的一种封装,简化操作 推荐
      使用步骤:
        (1)定义类继承HttpServlet
        (2)重写doGet/doPost
          通过浏览器直接访问是get
Servlet相关配置
  urlPatterns Servlet访问路径
    可以为一个Servlet定义多个路径 要用大括号括起来
      @WebServlet({"/demo02","/d4"})
    定义规则
      /***
        @WebServlet("/") 任意匹配 写什么都可以访问到 优先级最低
      /
*/*** 目录结构 多层路径
        @WebServlet("/user/demo02")
        @WebServlet("/user/
") 第2层路径任意匹配
      .do do可以替换为别的词 如action等等
        @WebServlet("
.do")
        可以通过localhost:8080/demo4.do访问

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值