JavaWeb三大组件 —— Servlet

目录

servlet

注册servlet

父pom

 pom文件

1、通过注解注册

 2、使用ServletRegistrationBean注册

 API三生三世

第一生Servlet

第二生SpringMVC

今生SpringBoot


servlet

Servlet的作用: 接受请求参数、处理请求,响应结果,(就是写controller层的get、post等)
Servlet的生命周期:

  • void init(ServletConfig):初始化调用一次 
  • void service(ServletRequest request, ServletResponse response):每次处理请求时候调用 
  • void destroy():销毁时候 

实现方式:

  •   实现javax.servlet.Servlet接口;
  •   继承javax.servlet.GenericServlet类; 
  •   继承javax.servlet.http.HttpServlet类;

 常见的都是实现HttpServlet类。重写里边的doGet(),doPost等方法。如图:

 注意:

本次示例使用的是jdk为1.8版本;

javax.servlet jakarta.servlet 是 Java Servlet API 的两个版本。

在过去,Java Servlet API 是由 Sun Microsystems(现在是 Oracle)开发和维护的,其包名以 javax.servlet 开头。然而,从 Java EE 8 开始,Servlet API 的维护权转交给了 Eclipse Foundation 的 Jakarta EE 社区,因此,在最新的 Jakarta EE 版本中,Servlet API 的包名已经更改为 jakarta.servlet。

简而言之,javax.servlet 是旧版本的包名,而 jakarta.servlet 是新版本的包名。这个变化是为了反映 Jakarta EE 作为一个独立的开源项目,并且将标准 Java 技术规范的发展移交给了 Jakarta EE 社区。

需要注意的是,虽然包名发生了变化,但是 Servlet API 的核心功能和用法并没有大的改变。大多数代码可以无缝地迁移到 jakarta.servlet 包下,只需要修改导入语句和相应的依赖。

综上所述,javax.servlet 和 jakarta.servlet 的区别仅在于包名的变化,代表了不同版本的 Java Servlet API

注册servlet

父pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
<!--        <version>3.1.2</version>-->
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.chensir</groupId>
    <artifactId>springboot</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot</name>
    <description>springboot</description>
    <properties>
        <java.version>8</java.version>
    </properties>

    <packaging>pom</packaging>

    <modules>
        <module>servlet</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

 pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.chensir</groupId>
        <artifactId>springboot</artifactId>
        <version>0.0.1-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>servlet</artifactId>

    <dependencies>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

1、通过注解注册

 2、使用ServletRegistrationBean注册

 

 

 

 API三生三世

第一生Servlet

1.新建一个多module的空项目

 

 

2.新建web项目

 

 

3.选择Java EE8 ,完成

 

 

4.项目目录结构

 

 

5.修改访问路径

 

 

 

6.查看运行结果

 

 

7.移除注释,通过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>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.china.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>

8.如何自己写一个servlet

 

public class TestServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
         // super.doGet(req, resp);
        //查看目前服务器相应编码是什么编码、
       // System.out.println(resp.getCharacterEncoding());
        //设置服务器字符集编码为UTF-8
        //servletResponse.setCharacterEncoding("UTF-8");
        //resp.setHeader("Content-Type","text/html;charset=utf-8");
        //或者只设置下面一个参数就可以,此方法一定要在获取流之前调用才生效
        resp.setContentType("text/html;charset=utf-8");
        //渲染jsp文件
        //RequestDispatcher requestDispatcher = req.getRequestDispatcher("xxx.jsp");
        //requestDispatcher.forward(req,resp);
        
        PrintWriter out = resp.getWriter();
        out.println("<html><body>");
        out.println("<h1>这是TestServlet返回的结果</h1>");
        out.println("</body></html>");

    }
}

9.配置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_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.china.servlet.HelloServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>com.china.servlet.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/HelloServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/test</url-pattern>
    </servlet-mapping>
</web-app>

10.查看运行结果

 

 

第二生SpringMVC

1.新建module,名称叫02_springmvc

 

 

 2.新建文件夹web

 

 3.点击确定,就会看到如下图,idea自动给我们创建了web.xml

 

 这时候web文件夹多一个小点点的标识

 4.pom.xml引入相关依赖

 

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2.1-b03</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

5.配置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_4_0.xsd"
         version="4.0">
    <!-- 前端控制器 -->
    <servlet>
        <servlet-name>springDispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>springDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
        <!-- /和/*都是拦截所有请求,/*的范围更大,会拦截jsp文件 -->
    </servlet-mapping>
</web-app>

6.新增springmvc.xml

 此时springmvc.xml 为原始xml,没有任何bean数据

 7.创建controller文件,TestController

public class TestController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {

        ModelAndView mv = new ModelAndView();
        mv.addObject("name", request.getParameter("name"));
        mv.setViewName("test");
        return mv;
    }
}

8.创建web/WEB_INF/pages/test.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<html>
    <body>

        <h1>页面参数:${name}</h1>

    </body>
</html>

 9.配置springmvc.xml

 

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 设置逻辑视图名的前缀 -->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <!-- 设置逻辑视图名的后缀 -->
        <property name="suffix" value=".jsp"/>
    </bean>

    <bean name="/test" class="com.china.controller.TestController"/>

</beans>

10.运行,结果如下

 

11.使用注解版

@Controller
public class Test2Controller {

    @RequestMapping("/test2")
    public ModelAndView test(@RequestParam("name") String name){

        ModelAndView mv = new ModelAndView();
        mv.addObject("name", name);
        mv.setViewName("test");
        return mv;

    }
}

 12.springmvx.xml开启controller组件扫描

 

<!--开启controller组件扫描-->
<context:component-scan base-package="com.china.controller"/>

 13.运行结果如下

 

 

今生SpringBoot

1.通过IDE创建Spring Boot项目

 

 

 

2.目录结构

 

 3.新建TestController控制器

@Controller
public class TestController {

    @RequestMapping("/test")
    public ModelAndView test(@RequestParam(name = "name", defaultValue = "刘德华") String name){

        ModelAndView mv = new ModelAndView();
        mv.addObject("name", name);
        mv.setViewName("test");
        return mv;
    }
}

4.新建/resources/templates/test.ftlh模板文件

<html>

<body>
    <h1>页面参数: ${name}</h1>
</body>

</html>

5.运行项目

 

 

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第1篇 开发工具及框架概述  第1章 开发前奏  1.1 java web应用概述  1.2 配置开发环境  1.3 基础技术简单简介  1.4 核心框架初步认识  1.5 小结  第2章 myedipse开发工具对各种框架的支持  2.1 使用jsp的两种模式  2.2 struts框架的实现  2.3 hibernate框架的实现  2.4 jpa框架的实现  2.5 spring框架的实现  2.6 jsf框架的实现  2.7 ajax框架的实现  2.8 使用jdbc连接数据库  2.9 小结  第3章 实现各种框架的集成  3.1 spring框架与其他框架的集成原理  3.2 实现ssh三种框架环境集成    3.3 实现spring与struts 2.x集成  3.4 实现spring、struts2.x和hibernate框架集成  3.5 小结  第2篇 典型模块开发  第4章 在线文本编辑器(fckeditor)  4.1 分析fckeditor在线文本编辑器  4.2 fckeditor在线文本编辑器初级应用  4.3 fckeditor在线文本编辑器常用配置  4.4 fckeditor在线文本编辑器高级应用  4.5 小结  第5章 验证模块(jsp+servlet+jsvaildation)  5.1 表单基础  5.2 客户端表单验证框架  5.3 服务器端验证  5.4 实现图形验证码  5.5 避免重复提交功能  5.6 缩略加水印图像  5.7 小结  第6章 网络硬盘  6.1 网络硬盘功能原理  6.2 网络硬盘功能具体实现——浏览磁盘和显示文件信息  6.3 网络硬盘功能具体实现——操作文件夹和文件  6.4 小结  第7章 网站统计模块(jsp+servlet)  7.1 网站统计模块原理  7.2 实现显示欢迎信息功能,  7.3 指点迷津——cookie知识  7.4 统计访问量功能  7.5 指点迷津——session知识  7.6 统计在线人数功能  7.7 小结  第8章 网络购物车(jsp+servlet+javabean)  8.1 网络购物车原理  8.2 实现网络购物车功能  8.3 小结  第9章 搜索引擎(lucene+web spider)  9.1 关于搜索引擎的基本概念  9.2 网络蜘蛛(web spider)  9.3 下载和分析lucene全文搜索组件  9.4 初步使用lucene全文搜索组件  9.5 新闻搜索引擎具体实现  9.6 小结  第10章 在线网上支付(jsp+servlet+javabean)  10.1 在线网上支付原理  10.2 在线网上支付功能工具类  10.3 发出支付请求过程  10.4 接受支付返回过程  10.5 小结  第11章 javaweb邮件发送系统(jsp+servlet+javabean)  11.1 javaweb邮件发送系统原理  11.2 下载邮件相关jar包  11.3 普通方式电子邮件的发送  11.4 html方式电子邮件的发送  11.5 携带附件电子邮件的发送  11.6 多学两招——关于邮件的基础知识  11.7 小结  第12章 网络留言板(jsp+servlet+javabean)  12.1 网络留言板原理  12.2 添加留言  12.3 浏览留言  12.4 管理留言  12.5 使用dao模式网络留言板  12.6 小结  第13章 网络留言板续——oracle数据库  13.1 连接数据库——idbc驱动程序  13.2 数据库连接池  13.3 commons dbutils组件  13.4 小结  第14章 ajax技术jquary框架的经典应用  14.1 jquery框架的简单应用  14.2 利用jquery框架实现的经典运用  14.3 实现仿google suggest功能  14.4 google suggest功能的相关javascript代码  14.5 小结  第15章 在线文件上传和下载(struts 2.x+fileupload)  15.1 在线文件上传和下载模块原理  15.2 文件上传组件fileupload  15.3 初步使用文件上传组件(components-fileupload)  15.4 单文件的上传  15.5 多文件的上传  15.6 小结  第16章 网上投票系统(struts 2.x+hfreechart)  ]6.1 网上投票系统原理  16.2 图表组件jfreechan  16.3 初步使用图表组件(jfreechad)  16.4 实现网上投票系统  16.5 小结  第17章 商业银行网上账户管理系统(struts 2.x)  17.1 商业银行网上账户管理系统简述  17.2 商业银行网上账户管理系统前期准备  17.3 商业银行网上账户管理系统具体实现——持久层  17.4 商业银行网上账户管理系统具体实现——业务层  17.5 商业银行网上账户管理系统具体实现——表示层  17.6 商业银行网上账户管理系统具体实现——工具类、校验器及拦截器  17.7小结  第18章 hibernate分页系统(hibernate 3.0)  18.1 hibernate分页系统原理  18.2 封装javabean的commons-beanutils组件  18.3 关于hibernate框架中一些通用类  18.4 实现hibernate分页系统前期准备  18.5 关于hibernate分页系统的具体实现  18.6 关于hibernate分页系统的表示层  18.7 多学两招——分页标签  18.8 小结  第19章 生成报表(struts 2.x+hibernate+jxl)  19.1 生成报表原理  19.2 下载jxl组件  19.3 生成报表前期准备  19.4 生成报表具体开发——持久层和服务层  19.5 生成报表具体开发——表示层  19.6 多学两招——其他报表插件  19.7 小结  第20章 数据格式转换(struts 2.x+hibernate+dom4j)  20.1 关于xml文件基础知识  20.2 下载dom4j  20.3 数据格式转换功能前期准备  20.4 数据格式转换功能具体开发  20.5 多学两招——其他操作xml文件组件  20.6 小结  第21章 用户维护功能(struts 2.x+ibatis)  21.1 用户维护功能  21.2 关于用户维护基础知识——ibatis框架  21.3 用户维护系统具体实现  21.4 小结  第22章 用户登录模块(struts 2.x+guice+国际化)  22.1 用户登录概述  22.2 关于用户登录的基础知识——国际化资源  22.3 关于用户登录的基础知识——guice框架  22.4 用户登录的具体实现  22.5 小结  第3篇 项目案例实战  第23章 在线音乐管理系统(ajax+jsp+struts 2.x)  23.1 在线音乐管理系统简述  23.2 在线音乐管理系统前期准备  23.3 在线音乐管理系统具体实现——超级管理员操作  23.4 在线音乐管理系统具体实现——注册用户操作  23.5 小结  第24章 数据汇聚系统(struts 2.x+spring+ibatis)  24.1 数据汇聚系统简述  24.2 数据汇聚系统简述  24.3 关于ibatis框架的一些文件  24.4 数据汇聚系统具体实现  24.5 数据汇聚系统具体实现——表示层  24.6 小结  第25章 投票管理系统(struts 2.x+spring+hibernate)  25.1 投票管理系统简述  25.2 投票管理系统前期准备  25.3 投票管理系统的具体实现——领域模型层  25.4 投票管理系统的具体实现——持久层  25.5 投票管理系统的具体实现——业务层  25.6 关于管理员表示层  25.7 关于创建投票表示层  25.8 关于管理和查找投票表示层  25.9 关于实现投票操作表示层  25.10 小结  第26章 权限管理系统(struts 2.x+spring+jpa)  26.1 权限管理系统简述  26.2 权限管理系统前期准备  26.3 权限管理系统具体实现——关联表操作  26.4 权限管理系统具体实现——模块操作  26.5 权限管理系统具体实现——功能操作  26.6 权限管理系统具体实现——角色操作  26.7 权限管理系统具体实现——用户操作  26.8 小结  第27章 商业银行设备巡检系统(struts 2.x+spring+hibernate)  27.1 商业银行设备巡检系统概述  27.2 商业银行设备巡检系统前期准备  27.3 商业银行设备巡检系统具体实现——系统管理应用  27.4 商业银行设备巡检系统具体实现——设备报修管理  27.5 商业银行设备巡检系统具体实现——设备巡检管理  27.6 多学两招——关于postgresql数据库  27.7 小结  
ServletJavaEE 规范中的一部分,是处理 Web 请求的组件Servlet 运行在服务器端,能够接收客户端发来的请求,并给客户端响应结果。下面我们来看看 Servlet 的基本概念和使用方法。 ## 一、Servlet 的基本概念 ### 1.1 Servlet 的生命周期 Servlet 的生命周期包含以下三个阶段: - 初始化阶段(init):当 Servlet 实例化后,Web 容器会调用其 init() 方法进行初始化操作。在此阶段,Servlet 可以执行一些初始化操作,例如读取配置信息、建立数据库连接等。 - 请求处理阶段(service):当客户端发来请求时,Web 容器会创建一个线程调用 Servlet 的 service() 方法处理请求。在此阶段,Servlet 可以获取请求参数、处理请求并生成响应数据。 - 销毁阶段(destroy):当 Web 应用停止或 Servlet 被卸载时,Web 容器会调用 Servlet 的 destroy() 方法进行清理工作。在此阶段,Servlet 可以释放资源、关闭数据库连接等。 ### 1.2 Servlet 的配置 在使用 Servlet 时,需要在 web.xml 文件中进行配置。以下是一个 Servlet 的基本配置: ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>com.example.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/myservlet</url-pattern> </servlet-mapping> ``` 其中,servlet-name 表示 Servlet 的名称,servlet-class 表示 Servlet 的类名,url-pattern 表示请求的 URL 匹配规则。 ## 二、Servlet 的使用方法 ### 2.1 编写 Servlet 编写 Servlet 有两种方法:一种是继承 HttpServlet 类,另一种是实现 Servlet 接口。这里以继承 HttpServlet 类为例: ```java public class MyServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 GET 请求 PrintWriter out = resp.getWriter(); out.println("Hello, world!"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 处理 POST 请求 PrintWriter out = resp.getWriter(); out.println("Hello, world!"); } } ``` 在 Servlet 中,doGet() 方法用于处理 GET 请求,doPost() 方法用于处理 POST 请求。通过调用 HttpServletResponse 对象的 getWriter() 方法可以向客户端返回响应数据。 ### 2.2 部署 Servlet 将编写好的 Servlet 部署到 Web 容器中,有两种方法:一种是将 Servlet 类打成 war 包放到 Web 容器的 webapps 目录下,另一种是通过 Eclipse 等开发工具将 Servlet 部署到 Web 容器中。部署完成后,可以通过访问 Servlet 的 URL 来测试 Servlet 是否正常工作。 ## 三、总结 本文介绍了 Servlet 的基本概念和使用方法。ServletJava Web 开发中非常重要的组件,掌握 Servlet 的使用方法对于 Java Web 开发人员来说是必不可少的。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值