WEB后端_Day01(JavaWeb、Web资源的分类、常用的Web服务器、Tomcat、Servlet)

WEB后端_Day01(JavaWeb、Web资源的分类、常用的Web服务器、Tomcat 服务器和 Servlet 版本的对应关系、Tomcat 的使用、在tomcat中部署web应用、使用idea创建一个web工程、在idea中将项目部署到tomcat、动态web技术、Servlet的生命周期、Servlet的另一种开发方式、Servlet的相关对象ServletConfig、Servlet的相关对象ServletContext)

JavaWeb

什么是JavaWeb

  • JavaWeb 是指,所有通过Java 语言编写可以通过浏览器访问的程序的总称,叫JavaWeb。
  • JavaWeb 是基于请求和响应来开发的。

什么是请求

  • 请求是指客户端给服务器发送数据,叫请求Request。

什么是响应

  • 响应是指服务器给客户端回传数据,叫响应Response。

请求和响应的关系

  • 请求和响应是成对出现的,有请求就有响应。

Web资源的分类

web 资源按实现的技术和呈现的效果的不同, 又分为静态资源和动态资源两种。

  • 静态资源: html、 css、 js、 txt、 mp4 视频 , jpg 图片
  • 动态资源: jsp 页面、 Servlet 程序

常用的Web服务器

  • Tomcat: 由 Apache 组织提供的一种 Web 服务器, 提供对 jsp 和 Servlet 的支持。 它是一种轻量级的 javaWeb 容器(服务器) , 也是当前应用最广的 JavaWeb 服务器(免费) 。
  • Jboss: 是一个遵从 JavaEE 规范的、 开放源代码的、 纯 Java 的 EJB 服务器, 它支持所有的 JavaEE 规范(免费) 。
  • GlassFish: 由 Oracle 公司开发的一款 JavaWeb 服务器, 是一款强健的商业服务器, 达到产品级质量(应用很少) 。
  • Resin: 是 CAUCHO 公司的产品, 是一个非常流行的服务器, 对 servlet 和 JSP 提供了良好的支持,性能也比较优良, resin 自身采用 JAVA 语言开发(收费, 应用比较多) 。
  • WebLogic: 是 Oracle 公司的产品, 是目前应用最广泛的 Web 服务器, 支持 JavaEE 规范,而且不断的完善以适应新的开发要求, 适合大型项目(收费, 用的不多, 适合大公司) 。

Tomcat 服务器和 Servlet 版本的对应关系

Servlet SpecJSP SpecEL SpecApache Tomcat versionSupported Java Versions
4.0TBD (2.4?)TBD (3.1?)9.0.x8 and later
3.12.33.08.5.x7 and later
3.12.33.08.0.x(superseded)
3.02.22.27.0.x6 and later (7 and later for WebSocket)
2.52.12.16.0.x5 and later
2.42.0N/A5.5.x (archived)1.4 and later
2.31.2N/A4.1.x (archived)1.3 and later
2.21.1N/A3.3.x (archived)1.1 and later

Servlet 程序从 3.0 版本是现在世面使用最多的版本(xml 配置)
到了 Servlet3.0 之后。 就是注解版本的 Servlet 使用。
以 3.0 版本为主线讲解 Servlet 程序。

Tomcat 的使用

安装

找到你需要用的 Tomcat 版本对应的 zip 压缩包, 解压到需要安装的目录即可。

在这里插入图片描述

tomcat的目录介绍

bin专门用来存放 Tomcat 服务器的可执行程序
conf专门用来存放 Tomcat 服务器的配置文件
lib专门用来存放 Tomcat 服务器的 jar 包
logs专门用来存放 Tomcat 服务器运行时输出的日记信息
temp专门用来存放 Tomcat 运行时产生的临时数据
web apps专门用来存放部署的 Web 工程。
work是 Tomcat 工作时的目录, 用来存放 Tomcat 运行时 jsp 翻译为 Servlet 的源码, 和 Session 钝化的目录。

tomcat的运行

在这里插入图片描述
启动界面
在这里插入图片描述
访问tomcat服务器
http://localhost:8080/
在这里插入图片描述
Tomcat启动时的常见问题:

  1. 出现了cmd窗口 但是cmd窗口一闪而过,没有启动运行窗口
    Tomcat是基于java语言开发的,因此tomcat的运行需要依赖jdk 依赖jvm 所以tocmat要正常启动,首先必须保证你的jdk的环境变量配置必须正确
    解决方案:就是检查你的环境变量的配置
    在这里插入图片描述
  2. 启动时报错
    确定问题:查看tomcat的启动日志
    在这里插入图片描述
    在这里插入图片描述
    这个原因是因为我们电脑的8080端口被其他程序占用。
    解决端口占用问题:修改配置文件 修改端口
    在这里插入图片描述
    在这里插入图片描述

tocmat的停止.

  1. 将启动的cmd窗口 直接关闭即可
  2. 可以通过tomcat的命令来关闭
    在bin目录下,运行shutdown.bat 即可停止tomcat的运行。

tocmat的下载

https://tomcat.apache.org/download-90.cgi
在这里插入图片描述

tomcat启动时,cmd窗口的中文乱码

修改conf/logging.properties
在这里插入图片描述
在这里插入图片描述

tocmat的相关配置

在这里插入图片描述
应用管理:conf/tomcat-user.xml
在这里插入图片描述
在这里插入图片描述
主机管理
在这里插入图片描述
在这里插入图片描述

在tomcat中部署web应用

欢迎页面的访问

apache-tomcat-9.0.43\webapps\ROOT这个目录就是欢迎页面项目所在的目录
ROOT目录 是tomcat的一个默认访问目录。
localhost:8080改地址默认访问的就是ROOT目录下的index.html/index.jsp等这样的页面

手动部署自己的应用到tocmat

方式一:将应用部署到webapps目录下
将《零点读书》网上书城的项目部署到tomcat中
部署的步骤:

  1. 在webapps目录下创建一个目录 books(项目名称)
  2. 将webcontent目录下的所有文件及目录拷贝到books目录下
  3. 重启tomcat
  4. 访问项目:http://localhost:8080/books/ 默认会访问项目下的index.html

方式二:采用目录映射的方式

  1. 如果不想将项目部署到webapps下 则可以将项目放置到服务器的任意目录下
  2. 在tomcat的conf\Catalina\localhost目录下 新建一个文件app.xml
<!-- Context 表示一个工程上下文
path 表示工程的访问路径:/abc
docBase 表示你的工程目录在哪里
-->
<Context path="/app" docBase="E:\books” />
  1. 重启tomcat
  2. 访问我们的应用
    http://localhost:8080/app/
    直接访问 和使用web服务器访问的区别
    直接访问:
    在这里插入图片描述
    Web访问
    http://localhost:8080/app/
    区别:
    1 协议不同:直接访问 使用file协议 web访问:http
    2 访问方式: 就是打开一个文件 基于请求响应模式

使用idea创建一个web工程

创建工程

在这里插入图片描述
项目命名
在这里插入图片描述
对Java项目提供web支持
在这里插入图片描述
在这里插入图片描述Web项目的最终目录结构

在这里插入图片描述
修改index.jsp的内容
在这里插入图片描述

在idea中将项目部署到tomcat

给idea配置tomcat

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

将项目工程部署到tomcat中

在这里插入图片描述
在这里插入图片描述
一般将Application_context的值修改为/
在这里插入图片描述
http://localhost:8080/

动态web技术

什么是Servlet

  1. Servlet 是JavaEE 规范之一。规范就是接口
  2. Servlet 就JavaWeb 三大组件之一。三大组件分别是:Servlet 程序、Filter 过滤器、Listener 监听器。
  3. Servlet 是运行在服务器上的一个java 小程序,它可以接收客户端发送过来的请求,并响应数据给客户端。

开发一个Servlet程序

需要在工程中引入tomcat容器对serlvet规范的实现引入相关依赖
在这里插入图片描述
创建一个类

package cn.lanqiao.servlet;

import javax.servlet.*;
import java.io.IOException;

/**
 * @author Mr.Hu
 * @create 2021/03/30
 */
public class HelloServlet implements Servlet {
    //    进行servlet的初始化
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        
    }
    //获取servlet 的配置
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    // servlet提供服务的方法
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }
    //获取serlvet信息的方案
    @Override
    public String getServletInfo() {
        return null;
    }
    //当servlet销毁的时候需要执行的方法
    @Override
    public void destroy() {

    }
}
  1. 配置servlet
    在web/WEB-INF/web.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>
        <servlet-name>hello</servlet-name>
        <servlet-class>cn.lanqiao.servlet.HelloServlet</servlet-class>
    </servlet>
<!--    配置serlvet的映射路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>
  1. 部署并启动
    http://localhost:8080/web01/hello
    请求的分析
    在这里插入图片描述

url-pattern的配置

第一种 :以/开头

<url-pattern>/hello</url-pattern>
http://localhost:8080/web01/hello/abc/def
<url-pattern>/hello/abc/def</url-pattern>
http://localhost:8080/web01/hello/abc/def
<url-pattern>/</url-pattern>
http://localhost:8080/web01/

第二种:使用通配符配置

<url-pattern>*.do</url-pattern>
使用通配符的时候  前边不能由/
<url-pattern>*.action</url-pattern>
*代表任意字符

Servlet的生命周期

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

}

Init方法只执行一次 而且默认是在serlvet第一次请求的时候执行。先于service方法执行。在整个过程中 执行一次。

@Override
public void destroy() {
    System.out.println("servlet 销毁。。。。。");
}

Destroy也只执行一次 实在servlet从servlet容器(tomcat)中卸载的时候 执行。

@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
    System.out.println("serlvet提供服务.......");
}

这是真正提供服务的方法。可以处理请求和响应。
在serlvet中存在构造方法,他也只执行一次,而且先于init方法执行。从而说明servlet是一个单例的。

Servlet的 构造和初始化时机:

  1. 默认情况下(<0) 实在第一次请求servlet的时候 构造和初始化serv’let
  2. 配置构造和初始化的时机load-on-startup

在这里插入图片描述
配置为>=0 则servlet随着容器的启动而完成构造和初始化
当参数大于等于0的时候 参数数值越小 构造和初始化的时机越早。

Servlet的另一种开发方式

package cn.lanqiao.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/**
 * @author Mr.Hu
 * @create 2021/03/30
 */
//此时通过继承HttpServlet   该servlet对http协议提供了更好的支持
//请求的方式  目前请求方式常用的就只有get和post  原因就在于浏览器只支持get和post  servlet是可以支持head  put  delete  get  post等  restful风格的请求的url
public class AppServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doPost(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("do post方法执行......");
    }
}

在以后的开发中,我们开发servlet只需要继承httpServlet即可,并需要重写其中的doGet和doPost方法

自定义的Servlet–>HttpServlet(抽象类)—>GenericServlet(抽象类)–> 实现了Servlet接口
在idea中快捷创建servlet
在这里插入图片描述
在这里插入图片描述

Servlet的相关对象ServletConfig

  • ServletConfig 类从类名上来看, 就知道是 Servlet 程序的配置信息类。
  • Servlet 程序和 ServletConfig 对象都是由 Tomcat 负责创建, 我们负责使用。
  • Servlet 程序默认是第一次访问的时候创建, ServletConfig 是每个 Servlet 程序创建时, 就创建一个对应的 ServletConfig 对象。
public void init(ServletConfig servletConfig) throws ServletException {
 	String  servletName =   servletConfig.getServletName();
  	ServletContext context = servletConfig.getServletContext();
  	Enumeration<String> pameterNames =  servletConfig.getInitParameterNames();//获取配置的所有的初始化参数的名称
    System.out.println(servletName);//hello
    System.out.println(context);//Servlet的上下文对象
   	while (pameterNames.hasMoreElements()){
    	String name =    pameterNames.nextElement();
    	//根据初始化参数的名称获取对应的值
    	String value = servletConfig.getInitParameter(name);
       System.out.println(name+"--"+value);
   }
}

ServletConfig 类的三大作用

  1. 可以获取 Servlet 程序的别名 servlet-name 的值
  2. 获取初始化参数 init-param
  3. 获取 ServletContext 对象
    在通过继承HttpServlet的Servlet中 如何获取ServletConfig对象?
    ServletConfig servletConfig = this.getServletConfig();

Servlet的相关对象ServletContext

什么是ServletContext

  1. ServletContext 是一个接口,它表示Servlet 上下文对象
  2. 一个web 工程,只有一个ServletContext 对象实例。
  3. ServletContext 对象是一个域对象。
  4. ServletContext 是在web 工程部署启动的时候创建。在web 工程停止的时候销毁。

什么是域对象?
域对象,是可以像Map 一样存取数据的对象,叫域对象。
这里的域指的是存取数据的操作范围,整个web 工程。

-存数据取数据删除数据
Mapput()get()remove()
域对象setAttribute()getAttribute()removeAttribute()

ServletContext 类的四个作用:

  1. 获取web.xml 中配置的上下文参数context-param
  2. 获取当前的工程路径,格式: /工程路径
  3. 获取工程部署后在服务器硬盘上的绝对路径
  4. 像Map 一样存取数据
@Override
public void init(ServletConfig servletConfig) throws ServletException {
  ServletContext context = servletConfig.getServletContext();//servlet的上下文对象
   String contextPath =  context.getContextPath();///web01
    System.out.println(contextPath);
    //获取初始化参数
    Enumeration<String> names =  context.getInitParameterNames();
    while(names.hasMoreElements()){
        String name = names.nextElement();
        String value= context.getInitParameter(name);
        System.out.println(name+"---"+value);
    }
    //使用servletContext域对象存取数据
    context.setAttribute("name","张三");
   String n =(String) context.getAttribute("name");
    System.out.println(n);
}

Web.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">
    <context-param>
        <param-name>school</param-name>
        <param-value>中北大学</param-value>
    </context-param>
    <context-param>
        <param-name>address</param-name>
        <param-value>太原</param-value>
    </context-param>
<!--    注册servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>cn.lanqiao.servlet.HelloServlet</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>admin</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>123455</param-value>
        </init-param>
<!--load-on-startup 必须位于init-param之后-->
        <load-on-startup>10</load-on-startup>
    </servlet>
<!--    配置serlvet的映射路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>test</servlet-name>
        <servlet-class>cn.lanqiao.servlet.TestServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>test</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>app</servlet-name>
        <servlet-class>cn.lanqiao.servlet.AppServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>app</servlet-name>
        <url-pattern>/app</url-pattern>
    </servlet-mapping>
</web-app>

在继承了httpservlet的servlet中 获取ServletContext对象

//获取servletContext对象
ServletContext context1 =  this.getServletContext();
ServletContext context2 = servletConfig.getServletContext();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值