获取web.xml参数初始化数据servlet3.0注解

2023-10-12 19:10

本文主要是介绍获取web.xml参数初始化数据servlet3.0注解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

通过web.xml获取编码参数初始化数据

注解实现Servlet配置和初始化数据

通过web.xml获取编码参数初始化数据

在web.xml中配置编码格式,在servlet初始化init()时候获取xml中编码参数。

request.setCharacterEncoding("utf-8");代码的耦合度太⾼,不便于后期维护修改。 可以通过初始化参 数实现
实现⽅式:
1.局部初始化参数
(1)web.xml 中先定义初始化参数
    <servlet><servlet-name>test request</servlet-name><!--servlet全类名,这个servlet与下面路径进行映射,通过下面页面路径访问这个servlet--><servlet-class>web.UserServlet</servlet-class><!--针对某个servlet初始化参数(相当于局部变量)--><init-param><param-name>encoding</param-name><param-value>utf-8</param-value></init-param></servlet><!--servlet映射--><servlet-mapping><servlet-name>test request</servlet-name><url-pattern>/testrequest</url-pattern><!--页面的请求地址--></servlet-mapping>
(2)servlet 中获得初始化参数,重写 init() ⽅法
public void init(ServletConfig config) throws ServletException {encoding= config.getInitParameter("encoding");
}
注意 : 这种⽅式的初始化的编码参数仅限于当前 servlet 中使⽤。其它servlet中获取不到该参数
2.全局初始化参数
(1) 定义, context-param 是和 servlet 标签同级别
<!--全局初始化参数(相当于全局变量)--><context-param><param-name>encoding</param-name><param-value>utf-8</param-value></context-param>
(2) 获得数据
@Override // 请求->init()->service()->doget/dopost->destory();
public void init(ServletConfig config) throws ServletException {encoding=config.getServletContext().getInitParameter("encoding");
}

该方式在任何servlet中都可以获取到这个编码参数,将来要修改编码直接修改web.xml中编码参数即可,不需要修改代码。

在doPost中设置编码格式
req.setCharacterEncoding(encoding);

注解实现Servlet配置和初始化数据

web.xml配置文件实现Servlet比较麻烦,可以通过注解方式去映射路径与servlet。并在注解中定义初始化参数比如编码格式等来替代在web.xml中配置servlet和编码参数。

@WebServlet 注解配置 Servlet

 

Servlet3.0 开始,配置 Servlet ⽀持注解⽅式,但还是保留了配置 web.xml ⽅式,所有使⽤ Servlet有两种⽅式:
1 Servlet 类上使⽤ @WebServlet 注解进⾏配置
2 web.xml ⽂件中配置

 

@WebServlet 常⽤属性
web.xml配置 loadOnStartup

下面使用注解配置Servlet以及定义初始化参数

首先导包javaee-api-7.0.jar

然后写个index2.html放了个表单post提交

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<form action="/stu/test" method="post">uname:<input type="text" name="username">upass:<input type="text" name="userpass">hobby:<input type="checkbox" name="hobby" value="music">音乐<input type="checkbox" name="hobby" value="run">跑步<input type="checkbox" name="hobby" value="film">电影<input type="submit" value="提交">
</form>
</body>
</html>
在src的web目录下创建StudentServlet,使用注解并初始化参数
package web;import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;//注解属性name = "myServlet"可有可无
//loadOnStartup属性:标记容器是否在启动应⽤时就加载Servlet,默认不配置或数值为负数时表示客
//户端第⼀次请求Servlet时再加载;0或正数表示启动应⽤就加载,正数情况下,数值越⼩,加载该Servlet的优先级越⾼;
@WebServlet(urlPatterns = "/stu/test",name = "myServlet",loadOnStartup = 1,initParams = {@WebInitParam(name="encoding",value = "utf-8"),@WebInitParam(name="name",value = "小明"),@WebInitParam(name="pwd",value = "123456")}
)public class StudentServlet extends HttpServlet {String encoding=null;String  name=null;String  pwd=null;//获取初始化参数@Overridepublic void init(ServletConfig config) throws ServletException {encoding = config.getInitParameter("encoding");name=config.getInitParameter("name");pwd=config.getInitParameter("pwd");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//处理post请求的乱码req.setCharacterEncoding(encoding);String username = req.getParameter("username");String userpass = req.getParameter("userpass");System.out.println("通过表单的post请求方式获取到"+"username:"+username+"userpass:"+userpass);System.out.println("注解中初始化的name和psw:"+name+":"+pwd);}
}

注意
(1).loadOnStartup属性:
标记容器是否在启动应⽤时就加载 Servlet ,默认不配置或数值为负数时表示客户端第⼀次请求Servlet 时再加载
0 或正数表示启动应⽤就加载,正数情况下,数值越⼩,加载该 Servlet的优先级越⾼;
实例: // 斜杠必须
@WebServlet(value="/test1",loadOnStartup=1)
(2).name属性:
可以指定也可以不指定,通过 getServletName() 可以获取到,若不指定,则为 Servlet 的完整类名,如:cn.edu.njit.servlet.UserServlet
(3).urlPatterns/value属性:
String[] 类型,可以配置多个映射,如: urlPatterns={"/user/test", "/user/example"}
实例:
// 斜杠必须
@WebServlet(loadOnStartup=1,urlPatterns= {"/test1","/test2"})
(4). 在使⽤注解⽅式时,需要注意
根元素中不能配置属性 metadata-complete="true" ,否则⽆法加载 Servlet metadata-complete 属性 表示通知Web 容器是否寻找注解,默认不写或者设置 false ,容器会扫描注解,为 Web 应⽤程序构建有效 的元数据;metadata-complete="true" ,会在启动时不扫描注解( annotation )。如果不扫描注解的话,⽤注解进⾏的配置就⽆法⽣效,例如:@WebServlet
(5).urlPatterns 的常⽤规则:
/* 或者 / :拦截所有
*.do :拦截指定后缀
/user/test :拦截路径
/user/ .do / .do test*.do 都是⾮法的,启动时候会报错

这篇关于获取web.xml参数初始化数据servlet3.0注解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/197856

相关文章

C#实现将XML数据自动化地写入Excel文件

《C#实现将XML数据自动化地写入Excel文件》在现代企业级应用中,数据处理与报表生成是核心环节,本文将深入探讨如何利用C#和一款优秀的库,将XML数据自动化地写入Excel文件,有需要的小伙伴可以... 目录理解XML数据结构与Excel的对应关系引入高效工具:使用Spire.XLS for .NETC

自定义注解SpringBoot防重复提交AOP方法详解

《自定义注解SpringBoot防重复提交AOP方法详解》该文章描述了一个防止重复提交的流程,通过HttpServletRequest对象获取请求信息,生成唯一标识,使用Redis分布式锁判断请求是否... 目录防重复提交流程引入依赖properties配置自定义注解切面Redis工具类controller

C#如何在Excel文档中获取分页信息

《C#如何在Excel文档中获取分页信息》在日常工作中,我们经常需要处理大量的Excel数据,本文将深入探讨如何利用Spire.XLSfor.NET,高效准确地获取Excel文档中的分页信息,包括水平... 目录理解Excel中的分页机制借助 Spire.XLS for .NET 获取分页信息为什么选择 S

Java线程池核心参数原理及使用指南

《Java线程池核心参数原理及使用指南》本文详细介绍了Java线程池的基本概念、核心类、核心参数、工作原理、常见类型以及最佳实践,通过理解每个参数的含义和工作原理,可以更好地配置线程池,提高系统性能,... 目录一、线程池概述1.1 什么是线程池1.2 线程池的优势二、线程池核心类三、ThreadPoolE

Springboot请求和响应相关注解及使用场景分析

《Springboot请求和响应相关注解及使用场景分析》本文介绍了SpringBoot中用于处理HTTP请求和构建HTTP响应的常用注解,包括@RequestMapping、@RequestParam... 目录1. 请求处理注解@RequestMapping@GetMapping, @PostMappin

springboot3.x使用@NacosValue无法获取配置信息的解决过程

《springboot3.x使用@NacosValue无法获取配置信息的解决过程》在SpringBoot3.x中升级Nacos依赖后,使用@NacosValue无法动态获取配置,通过引入SpringC... 目录一、python问题描述二、解决方案总结一、问题描述springboot从2android.x

MySQL数据目录迁移的完整过程

《MySQL数据目录迁移的完整过程》文章详细介绍了将MySQL数据目录迁移到新硬盘的整个过程,包括新硬盘挂载、创建新的数据目录、迁移数据(推荐使用两遍rsync方案)、修改MySQL配置文件和重启验证... 目录1,新硬盘挂载(如果有的话)2,创建新的 mysql 数据目录3,迁移 MySQL 数据(推荐两

Python数据验证神器Pydantic库的使用和实践中的避坑指南

《Python数据验证神器Pydantic库的使用和实践中的避坑指南》Pydantic是一个用于数据验证和设置的库,可以显著简化API接口开发,文章通过一个实际案例,展示了Pydantic如何在生产环... 目录1️⃣ 崩溃时刻:当你的API接口又双叒崩了!2️⃣ 神兵天降:3行代码解决验证难题3️⃣ 深度

MySQL快速复制一张表的四种核心方法(包括表结构和数据)

《MySQL快速复制一张表的四种核心方法(包括表结构和数据)》本文详细介绍了四种复制MySQL表(结构+数据)的方法,并对每种方法进行了对比分析,适用于不同场景和数据量的复制需求,特别是针对超大表(1... 目录一、mysql 复制表(结构+数据)的 4 种核心方法(面试结构化回答)方法 1:CREATE

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加