08_Java Web——web介绍


Web核心介绍

Web : 全球广域网,也成为万维网(www),能够通过浏览器访问的网站
JavaWeb : 使用Java技术来解决相关web互联网领域的技术栈

JavaWeb技术栈
    B/S架构:Browser/Server,浏览器/服务器架构模式。
        客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。
        浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可。
        优点:易于维护升级:服务端升级后,客户端无需任何部署就可以使用到新的版本。

    静态资源:HTML、CSS、JavaScript、图片等,负责页面展示
    动态资源:Servlet、JSP等,负责逻辑处理
    数据库:负责存储数据
    HTTP协议:定义通信规则
    Web服务器:负责解析HTTP协议,解析请求数据,并发送响应数据

HTTP

HTTP简介

HyperText Transfer Protocol:超文本传输协议
    规定了浏览器与服务器之间数据传输规则

HTTP协议特点:
    1. 基于TCP协议:面向连接,安全
    2. 基于请求-响应模型的:一次请求对应一次响应
    3. HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的
        * 缺点:多次请求不能共享数据。Java中使用会话技术解决此问题
        * 优点:速度快

HTTP请求数据格式

在这里插入图片描述

* 请求数据分为三部分
    1. 请求行:请求数据的第一行。请求方式 资源路径 协议版本
    2. 请求头:第二行开始,格式为key:value形式
        常见HTTP请求头
            Host:表示请求的主机名
            User-Agent:浏览器版本
            Accept:浏览器能接收的资源类型
    3. 请求体:POST请求的最后一部分,存放请求参数
        有一空行与请求头隔开

* GET请求和POST请求区别:
    1. GET请求请求参数在请求行中,没有请求体。POST请求请求参数在请求体中
    2. GET请求请求参数大小有限制,POST没有

HTTP响应数据格式

在这里插入图片描述

* 响应数据分为三部分
    1. 相应行:响应数据的第一行。协议版本 响应状态码 状态码描述
        状态码大类:
            1xx:响应中
            2xx:成功
            3xx:重定向
            4xx:客户端错误
            5xx:服务器端错误
    2. 响应头:第二行开始,格式为key-value形式
        常见的HTTP响应头:
            Content-Type:响应内容的类型
            Cache-Control:指示客户端应如何缓存
    3. 响应体:最后一部分,存放响应数据

Web服务器——Tomcat

简介

Web服务器作用:
    * 封装HTTP协议操作,简化开发
    * 可以将Web项目部署到服务器中,对外提供网上浏览服务

基本使用

Tomcat的下载、安装、卸载、启动、关闭、配置、部署项目
    启动:双击bin/startup.bat

配置

1. 修改启动端口号:conf/server.xml  
    HTTP协议默认端口号为80

部署项目

将项目放到webapps目录下,即部署完成

一般JavaWeb项目会被打成war包,然后将war包放到webapps目录下,Tomcat会自动解压缩war文件

IDEA中创建Maven Web项目

创建方式:
    1. 不使用骨架:
        1.1 选择web项目骨架,创建项目
        1.2 pom.xml中添加打包方式为war
        1.3 补齐缺失的目录结构
    2. 不使用骨架:
        2.1 选择web项目骨架,创建项目
        2.2 删除pom.xml中多余的坐标
        2.3 补齐缺失的目录结构
    <!--
        <packaging>:打包方式
        *jar:默认值
        *war:web项目
    -->
    <packaging>war</packaging>

IDEA中使用Tomcat

IDEA中使用Tomcat的两种方式:
    1. 集成本地Tomcat
    2. Tomcat Maven插件(支持到Tomcat7)
<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <port>8080</port>
        <path>/</path>
    </configuration>
</plugin>

Servlet

快速入门

1. 创建web项目,导入Servlet依赖坐标

<!--pom.xml-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>

2. 创建:定义一个类,实现Servlet接口

public class ServletDemo implements Servlet{
    public void service(){}
}

3. 配置:配置Servlet访问路径

@WebServlet("/demo")
public class ServletDemo implements Servlet{
    public void service(){}
}

例:

@WebServlet("/demo")
public class ServletDemo implements Servlet {
    public void init(ServletConfig servletConfig) throws ServletException {

    }
    public ServletConfig getServletConfig() {
        return null;
    }
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello World!");
    }
    public String getServletInfo() {
        return null;
    }
    public void destroy() {

    }
}

4. 访问:启动Tomcat,输入url访问该Servlet

注一问题未解决:
    使用IDEA集成Tomcat运行无法访问此Servlet
    使用Tomcat Maven插件运行可以访问

Servlet执行流程

Servlet被访问时,service()方法自动执行
1. Servlet由谁创建?Servlet方法由谁调用?
    * Serlvet由web服务器创建,Servlet方法由web服务器调用
2. 服务器怎么知道Servlet中一定有service()方法?
    * 自定义的Servlet必须实现Servlet接口并复写其方法,而Servlet接口中有service()方法

Servlet生命周期

Servlet运行在Servlet容器(web服务器)中,其生命周期由容器来管理,分为四个阶段:
   1. 加载和实例化:
       默认情况下,当Servlet第一次被访问时,由容器创建Servlet对象。
   2. 初始化:
       在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象,该方法只被调用一次。
       完成一些如加载配置文件、创建连接等初始化工作。
   3. 请求处理:
       每次请求Servlet时,Serlvet容器都会调用Servlet的service()方法对请求进行处理。
   4. 服务终止:
       当需要释放内存或容器关闭时,容器就会调用Serlvet实例的destroy()方法完成资源的释放。
       在destory()方法调用后,容器会释放这个Servlet实例,该实例随后会被Java的垃圾收集器所回收。
@WebServlet(urlPatterns = "/demo", loadOnStartup = 1)
    /*
        loadOnStartup:
            负整数:第一次被访问时创建Servlet对象
            0或正整数:服务器启动时创建Servlet对象,数字越小优先级越高
    */
public class ServletDemo implements Servlet {
    //初始化方法,在Servlet被创建时执行,只执行一次
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("ServletDemo init");
    }
    //提供服务方法,每次Servlet被访问,都会调用此方法
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Hello World!");
    }
    //销毁方法,当Serlvet被销毁时调用该方法
    public void destroy() {
        System.out.println("ServletDemo destroy");
    }

    //或取ServletConfig对象
    public ServletConfig getServletConfig() {
        return null;
    }
    //获取Serlvet信息
    public String getServletInfo() {
        return null;
    }

}

Servlet体系结构

Servlet:Serlvet体系根接口
GenericServlet:Servlet抽象实现类
HttpSerlvet:对HTTP协议封装的Servlet实现类
由于多数开发的B/S架构的web项目,都是针对HTTP协议,所以我们自定义的Servlet会继承HttpSerlvet
public class ServletDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}
1. HttpSerlvet中为什么要根据请求方式不同,调用不同方法?
    * get和post请求方式请求消息不一样,需要分别处理
2. 如何调用
    * 获取请求方式并进行逻辑判断
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //根据请求方式不同,进行分别的处理
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        //1. 获取请求方式
        String method = request.getMethod();
        //2. 判断请求方式
        if ("GET".equals(method)) {
            //get方式处理逻辑
        }else{
            //post方式处理逻辑
        }
    }

Servlet urlPattern配置

1. 一个Servlet,可以配置多个urlPattern
2. urlPattern配置规则(优先级由上至下):
    * 精确匹配:"/user/select"
    * 目录匹配:"/user/*"
    * 扩展名匹配(不能以斜杠开头):"*.do"
    * 任意匹配:"/*" 或者 "/"
    注:当Servlet配置了"/",会覆盖掉tomcat中的DefaultServlet
@WebServlet(urlPatterns = {"/demo7", "/demo8"})

XML配置方式编写Servlet

Servlet从3.0版本后开始支持使用注解配置,3.0版本之前只支持XML配置文件的配置方式

步骤:

  1. 编写Servlet类
  2. 在web.xml中配置该Servlet
<web-app>
  <!--Servlet全类名-->
  <servlet>
      <servlet-name>demo</servlet-name>
      <servlet-class>com.ziping.web.servlet.ServletDemo</servlet-class>
  </servlet>
  <!--Servlet访问路径-->
  <servlet-mapping>
      <servlet-name>demo</servlet-name>
      <url-pattern>/demo</url-pattern>
  </servlet-mapping>
</web-app>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子平Zziping

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

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值