JavaWeb三大组件 —— Servlet

news2024/12/23 19:10:51

目录

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.运行项目

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/840367.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Qlik Sense 移动端安装配置

在之前的文章中&#xff0c;我们了解到Qlik Sense是一款数据分析可视化的应用&#xff0c;使人们能够轻松地组合来自许多不同来源的数据&#xff0c;并自由探索&#xff0c;而不受基于查询的工具的限制。不仅支持Web端访问&#xff0c;还有配套的Windows Desktop使用&#xff0…

最新2024届【海康威视】内推码【GTK3B6】

最新2024届【海康威视】内推码【GTK3B6】 【内推码使用方法】 1.请学弟学妹们登录校招官网&#xff0c;选择岗位投递简历&#xff1b; 2.投递过程中填写内推码完成内推步骤&#xff0c;即可获得内推特权。 内推码&#xff1a;GTK3B6 内推码&#xff1a;GTK3B6 内推码&…

边写代码边学习之RNN

1. 什么是 RNN 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种以序列数据为输入来进行建模的深度学习模型&#xff0c;它是 NLP 中最常用的模型。其结构如下图&#xff1a; x是输入&#xff0c;h是隐层单元&#xff0c;o为输出&#xff…

有哪些好用的AI绘画网站?

随着人工智能技术的发展&#xff0c;人工智能绘画工具逐渐成为数字艺术领域的热门话题。人工智能绘画工具是利用深度学习和其他技术来模拟绘画过程和效果的工具&#xff0c;可以帮助用户快速创作高质量的艺术作品。除了Midjourney、除了openai等流行的AI绘画工具外&#xff0c;…

Flutter游戏引擎Flame系列笔记 - 1.Flame引擎概述

Flutter游戏引擎Flame系列笔记 1.Flame引擎概述 - 文章信息 - Author: 李俊才(jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_28550263/article/details/132119035 【介绍】…

【微信小程序创作之路】- 小程序远程数据请求、获取个人信息

【微信小程序创作之路】- 小程序远程数据请求、获取个人信息 第七章 小程序远程数据请求、获取个人信息 文章目录 【微信小程序创作之路】- 小程序远程数据请求、获取个人信息前言一、远程数据请求1.本地环境2.正式域名 二、获取用户个人信息1.展示当前用户的身份信息2.获取用…

Vue电商项目--导航守卫

导航守卫理解 导航 守卫 导航&#xff1a;表示路由正在发送改变&#xff0c;进行路由跳转 守卫&#xff1a;你把它当中‘紫禁城守卫’ 全局守卫&#xff1a;你项目中&#xff0c;只要路由变化&#xff0c;守卫就能监听到。 举例&#xff1a;紫禁城【皇帝&#xff0c;太子】…

sk_buff操作函数学习

一. 前言 内核提供了大量实用的操作sk_buff的函数&#xff0c;在开发网络设备驱动程序和修改网络协议栈代码时需要用到。这些函数从功能上可以分为三类&#xff1a;创建&#xff0c;释放和复制socket buffer&#xff1b;操作sk_buff结构中的参数和指针&#xff1b;管理socket b…

XML 学习笔记 7:XSD

本文章内容参考自&#xff1a; W3school XSD 教程 Extensible Markup Language (XML) 1.0 (Second Edition) XML Schema 2001 XML Schema Part 2: Datatypes Second Edition 文章目录 1、XSD 是什么2、XSD 内置数据类型 - built-in datatypes2.1、基本数据类型 19 种2.1.1、基本…

从0到1自学网络安全(黑客)【附学习路线图+配套搭建资源】

前言 网络安全产业就像一个江湖&#xff0c;各色人等聚集。相对于欧美国家基础扎实&#xff08;懂加密、会防护、能挖洞、擅工程&#xff09;的众多名门正派&#xff0c;我国的人才更多的属于旁门左道&#xff08;很多白帽子可能会不服气&#xff09;&#xff0c;因此在未来的…

【STM32】小电流FOC驱控一体板(开源)

FOC驱控一体板 主控芯片stm32f103c8t6 驱动芯片drv8313 三相电流采样 根据B站一个UP主的改的&#xff08;【【自制】年轻人的第一块FOC驱动器】&#xff09;&#xff0c;大多数元器件是0805&#xff0c;实验室具备且便于自己动手焊接 。 晶振用的是无源晶振&#xff0c;体…

Bias Tee理论到实践

Bias Tees是将直流电压施加到必须传递RF/微波信号的任何组件的必不可少的组件&#xff0c;最常见的是需要DC电源的RF放大器。 对于窄带应用&#xff0c;bias tee设计和结构是简单的&#xff0c;只需要注意组件的自谐振频率。 然而&#xff0c;对于宽带应用&#xff0c;bias t…

基于瑞萨RA6M5的环境监测系统设计

基于瑞萨RA6M5的环境监测系统设计 1. 设计简介 本项目初步设计思路是打算以瑞萨单片机作为控制和数据处理的单元&#xff0c;使用温湿度&#xff0c;光照传感器去监测周围的环境参数&#xff0c;在屏幕上完成传感器数据和相关信息的显示。同时&#xff0c;使用WIFI无线模组与…

用于大型图像模型的 CNN 内核的最新内容

一、说明 由于OpenAI的ChatGPT的巨大成功引发了大语言模型的繁荣&#xff0c;许多人预见到大图像模型的下一个突破。在这个领域&#xff0c;可以提示视觉模型分析甚至生成图像和视频&#xff0c;其方式类似于我们目前提示 ChatGPT 的方式。 用于大型图像模型的最新深度学习方法…

Pytohn将matplotlib嵌入到tkinter中

文章目录 matplotlib窗口组成tkinter布局嵌入图像 matplotlib窗口组成 tkinter是Python标准库中自带的GUI工具&#xff0c;使用十分方便&#xff0c;如能将matplotlib嵌入到tkinter中&#xff0c;就可以做出相对专业的数据展示系统&#xff0c;很有竞争力。 在具体实现之前&a…

FTP使用教程

FTP使用教程 目录 一&#xff0e;FTP简介二&#xff0e;FTP搭建三&#xff0e;FTP使用 一&#xff0e;FTP简介 FTP中文为文件传输协议&#xff0c;简称为文传协议。它也是一个应用程序&#xff0c;不同的操作系统有不同的FTP应用程序&#xff0c;这些应用程序都遵守同一种协议以…

六寸相纸打印拼图 - opencv

准备自己打印一些照片&#xff0c;三寸相纸性价比低&#xff0c;只好买六寸来拼四张然后裁剪&#xff0c;不过并没有搜到提供了这个功能的工具&#xff0c;想想代码应该很简单&#xff0c;所以就造轮子了。可能其实有但是我没搜到。 轮子在这里&#xff1a; https://github.co…

ArraySetter

简介​ 用来展示属性类型为数组的 setter 展示​ 配置示例​ "setter": {"componentName": "ArraySetter","props": {"itemSetter": {"componentName": "ObjectSetter","props": {"c…

React 论文《ReAct: Synergizing Reasoning and Acting in Language Models》阅读笔记

文章目录 1. 简介论文摘要翻译动机和主要贡献 2. REACT : SYNERGIZING *RE*ASONING *ACT*ING3. KNOWLEDGE-INTENSIVE REASONING TASKS3.1 设置3.2 方法3.3 结果和观察 4. 决策任务5. 参考资料 1. 简介 论文摘要翻译 虽然大型语言模型&#xff08;LLM&#xff09;在自然语言理…

医疗实施-集成平台下门诊就诊流程详解

目录 集成平台下门诊就诊流程详解1.患者建档2. 门诊挂号3. 医生就诊4.处方开立5.费用收取、6、科室执行医嘱集成平台下门诊就诊流程详解 这篇文章是考虑医院使用了集成平台之后,门诊就诊流程详解。与我的文章《医疗实施-门诊就诊流程详解》的大致一样,供学有余力的人阅读。 …