网页开发基础 :Servlet 技术(上)

asdsServlet 是用 Java 语言编写应用到 Web 服务器端的扩展枝术, 他先于 JSP 产生,可以方便地对 Web 应用中的 HTTP 请求进行处理。 在Java Web程序开发中, Servlet主要应用于各种业务逻辑,它比 JSP 更具有业务逻辑层的意义,而且 Servlet 安全性 扩展性以及性能方面都十分优秀,它在 Java Web 程序开发及 MVC 模式的应用方面起到了极其重要的作用。

asdsServlet 是运行在 Web 服务器端的 Java 应用程序,它使用 ava 语言编写,具有 java 语言的优点。java 程序的区别是, Servlet 对象主要封装了对 HTTP 请求的处理,并且它的运行需要 Servlet 容器的支持,在 Java Web 应用方面, Servlet 的应用占有十分重要的地位 ,它在 Web 请求的处理功能方面也非常强大。

asdsadadsdsdssdasdasdsadasdasdasdsadassdasdsadasdasdsadasdsadassadasdas————《JavaWeb从入门到精通》


Servlet 基础

Servlet 结构体系

ssdssServlet 实质上就是按 Servlet 规范编写 Java 类,但它可以处理 Web 应用中的相关请求。 Servlet 一个标准,它由 Su n定义,其具体细节由 Servlet 容器进行实现。

ssdss在J2EE 架构中,Servlet 结构体系的 UML 图如下:

在这里插入图片描述

在这里插入图片描述
ssdssServlet 对象、ServletConfig 对象与 Serializable 对象是接口对象,其中Serializable是 java.io 包中的序列化接口,Servlet 对象、ServletConfig 对象是 javax.servlet 包中定义的对象,这两个对象定义了 Servlet 的基本方法以及封装了 Servlet的相关配置信息。

ssdssGenericServlet 对象是一个抽象类,它分别实现了上述的3个接口,该对象为 Servlet 接口及 ServletConfig 接口提供了部分实现,但它并没有对 HTTP 请求处理进行实现,这一操作由它的子类 HttpServlet 进行实现。这个对象为 HTTP 请求中 POST GET 等类型提供了具体的操作方法,所以通常情况下,我们所编写的 Servlet 对象都继承于 HttpServlet, 在开发中,所使用的具体的 Servlet 对象就是 HttpServlet 对象,原因是 HttpServlet是Servlet 的实现类,并提供了 HTTP 请求的处理方法。

Servlet 技术特点

ssdssServlet 使用 Java 语言编写,它不仅继承了 Java 语言中的优点 而且还对 Web 的相关应用进行了封装,同时 Servlet 容器还提供了对应用的相关扩展,无论是在功能、性能、安全等方面都十分优秀,其技术特点表现在以下几方面。

ssdss①、功能强大:Servlet 采用 Java 语言编写,它可以调用 Java AP 中的对象及方法。此外 Servlet 对象对 Web应用进行了封装,提供了 Servlet Web 应用的编程接口,还可以对 HTIP 请求进行相应的处理提交数据、会话跟踪、读取和设置 HTIP 头信息等。由于 Servlet 既拥有 Java 提供的 API 而且还可以调用 Servlet 封装 Servlet API 编程接口,因此,业务功能十分强大。
ssdss②、可移植:Java 语言是跨越平台的,所谓跨越平台是指程序的运行不依赖于操作系统平台 它可以运行到多个系统平台中,如目前常用的操作系统 Window Linux 和 UNIX等。 由于 Servlet 使用 Java 语言编写,所以, Servlet 继承了 Java 语言的优点,程序一次编码,多 台运行,拥有超强的可移植性。

ssdss③、性能高效:Servlet 对象在 Servlet 容器启动时被初始化, 当第一次被请求时, Servlet 容器将其实例化,此时它驻存于内存中。如果存在多个请求, Servlet 会再被实例化,仍然由此 Servlet 其进行处理。每一个请求是 个线程 而不是一个进程,因此, Servlet 对请求处理的性能是十分高效的。

ssdss④、安全性高:Servle 使用了 Java 的安全框架,同时 Servlet 容器还可以为 Servlet 提供额外的功能,它的安全性是非常高的。

ssdss⑤、可扩展:Java 语言是面向对象的编程语言, Servlet 由 Java 言编写,所以它继承了 Java 的面向对象的优点.在业务逻辑处理中 可以通过封装、继承等来扩展实际的业务需要,其扩展性非常强。

Servlet 与JSP 的区别

ssdssServlet 是使用 Java Servlet 接口(API) 运行在 Web 应用服务器上的 Java 程序,其功能十分强大,它不但可以处理 HTIP 请求中的业务逻辑,而且还可以输出 HTML 代码来显示指定页面。而 JSP是一种在 Servlet 规范之上的动态网页技术, 在JSP 页面中,同样可以编写业务逻辑处理 HTTP 请求,也可以通过 HTM 代码来编辑页面 在实现功能上 Servle JSP 貌似相同 实质存在 定的区别 主要表现在以下几方面:

sssdss①、角色不同:JSP 页面可以存在 HTML 代码与 Java 代码并存的情况,而 Servlet 需要承担客户请求与业务 理的中间角色,只有调用固定的方法才能将动态内容输出为静态的 HTML, 所以,JSP 更具有显示层的角色。

sssdss②、编程方法不同:Servlet 与 JSP 在编程方法上存在很大的区别,使用 Servlet 开发 Web 应用程序需要遵循 Java 的标准。而JSP 需要遵循一定脚本语言规范。在 Servlet 代码 需要调用 Servlet 提供的相关 API 方法,才可以对 HTTP 请求及业务进行处理,对于业务逻辑方面的处理功能更加强大。然而在 JSP 页面中,通过 HTML 代码与 JSP 内置对象实现对 HTIP 请求及页面的处理,其显示界面的功能更加强大。

sssdss③、Servlet 需要编译后运行

sssdss④、速度不同:由于 JSP 页面由 JSP Container 对其进行管理。 在每次执行不同内容的动态JSP 页面时, JSP Container 都要对其自动编译,所以,它的效率低于 Servlet 的执行效率 Servlet 在编译完成之后,则不需要再次编译,可以直接获取及输出动态内容。在 页面中的内容没有变化的情况下 JSP 页面的编译完之后 JSP Container 不会再次对 JSP 进行编译。

Servlet 代码结构
什么是 Servlet

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

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

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

ssd32ssweb.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 标签给 Tomcat 配置 Servlet 程序 -->
    <servlet>
        <!--servlet-name 标签 Servlet 程序起一个别名(一般是类名) -->
        <servlet-name>HelloServlet</servlet-name>
        <!--servlet-class 是 Servlet 程序的全类名-->
        <servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
    </servlet>

    <!--servlet-mapping 标签给 servlet 程序配置访问地址-->
    <servlet-mapping>
        <!--servlet-name 标签的作用是告诉服务器,我当前配置的地址给哪个 Servlet 程序使用-->
        <servlet-name>HelloServlet</servlet-name>
        <!--url-pattern 标签配置访问地址 <br/> / 斜杠在服务器解析的时候,表示地址为:http://ip:port/工程路径 <br/> /hello 表示地址为:http://ip:port/工程路径/hello <br/> -->
        <url-pattern>/hello</url-pattern> 
    </servlet-mapping>
</web-app>

ssd32ss常见的错误 1:url-pattern 中配置的路径没有以斜杠打头。

在这里插入图片描述
ssd32ss常见的错误2:servlet-name 配置的值不存在:

在这里插入图片描述

ssd32ss常见的错误3:servlet-class 标签的全类名配置错误:

在这里插入图片描述

url 地址到 Servlet 程序的访问:

在这里插入图片描述

Servlet 的生命周期

ssdsss1、执行 Servlet 构造器方法

ss dss 2、执行 init 初始化方法

ss dss 3、执行 service 方法

sssdss4、执行 destroy 销毁方法

ssd3s注:第一、二步,是在第一次访问,的时候创建 Servlet 程序会调用。第三步,每次访问都会调用。第四步,在 web 工程停止的时候调用。

GET 和 POST 请求的分发处理
package com.atguigu.servlet;

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

public class HelloServlet implements Servlet {

    public HelloServlet() {
        System.out.println("1 构造器方法");
    }

    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("2 init初始化方法");

//        1、可以获取Servlet程序的别名servlet-name的值
        System.out.println("HelloServlet程序的别名是:" + servletConfig.getServletName());
//        2、获取初始化参数init-param
        System.out.println("初始化参数username的值是;" + servletConfig.getInitParameter("username"));
        System.out.println("初始化参数url的值是;" + servletConfig.getInitParameter("url"));
//        3、获取ServletContext对象
        System.out.println(servletConfig.getServletContext());
    }
    
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    
    /**
     * service方法是专门用来处理请求和响应的
     * @param servletRequest
     * @param servletResponse
     * @throws ServletException
     * @throws IOException
     */
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("3 service === Hello Servlet 被访问了");
        // 类型转换(因为它有getMethod()方法)
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        // 获取请求的方式
        String method = httpServletRequest.getMethod();

        if ("GET".equals(method)) {
            doGet();
        } else if ("POST".equals(method)) {
           doPost();
        }

    }

    /**
     * 做get请求的操作
     */
    public void doGet(){
        System.out.println("get请求");
        System.out.println("get请求");
    }
    /**
     * 做post请求的操作
     */
    public void doPost(){
        System.out.println("post请求");
        System.out.println("post请求");
    }


    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("4 . destroy销毁方法");
    }
}

ssd3s结果:

1 构造器方法
2 init初始化方法
HelloServlet程序的别名是:HelloServlet
初始化参数username的值是;null
初始化参数url的值是;null
org.apache.catalina.core.ApplicationContextFacade@3ae60265
3 service === Hello Servlet 被访问了
get请求
get请求
通过继承 HttpServlet 实现 Servlet 程序

ssdss在Java 中,通常所说的 Servlet 是指 HttpServlet 对象,在声明一个对象为Servlet 时,需要继承 HttpServlet 类。 HttpServlet 类是 Servlet 接口的一个实现类,继承该类后,可以重写 HttpServlet 类中的方法对 HTTP 请求进行处理。

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

ssdssServlet 类的代码:

package com.atguigu.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 HelloServlet2 extends HttpServlet {

    @Override
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
        System.out.println("重写了init初始化方法,做了一些工作");
    }

    /**
     * doGet()在get请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {


        System.out.println("HelloServlet2 的doGet方法");
        // 也可以使用.
        ServletConfig servletConfig = getServletConfig();
        System.out.println(servletConfig);

        //        2、获取初始化参数init-param
        System.out.println("初始化参数username的值是;" + servletConfig.getInitParameter("username"));
        System.out.println("初始化参数url的值是;" + servletConfig.getInitParameter("url"));


    }
    /**
     * doPost()在post请求的时候调用
     * @param req
     * @param resp
     * @throws ServletException
     * @throws IOException
     */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("HelloServlet2 的doPost方法");
    }
}

ssd32ssweb.xml 中的配置:

    <servlet>
        <servlet-name>HelloServlet2</servlet-name>
        <servlet-class>com.atguigu.servlet.HelloServlet2</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HelloServlet2</servlet-name>
        <url-pattern>/hello2</url-pattern>
    </servlet-mapping>
使用 IDEA 创建 Servlet 程序

ssd32ss菜单:new ->Servlet 程序

在这里插入图片描述

ssd32ss配置 Servlet 的信息:

在这里插入图片描述

💖感谢各位的暴击三连~💖

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值