Servelt动态Web资源开发技术(java程序运行在服务器端)

不管现实多么惨不忍睹,都要持之以恒地相信,这只是黎明前短暂的黑暗而已。不要惶恐眼前的难关迈不过去,不要担心此刻的付出没有回报,别再花时间等待天降好运。真诚做人,努力做事!你想要的,岁月都会给你。Servelt动态Web资源开发技术(java程序运行在服务器端),希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

学习目标

  • 掌握Servlet的声明周期
  • 掌握Servlet的实现步骤
  • 掌握Servlet的部署和配置

1、Servlet概述

  • 由SUN公司提供的动态web资源开发技术
  • Servlet本质上就是一段Java程序
  • 用于处理客户端请求并做出响应
  • 只不过这段Java程序需要放在容器中, 由容器(比如tomcat服务器)调用才可以执行!
  • JSP的前身就是Servlet

1.1、如何使用JSP技术编写服务器动态网页

在这里插入图片描述

1.2、在JSP技术未出来之前如何编写服务器动态网页

在这里插入图片描述

2、Servlet的生命周期

在这里插入图片描述

3、Servlet的四个核心阶段

在这里插入图片描述

  • init()初始化方法

    init方法被设计成只调用一次
    它在第一次创建Servlet时被调用,在后续每次调用时不在调用。
    因此,它是用于一次性初始化。

  • service方法实执行实际任务的主要方法(请求处理)

    Servlet容器(即Web服务器)调用service()方法来处理客户端(浏览器)的请求,判断请求是post还是get,如果是post,则调用doPost()方法处理请求;如果是get,则调用doGet()方法进行请求处理,并把格式化的响应返回给客户端。

  • destroy()终止服务方法

    destroy() 方法只会被调用一次,在 Servlet 生命周期结束时被调用。
    destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。
    在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。

注意:无参构造方法和init()方法只有在servlet首次被调用的时候才会执行,后续再次请求的时候不会被执行。

4、GET和POST的区别

  • GET请求来自于一个URL的正常请求,或者来自于一个未指定method的HTML表单,它由doGet()方法处理。

  • POST请求来自于一个特别指定了method为post的HTML表单,它由doPost()方法处理。
    在这里插入图片描述

    建议:
    get方式的安全性较Post方式要差些,包含机密信息的话,建议用post数据提交方式。
    在做数据查询时,建议用Get方式;而在做数据添加、修改或删除时,建议用Post方式。

  • get方式会将用户信息显示在地址栏中(效率高但不安全,不多说)

  • post方式会将信息封装到浏览器中(如下图)
    在这里插入图片描述

5、创建Servlet

  • 创建HelloServlet
    在这里插入图片描述
    在这里插入图片描述
  • 默认生成的HelloServlet.java
    package com.ebuy.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet(name = "HelloServlet")
    public class HelloServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
        }
    }
    
    

    在这里插入图片描述

6、注意!此处我们为了详解Servlet的各个方法的作用,在创建 Servlet的时候,先不用注解方式,使用web.xml文件自行配置

  • 创建HelloServlet(继承抽象类HttpServlet)
    	package com.ebuy.servlet;		import javax.servlet.ServletException;	import javax.servlet.http.HttpServlet;	import javax.servlet.http.HttpServletRequest;	import javax.servlet.http.HttpServletResponse;	import java.io.IOException;		public class HelloServlet extends HttpServlet {	    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		    }		    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		    }	}
  • 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>        <servlet-name>HelloServlet</servlet-name>        //HelloServlet类的路径        <servlet-class>com.ebuy.servlet.HelloServlet</servlet-class>    </servlet>    <servlet-mapping>        <servlet-name>HelloServlet</servlet-name>        //浏览器访问入口url        <url-pattern>/HelloServlet</url-pattern>    </servlet-mapping></web-app>
  • 依次创建servlet的四个核心阶段
    package com.ebuy.servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.IOException;public class HelloServlet extends HttpServlet {    /**     * 实例化方法     */    public HelloServlet(){        System.out.println("调用HelloServlet无参构造方法(实例化)");    }    /**     * 初始化方法     * @param config     * @throws ServletException     */    @Override    public void init(ServletConfig config) throws ServletException {        super.init(config);        System.out.println("init初始化方法");    }    /**     * 请求处理方法     * @param req     * @param resp     * @throws ServletException     * @throws IOException     */    @Override    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {    	System.out.println("调用service处理请求方法");        super.service(req, resp);    }    /**     * 终止服务方法(销毁servlet)     */    @Override    public void destroy() {        super.destroy();        System.out.println("正在销毁servlet");    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        System.out.println("正在调用doPost方法");    }    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        System.out.println("正在调用doGet方法");    }}
  • 启动服务器访问该HelloServlet(查看控制台)
    在这里插入图片描述
    在这里插入图片描述

由此可知在访问HelloServlet时:

  • 首先是执行构造函数实例化
  • 第二执行init()方法进行初始化
  • 第三web容器调用service()方法,判断请求是post还是get,如果是post,则调用doPost()方法处理请求;如果是get,则调用doGet()方法进行请求处理。
  • 因为上述我们是直接从浏览器地址栏访问的HelloServlet,默认是get请求,所以调用了doGet()方法。

点击停止服务器查看控制台(调用destroy()销毁方法):
在这里插入图片描述

6.1、如果想再次提升效率

  • 可以在web.xml文件中配置在服务器启动时,默认加载无参构造方法和inti()方法
    在这里插入图片描述

6.2、配置全局参数和局部参数

  • 全局参数:当前工程中所有的servlet都可以访问到;
  • 局部参数:当前配置的dbtype参数只能在HelloServlet中可以访问到,其他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都可以访问到-->
        <context-param>
            <param-name>devtools</param-name>
            <param-value>idea</param-value>
        </context-param>
    
        <servlet>
            <servlet-name>HelloServlet</servlet-name>
            <servlet-class>com.ebuy.servlet.HelloServlet</servlet-class>
            <!--局部参数,当前配置的dbtype参数只能在HelloServlet中可以访问到,其他servlet不可以访问到-->
            <init-param>
                <param-name>dbtype</param-name>
                <param-value>oracle</param-value>
            </init-param>
        </servlet>
        <servlet-mapping>
            <servlet-name>HelloServlet</servlet-name>
            <url-pattern>/HelloServlet</url-pattern>
        </servlet-mapping>
    
    </web-app>
    
  • 在HelloServlet中获取全局参数和局部参数
    /**
         * 初始化方法
         * @param config
         * @throws ServletException
         */
        @Override
        public void init(ServletConfig config) throws ServletException {
            super.init(config);
            System.out.println("init初始化方法");
    
            System.out.println("局部变量dbtype---" + config.getInitParameter("dbtype"));
            System.out.println("全局变量devtools---" + this.getServletContext().getInitParameter("devtools"));
    
        }
    
  • 查看控制台
    在这里插入图片描述

7、配置注解方式

  • 创建RoleServlet
    在这里插入图片描述
  • RoleServlet
    package com.ebuy.servlet;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    
    @WebServlet(name = "RoleServlet",urlPatterns = {"/RoleServlet","/bbb","/ccc"})
    public class RoleServlet extends HttpServlet {
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("我是dpPost方法");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            System.out.println("我是doGet方法");
        }
    }
    

此处可以写称集合的形式,每个名字都可以访问,urlPatterns = {"/RoleServlet","/bbb","/ccc"})

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/189471.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!