• 【JavaWeb Servlet 06】


    一、Servlet技术

    1、何为Servlet

    • servlet本身就是一个接口,是javaEE的规范之一
    • servlet是javaWeb三大组件之一。三大组件分别是:Servlet程序,Filter过滤器,Listener监听器
    • servlet是运行在服务器上的一个Java小程序,它可以接受客户端发送过来的请求,并响应数据给客户端

    #案例:演示实现Servlet的简单程序

    需求:

    1、编写一个类去实现Servlet接口
    2、实现service方法,处理请求,并响应数据
    3、到web.xml中配置servlet程序的访问地址

    #Servlet程序的实例代码

    public class HelloServlet  implements Servlet{
    
     @Override //service方法是专门用来处理请求和响应的
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            System.out.println("Hello Servlet 被访问了");
        }
    }
    
    //实现Servlet接口,会重写其接口内的方法

    #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_3_1.xsd"
             version="3.1">
        <!--servlet标签给Tomcat配置servlet程序-->
        <servlet>
            <!--servlet-name标签 是servlet程序起的一个别名(一般是类名)-->
            <servlet-name>HelloServlet</servlet-name>
            <!--servlet-class 是servlet程序的全类名-->
            <servlet-class>com.wufq.servlet.HelloServlet</servlet-class>
        </servlet>
    
        <!--servlet-mapping标签的作用是告诉服务器,我当前配置的地址是给哪个Servlet程序使用-->
        <servlet-mapping>
            <!--servlet-name 标签是告诉服务器,我当前配置的地址给那个Servlet程序使用-->
            <servlet-name>HelloServlet</servlet-name>
            <!--url-pattern 标签配置访问地址:
            / 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径/
            /hello 表示地址为:http://ip:port/工程路径/hello
            -->
            <url-pattern>/hello</url-pattern>
        </servlet-mapping>
    </web-app>

    配置好以后,默认访问http://localhost:8080/,会直接访问web工程下的index.jsp文件,如果加上/hello,则会访问实现Servlet接口的service方法

    2、servlet的生命周期

    • 第一步执行Servlet构造器方法
    • 第二步执行init初始化方法 (前面两步在第一次访问的时候创建Servlet程序会调用)
    • 第三步执行service方法(备注:这一步每次访问都会被调用)
    • 第四步执行destroy销毁方法(在web工程停止的时候调用)

    3、serVlet的get和post请求的分发处理  (即:service方法,在前端执行get请求时可以执行get的服务,执行post请求执行post的服务)

    #案例验证:

    1)新建一个a.html文件设置一个表单,请求方式为:post

    <body >
        <form action="http://localhost:8080/hello" method="post">
            <input type="submit"/>
        </form>
    </body>

    2)get、post请求分发

     @Override //service方法是专门用来处理请求和响应的
        public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
            /*
            * service方法主要是处理请求和响应的方法,如何区分处理get和post请求呢?主要是用getNethod()方法,但是ServletRequest
            * 类没有此方法,但是ServletRequest的子类httpServletRequest有
            * */
    
            //类型转换
            HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
    
            //获取请求方式
            String method = httpServletRequest.getMethod();
    
            if("GET".equals(method)){
                doGet(); //get请求操作的方法
            }else if("POST".equals(method)){
                doPost(); //post请求操作的方法
            }
    
        }

    4、通过继承HttpServlet实现Servlet程序

    一般在实际项目开发中,都是使用 继承HttpServlet类的方式实现Servlet程序

    #案例演示:

    步骤:

    • 编写一个类去继承HttpServlet类
    • 根据业务需要重写doGet或doPost方法
    • 到web.xml中配置Servlet程序的访问地址

    继承HttpServlet的类

    public class HelloServlet2 extends HttpServlet{
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("HttpSerVlet的get方法");
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            System.out.println("HttpSerVlet的post方法");
        }
    }
    
    //其实这就是服务端的代码

    配置的web.xml文件

       <servlet>
            <servlet-name>HelloServlet2</servlet-name>
            <servlet-class>com.wufq.servlet.HelloServlet2</servlet-class>
        </servlet>
        
        <servlet-mapping>
            <servlet-name>HelloServlet2</servlet-name>
            <url-pattern>/hello2</url-pattern>
        </servlet-mapping>

    客户端的代码

    <body >
        <form action="http://localhost:8080/hello2" method="post">
            <input type="submit"/>
        </form>
    </body>

    5、为了便捷,可以直接在idea里面new Servlet

    包-->右键-->new -->Servlet

    6、Servlet类的继承体系

    二、ServletConfig类

    它主要是Servlet程序的配置信息类

    Servlet程序默认是第一次访问的时候创建,ServletConfig是每个Servlet程序创建时,就创建一个对应的ServletConfig对象。并且两者都是由Tomcat负责创建

    1、ServletConfig三大作用

    cweb.xml中的配置:

        <servlet>
            <servlet-name>HelloServlet2</servlet-name>
            <servlet-class>com.wufq.servlet.HelloServlet2</servlet-class>
            
            <!--init-param初始化的参数,可以设置多个-->
            <init-param> 
                <!--参数名-->
                <param-name>username</param-name>
                <!--参数值-->
                <param-value>root</param-value>
            </init-param>
    
            <init-param>
                <param-name>url</param-name>
                <param-value>jdbc:mysql://localhost:3306/test</param-value>
            </init-param>
            
        </servlet>

    Servlet中的代码

     @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config); //注意:重写init方法里面一定要调用父类的init(ServletConfig)操作
    
    //        1、可以获取Servlet程序的别名servlet-name的值
            System.out.println("HelloServlet2程序的别名:"+config.getServletName());
    //        2、获取初始化参数init-param
            System.out.println("初始化参数username的值:"+config.getInitParameter("username"));
            System.out.println("初始化参数url的值:"+config.getInitParameter("url"));
    //        3、获取ServletContext对象
            System.out.println("ServletContext对象:"+config.getServletContext());
        }

    三、ServletContext类

    1、什么是ServletContext?

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

    什么是域对象?

    域对象,是可以像Map一样存取数据的对象,叫域对象

    这里的域指的是存取数据的操作范围,整个web工程

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

    2、ServletContext类的四个作用

    • 获取web.xml中的配置的上下文参数context-param
    • 获取当前的工程路径,格式:/工程路径
    • 获取工程部署后在服务器硬盘上的绝对路径
    • 像Map一样存取数据
    public class ContextServlet extends HttpServlet{
    
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //获取ServletAContext对象
            ServletContext context = getServletContext();
            System.out.println(context);
            //存数据
            context.setAttribute("key1","value1");
    
            //取数据
            System.out.println("保存之后;context1获取key1的值是:"+context.getAttribute("key1"));
        }
    }

    四、HTTP协议

    1、http请求分为2种:get请求和post请求

    2、GET请求

    1、请求行

      1)请求的方式:GET

      2)请求的资源路径[+?+请求参数]

      3)请求的协议的版本号   HTTP/1.1

    2、请求头

      key:value  组成  不同的键值对,表示不同的含义

    3、POST请求

    1)请求行

      1)请求的方式:POST

      2)请求的资源路径[+?+请求参数]

      3)请求的协议的版本号   HTTP/1.1

    2)请求头

      key:value  组成  不同的键值对,表示不同的含义

    ----请求头和请求体之间有一个空行

    3)请求体  ==>就是发送给服务器的数据

     4、常用请求头的说明

    • Accept:表示客户端可以接收的数据类型
    • Accept-Languege:表示客户端可以接收的语言类型
    • User-Agent:表示客户端浏览器的信息
    • Host:表示请求时的服务器的ip和端口号

    5、那些是get请求,那些是post请求

    GET请求有哪些:

    • form标签 method=get
    • a标签
    • link标签引入css
    • script标签引入js文件
    • img标签引入图片
    • iframe引入html页面
    • 在浏览器地址栏中输入地址后敲回车

    POST请求有哪些

      form标签  method=post

    4、响应的HTTP协议格式

    1)响应行

    •   响应的协议和版本号
    •   响应的状态码
    •   响应状态描述符

    2)响应头

    •   key:value  不同的响应头,有其不同含义
    •     空行

    3)响应体 --> 就是回传给客户端的数据

    5、常用的响应码说明

    200 表示请求成功

    302 表示请求重定向

    404 表示请求服务器已经收到了,但是你要的数据不存在(请求地址错误)

    500 表示服务器已经收到请求,但是服务器内部错误(代码错误)

    6、MIME类型说明

    MIME是HTTP协议中的数据类型,多功能Interrnet邮件扩充服务。MIME类型的格式是“大类型/小类型”,并与某一种文件的扩展名相对应

    常见的集中MIME类型

  • 相关阅读:
    JavaEE高级-JPA学习笔记
    jQueryrocket
    jQueryrocket
    jQueryrocket
    jQueryrocket
    jQueryrocket
    jQueryrocket
    jQueryrocket
    jQueryrocket
    jQueryrocket
  • 原文地址:https://www.cnblogs.com/frankruby/p/14913298.html
Copyright © 2020-2023  润新知