JavaWeb(一) Servlet

前言:经过最近学习,web阶段快要学完,最近要从头复习下JavaWeb的知识

一、Web和JavaWeb的区别

1.1 简介

        Web是全球广域网,也称为万维网(www),能够通过浏览器访问的网站。

例如:平常我们访问的网站,像百度,淘宝这些网站统称为Web

        JavaWeb是Java提供的一门动态web资源开发技术,是用Java技术来解决相关web互联网领域的技术栈,像百度,腾讯等等都用java来开发系统。

其中用JavaWeb来开发有两大好处

1.跨平台

        在多人开发的条件下,由于JVM的存在,开发和部署服务器的系统可以随意挑选,只要有对应版本的JDK

2.开源多

        开源社区活跃,可以降低开发成本

1.2 B/S架构

        B/S架构 是 Browser/Server 的缩写,翻译过来就是 浏览器/服务器 架构模式,它的特点是,用户只需要用浏览器访问服务器,就可以获取web资源,具体如图

JavaWeb(一) Servlet_第1张图片

B/S架构的好处:易于维护升级;服务器端升级后,客户端无需任何部署就可以使用到新的版本。

1.3 静态资源

        静态资源主要包含HTML、CSS、JavaScript、图片等,主要负责页面的展示。其特点就是,每个用户看到的都是一样的页面,而且是固定的,不能随着用户的变化进行动态的变化。

1.4 动态资源

        动态资源主要包含Servlet、JSP等,主要用来负责逻辑处理特点是,进行逻辑的处理,并且将逻辑的处理结果给静态资源进行动态展示,所以静态资源和动态资源要一起使用。

1.5 数据库

        数据库主要用来存储数据

例如:用户登录,在客户端请求服务器时,服务器会从数据库取出数据,并对客户端输入的数据进行比较,会把资源相应给用户,若正确则会放行,若匹配不成功则会提示用户。逻辑处理如下图

        JavaWeb(一) Servlet_第2张图片

1.6 HTTP协议

        这里简略说一下HTTP协议,目前我购入两本《图解TCP/IP》和《图解HTTP》目前读了一半,等读完会进行详细总结讲解

        这里讲解在调试过程中经常出现到的集中HTTP响应状态码

  • 200 ok 客户端请求成功(一切成功!!!)

  • 404 Not Found 请求资源不存在(地址栏写错误)

  • 500 Internal Server Error 服务端发生不可预期的错误(一般是服务器内部报错-通常会有报错信息提示)JavaWeb(一) Servlet_第3张图片

    二、Servlet使用

Servlet是JavaEE规范之一,其实就是一个接口,将来我们需要定义Servlet类实现Servlet接口,并由web服务器运行Servlet。

 2.1 实现Servlet

1)需要提前导入Servlet依赖坐标(也可以在Maven仓库中查找)


    javax.servlet
    javax.servlet-api
    3.1.0
    provided

*这里需要注意:这题添加scope中添加了bean的作用域为provided,因为Tomcat的lib目录中已经有servlet-api这个jar包,如果在生成war包的时候生效就会和Tomcat中的jar包冲突,导致报错

2)定义一个类,实现Servlet接口,并重写接口中所有方法(包含了Servlet的5个生命周期-其中三个常用的)

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

@WebServlet("/Test")
public class Test implements Servlet {
    /*
    初始化方法
    1.调用时机:默认情况下,Servlet被第一次访问时被调用
    2.调用次数: 1次
    */
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }
    /*
    获取Servlet的初始化参数
    (当servlet配置了初始化参数后,web容器在创建servlet实例对象时,
    会自动将这些初始化参数封装到ServletConfig对象中,
    并在调用servlet的init方法时,
    将ServletConfig对象传递给servlet。)
    */
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    /*
     提供服务
     1.调用时机:每一次Servlet被访问时,调用
     2.调用次数: 多次(每访问一次就调用一次)
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //获取请求方式,根据不同的请求方式进行不同的业务处理
        HttpServletRequest request = (HttpServletRequest)req;
       //1. 获取请求方式
        String method = request.getMethod();
        //2. 判断
        if("GET".equals(method)){
            // get方式的处理逻辑
        }else if("POST".equals(method)){
            // post方式的处理逻辑
        }
    }
    /*
    提供有关servlet 的信息
     */
    @Override
    public String getServletInfo() {
        return null;
    }
    /*
     销毁方法
     1.调用时机:内存释放或者服务器关闭的时候,Servlet对象会被销毁,调用
     2.调用次数: 1次
     */
    @Override
    public void destroy() {

    }
}

2.2继承HttpServlet实现Servlet

        在实际开发中2.1中的方法创建很复杂,需要重写很多方法,并且我们大部分时间是在service方法中进行编写,所以可以通过继承HttpServlet简化创建步骤,若在需要时可以用2.1中的方法创建。

        如图为Servlet的体系结构  

JavaWeb(一) Servlet_第4张图片

package Servlet;

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

@WebServlet(value = "/Servlet")
public class Servlet extends HttpServlet {
    /*
    get请求是调用的方法
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
    /*
    post请求调用的方法
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

2.3urlPattern配置

        一个Servlet可以配置多个urlPattern路径,如下

package Servlet;

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

@WebServlet(urlPatterns = {"/Test03","/Test04"})
public class Servlet extends HttpServlet {
    /*
    get请求是调用的方法
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
    /*
    post请求调用的方法
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

urlPattern配置规则总共有四种匹配

  • 精确匹配
package Servlet;

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

@WebServlet(urlPatterns = "/Test04/Test03")
public class Servlet extends HttpServlet {
    /*
    get请求是调用的方法
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
    /*
    post请求调用的方法
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

 在浏览器成功访问

JavaWeb(一) Servlet_第5张图片

  • 目录匹配
package Servlet;

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

@WebServlet(urlPatterns = "/Test04/*")
public class Servlet extends HttpServlet {
    /*
    get请求是调用的方法
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
    /*
    post请求调用的方法
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

运行结果

JavaWeb(一) Servlet_第6张图片

  •  扩展名匹配
package Servlet;

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

@WebServlet(urlPatterns = "*.a")
public class Servlet extends HttpServlet {
    /*
    get请求是调用的方法
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
    /*
    post请求调用的方法
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

运行结果

JavaWeb(一) Servlet_第7张图片

  • 任意匹配

package Servlet;

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

@WebServlet(urlPatterns = "/*")
public class Servlet extends HttpServlet {
    /*
    get请求是调用的方法
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
    /*
    post请求调用的方法
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req, resp);
    }
}

 

运行结果

 JavaWeb(一) Servlet_第8张图片

2.4五种urlPatterns配置的优先级

        精确匹配 > 目录匹配> 扩展名匹配 > /* > /

三、总结

        学完这些基本的Servlet就可以创建了,后续会总结过呢更多的使用,努力学习的一天!

你可能感兴趣的:(JavaWeb,java,intellij-idea,开发语言,后端)