JavaWeb web.xml配置详解

这篇具有很好参考价值的文章主要介绍了JavaWeb web.xml配置详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考:

  • XML 教程
  • Java web之web.xml配置详解

Javaweb三大组件是:Servlet,Filter,Listener。

  • 1、Servlet
    Servlet作为中转处理的容器,连接了客户端和服务器端的信息交互和处理。
  • 2、Filter
    拦截用户请求,在服务器作出响应前,可以在拦截后修改request和response,实现开发者想得到的功能。
  • 3、Listener
    Listener就是监听器,监听主要是对ServletContext,HttpSession,ServletRequest这三大域对象的创建和销毁事件监听,还有就是对域对象属性的操作监听,当监听这些事件发生是就会进行一些适当的操作。

0、概述

web.xml文件不是必须的

  1. 一个web中可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的。
  2. web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、filter、listener、启动加载级别等。
  3. 当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web应用。

web容器的加载顺序 ServletContext -> context-param -> listener -> filter -> servlet。

启动一个web项目,web容器会读取它的配置文件web.xml,读取和两个结点。
创建一个ServletContext(Servlet上下文),这个web项目的所有部分都将共享这个上下文
容器将转换为键值对,并交给ServletContext。
容器创建中的类实例,创建监听器。

1、头文件

参考:

  • XML:文件头部xmlns详解
  • XML 中的 xmlns、xmlns:xsi、xsi:schemaLocation
<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">
</web-app>
  • xmlns:xsi , xmlns, xsi:schmeLocation 这些看上去相近的属性是什么含义, 为什么他们的值是不一样的 URL?
  • 这些 URL 是否对应一些可以访问的资源,对于该文件的解析是否会需要下载这些 URL 对应的资源?

①、xmlns:h="http://xmlns.jcp.org/xml/ns/javaee"
h元素定义一个命名空间,"http://xmlns.jcp.org/xml/ns/javaee"是标识该空间的唯一字符串(常采用URL形式)
②、xmlns="http://xmlns.jcp.org/xml/ns/javaee"
默认空间的唯一标识符"http://xmlns.jcp.org/xml/ns/javaee"

对于命名空间的标识符, URI 的作用仅仅是保证唯一性, 它并不需要对应一个可以访问的资源或文件 ! 但是, 有很多公司都会让namespace 的 URI 指向一个包含该命名空间信息的网页。

③、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"
根据之前的知识我们可以理解, xmlns:xsi 定义了一个命名空间前缀 xsi 对应的唯一字符串 http://www.w3.org/2001/XMLSchema-instance。 但是读者会发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD(XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。

注: XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构是否和 XSD 文件中定义的一致。 XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器

这行的语法其实是, xsi:schemaLocation = "键" “值”,即 xsi 命名空间下 schemaLocation 元素的值为一个由空格分开的键值对。

前一个“键” http://maven.apache.org/POM/4.0.0 指代 【命名空间】, 只是一个全局唯一字符串而已。

后一个值指代 【XSD location URI】 , 这个值指示了前一个命名空间所对应的 XSD 文件的位置, xml parser 可以利用这个信息获取到 XSD 文件, 从而通过 XSD 文件对所有属于 命名空间 http://maven.apache.org/POM/4.0.0 的元素结构进行校验, 因此这个值必然是可以访问的, 且访问到的内容是一个 XSD 文件的内容。

例:

<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"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context 
		http://www.springframework.org/schema/context/spring-context.xsd
		http://www.springframework.org/schema/util 
		http://www.springframework.org/schema/util/spring-util.xsd">
</beans>
  • xmlns="http://www.springframework.org/schema/beans"就是定义了一个默认命名空间, xmlns 的值可以随便改,只要是唯一的就行,如果更改了这里的值,下面的xsi:schemaLocation中的也要修改为对应的值。
  • xmlns:context="http://www.springframework.org/schema/context"就是定义了一个 context 的命名空间,使用 context 下的元素,需要加上 context 前缀。
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance",创建了一个 xsi 命名空间,可以通过xsi:schemaLocation来定义 xsd 文件的位置,以便 XML 解析器解析 XML 文件。

2、配置欢迎页面

<web-app>
	<welcome-file-list>
		<welcome-file>wecome1.jsp</welcome-file>
		<welcome-file>wecome2.jsp</welcome-file>
		<description>欢迎页面</description>
	</welcome-file-list>
</web-app>

上面代码中就配置了两个欢迎页面 wecome1.jsp 和 wecome2.jsp,显示时按照配置顺序显示,如果能找到 wecome1.jsp 文件就显示该文件,如果找不到就找第二个,依次类推。

欢迎页面是用于访问 web 工程时,只给了根名,没有给出具体的页面,这时就回去访问配置的欢迎页面,如果没有配置欢迎页面,不同的应用服务器可能会有不同的行为。对于 Tomcat 来说,会默认先查找 index.html 文件,如果找到了,就将其返回给浏览器;如果没有找到,就继续查找 index.jsp 文件,如果都没有找到,那么 Tomcat 就会显示 The requested resource is not available 的页面。

欢迎页面只是在没有给出具体的访问页面时会被用到,如果指定了具体页面,只要访问的路径正确,是可以正常访问的。

3、配置Servlet

Servlet命名和定制URL

<web-app>
	<servlet>
		<servlet-name>TestServlet</servlet-name>
		<servlet-class>com.yiyu.servlet.showAllServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>TestServlet</servlet-name>
		<url-pattern>/TestServlet</url-pattern>
	</servlet-mapping>
</web-app>

<!-- <servlet-name></servlet-name> 指定servlet的名称 
<servlet-class></servlet-class> 指定servlet的类名称 \
<jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径 
<init-param></init-param> 用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数 

<load-on-startup></load-on-startup>指定当Web应用启动时,装载Servlet的次序。当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet。当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它。 

<servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素 <servlet-name></servlet-name> 指定servlet的名称 
<url-pattern></url-pattern> 指定servlet所对应的URL -->

<servlet-name>:注册的名字
<servlet-class>:配置的 Servlet 的全类名
<url-pattern>:为这个 Servlet 映射一个对外访问路径
servlet 和 url-pattern 之间的关系是 一对多的关系。

4、配置Filter

参考:

  • web.xml filter配置

详见该博客

包:servlet-api.jar
web.xml配置详解,学习,前端,xml,数据库

过滤器配置

<web-app>
	<filter>
		<filter-name>Filter1</filter-name><!--过滤器名称-->
		<filter-class>D2020128.TestFilter</filter-class><!--过滤器类的包路径-->
		<!-- 可使用<init-param>标签初始化 -->
	</filter>
	<!-- 一个过滤器需要过滤多种文件,则可以配置多个<filter-mapping>,一个mapping定义一个url-pattern来定义过滤规则 -->
	<filter-mapping><!--过滤器映射-->
		<filter-name>Filter1</filter-name>
		<url-pattern>/TestServlet</url-pattern><!--指定过滤器作用的对象-->
	</filter-mapping>
	<filter-mapping>
		<filter-name>Filter1</filter-name>
		<!-- 所有外部访问都需要先经过该过滤器。 -->
		<url—pattern>/*</url-pattern>
		<!-- 作用于某一文件夹下所有文件 -->
		<!-- <url—pattern>/dir/*</url-pattern> -->
		<!-- 作用于某一种类型的文件 -->
		<!-- <url—pattern>*.扩展名</url-pattern> -->
		<!-- 作用于某一文件夹下某一类型文件 -->
		<!-- <url—pattern>/dir/*.扩展名</url-pattern> -->
	</filter-mapping>
</web-app>
  • Filter 的 url-pattern 中配置的路径是访问已经存在的网络资源,如静态页面、jsp、servlet等。
  • filter 和 url-pattern 之间的关系是 多对多的关系。即,Filter可负责拦截多个请求或响应;一个请求或响应也可被多个Filter拦截。(多个 filter 会根据 web.xml 中配置的顺序组成 filter 链)。

常用场合:
(1)认证Filter
(2)日志和审核Filter
(3)图片转换Filter
(4)数据压缩Filter
(5)密码Filter
(6)令牌Filter
(7)触发资源访问事件的Filter
(8)XSLT Filter
(9)媒体类型链Filter

此时你就可以对请求或响应(Request、Response)统一设置编码,简化操作;同时还可进行逻辑判断,如用户是否已经登陆、有没有权限访问该页面、权限管理、过滤敏感词汇 等等工作。它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁

过滤器生命周期:初始化init() → 过滤doFilter() → 析构(销毁)destroy()
过滤器有四种拦截方式!分别是:REQUEST、FORWARD、INCLUDE、ERROR。
过滤器链 顺序:按照web.xml中配置的顺序

4.1、如何创建Filter?

类似于servlet,需两步
第一步:创建Filter处理类(一般我们都用现有的)
Filter必须实现javax.servlet.Filter接口,在该接口中定义了三个方法:
(1) void init(FilterConfig config):用于Filter的初始化。FilteConfig用于访问Filter的配置信息。
(2) void destroy():Filter销毁前的操作,例如完成某些资源的回收。
(3) void doFilter(ServletRequest request,ServletResponse response,FilterChain chain):
实现过滤功能的核心方法,实现对请求request进行预处理,也可以实现对服务器响应response进行后处理—它们的分界线为是否调用了chain.doFilter(request,response),执行该方法之前,即对用户请求request进行预处理,执行该方法之后,即对服务器响应response进行后处理。

第二步:Web.xml文件中配置Filter
Filter配置与Servlet的配置非常相似,区别在于Servlet通常只配置一个URL,而Filter可以同时配置多个请求的URL。配置Filter有两种方式:
(1). 在Filter类中通过Annotation进行配置。
(2). 在web.xml文件中通过配置文件进行配置。

5、监听器

<listener> 
    <listerner-class>com.listener.SessionListener</listener-class> 
</listener>

监听器可以监听就是在 applicationsessionrequest 三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件。

applicationServletContext类型的对象。ServletContext 代表整个web应用,在服务器启动的时候,tomcat会自动创建该对象。在服务器关闭时会自动销毁该对象。
web.xml配置详解,学习,前端,xml,数据库

6、配置会话超时

单位为秒

<session-config>
    <session-timeout>120</session-timeout>
</session-config>

7、配置上下文参数

声明应用范围内的初始化参数。用于向Servlet+Context提供键值对,即应用程序上下文信息。后续的listener,filter在初始化时会用到这些上下文信息。在servlet里面可以通过getServletContext().getInitParameter(“context/param”)得到

<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>/WEB-INF/log4j2.xml</param-value>
</context-param>

8、配置应用描述

<disciption>Tomcat Example servlets and JSP pages.</disciption>

9、配置应用名称

<display-name>Tomcat Example</display-name>

10、指定错误处理页面

可以通过“异常类型”或“错误码”来指定错误处理页面。

<error-page>
    <error-code>404</error-code>
    <location>/error404.jsp</location>
</error-page>
<error-page>
    <exception-type>java.lang.Exception<exception-type>
    <location>/exception.jsp<location>
</error-page>

11、配置Web应用图标

<icon>    
	<small-icon>/images/app_small.gif</small-icon>    
	<large-icon>/images/app_large.gif</large-icon>    
</icon>

12、配置安全限制

<security-constraint>    
  <display-name>Example Security Constraint</display-name>    
   <web-resource-collection>    
      <web-resource-name>Protected Area</web-resource-name>    
      <url-pattern>/jsp/security/protected/*</url-pattern>
      <url-pattern>*.jsp</url-pattern>
      <!-- 如果没有 <http-method> 元素,这表示将禁止所有 HTTP 方法访问相应的资源。 -->
      <http-method>DELETE</http-method>    
      <http-method>GET</http-method>    
      <http-method>POST</http-method>    
      <http-method>PUT</http-method>    
   </web-resource-collection>
   <!-- 子元素 <auth-constraint> 需要和 <login-config> 相配合使用,但可以被单独使用。 -->
   <!-- 如果没有 <auth-constraint> 子元素,这表明任何身份的用户都可以访问相应的资源。 -->
   <!-- 如果加入了 <auth-constraint> 子元素,但是其内容为空,这表示所有身份的用户都被禁止访问相应的资源。  -->
   <auth-constraint>
   	 <role-name>All Role</role-name>
     <role-name>tomcat</role-name>    
     <role-name>role1</role-name>    
   </auth-constraint>
   <!-- <user-data-constraint>   
     <transport-guarantee>NONE</transport-guarantee>   
   </user-data-constraint> -->
</security-constraint>

<login-config>Xml代码   
<!--四种验证方式,附在最后有说明-->    
  <auth-method>FORM</auth-method>    
  <form-login-config>    
   <form-login-page>/login.html</form-login-page>    
   <form-error-page>/error.html</form-error-page>    
  </form-login-config>    
</login-config>    
<security-role>    
  <role-name>All Role</role-name>    
</security-role>

13、配置登录验证

<login-config>    
  <auth-method>FORM</auth-method>    
  <realm-name>Example-Based Authentiation Area</realm-name>    
  <form-login-config>    
     <form-login-page>/jsp/security/protected/login.jsp</form-login-page>    
     <form-error-page>/jsp/security/protected/error.jsp</form-error-page>    
  </form-login-config>    
</login-config>

初始化参数

<web-app>
	<servlet>
		<servlet-name>InitParamServlet</servlet-name>
		<servlet-class>InitParamServlet</servlet-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
		<init-param>
			<param-name>helloween</param-name>		<!--用户: helloween-->
			<param-value>password</param-value>
		</init-param>
		<init-param>
			<param-name>admin</param-name>			<!--用户: admin-->
			<param-value>admin</param-value>
		</init-param>
		<init-param>
			<param-name>babyface</param-name>	<!--用户: babyface-->
			<param-value>babyface</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>	
		<!-- 
		1、load-on-startup 元素标记容器是否应该在web应用程序启动的时候就加载这个servlet,(实例化并调用其init()方法)。
		2、它的值必须是一个整数,表示servlet被加载的先后顺序。
		3、如果该元素的值为负数或者没有设置,则容器会当Servlet被请求时再加载。
		4、如果值为正整数或者0时,表示容器在应用启动时就加载并初始化这个servlet,值越小,servlet的优先级越高,就越先被加载。值相同时,容器就会自己选择顺序来加载。 -->
	</servlet>
	<servlet-mapping>
		<servlet-name>InitParamServlet</servlet-name>
		<url-pattern>/initParamServlet</url-pattern>
	</servlet-mapping>
</web-app>
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		Enumeration params = this.getInitParameterNames(); // 所有的初始化参数名称
		while (params.hasMoreElements()) {
			String nameParam = (String) params.nextElement(); // 获取参数名
			String valueParam = this.getInitParameter(nameParam); // 获取参数值
			// 如果用户名,密码匹配则显示notice.html
			if (nameParam.equalsIgnoreCase(username) && valueParam.equalsIgnoreCase(password)) { 
				request.getRequestDispatcher("/WEB-INF/notice.html").forward(request, response);
				return;
			}
		}
		this.doGet(request, response); // 若username,password不匹配,显示登录页面。
	}

使用到了枚举类型: Enumeration params = this.getInitParameterNames();文章来源地址https://www.toymoban.com/news/detail-817049.html

  1. 获取web.xml中所有的参数名: this.getInitParameterNames();
  2. 对枚举的遍历: while (params.hasMoreElements()){ …}
  3. 获取下一个元素: params.nextElement();
  4. 获取名称对应的值: getInitParameter(nameParam);
  5. 重定向: request.getRequestDispatcher(“/WEB-INF/notice.html”).forward(request,response);

到了这里,关于JavaWeb web.xml配置详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Web开发:django+前端+数据库(7)

    Python知识点:函数、面向对象 前端开发:HTML、CSS、Javascript、jQuery、Bootstrap MySQL数据库 Python的Web框架:Flask和Django 1.  安装django pip install django 2.  创建项目 专业版的pycharm可以直接创建django项目,如果时社区版的pycharm可以参考一下这篇博客(http://t.csdnimg.cn/aMlBu),直接从终

    2024年02月21日
    浏览(50)
  • Javaweb之Mybatis的XML配置文件的详细解析

    Mybatis的开发有两种方式: 注解 XML 使用Mybatis的注解方式,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句,也就是将SQL语句写在XML配置文件中。 在Mybatis中使用XML映射文件方式开发,需要符合一定的规范: XML映射文件的名称

    2024年01月24日
    浏览(55)
  • Javaweb第一章:Web前端的入门理论

    目录 前言 一.wed 💖wed是什么? 💖 wed的分类 二.HTML 和 CSS 💖HTML的介绍 HTML的标签 💖CSS的介绍 常用基本标签 💖实践 HTML结构标签特点 三.JavaScript 💖JavaScript的介绍 💖JS的学习内容 四.Vue 💖Vue的介绍  MVVM(Model-View-ViewModel)思想介绍 💖Vue的代码样式 安装Vue.js方法及其使用  

    2024年02月16日
    浏览(49)
  • JavaWeb登录注册系统/界面(邮箱验证码,数据库连接,详细注释,可作结课作业,可用于学习,可接入其他主系统)

    目录 1、致谢 2、前言 3、系统实机演示 4、系统分析与设计 (1)主要软件与工具 (2)系统分析 (3)系统规划 5、系统设计与构建 (1)JavaWeb创建 (2)JavaWeb运行 (3)先期依赖准备: 6、代码与关键注释、文件简析 (1)数据库 (2)前端 index.jsp和styleIndex.css: forgetPassword

    2024年02月08日
    浏览(58)
  • JavaWeb_Web前端_Element组件库

    在当前工程的目录下, 打开命令行执行如下指令: npm install element-ui@2.15.3 在main.js中添加如下代码: 添加组件 在views目录下创建element目录, 并在element目录下创建ElementView.vue, 代码如下所示: 导入到根组件 在App.vue的template的div中输入如下代码: 自动生成代码如下: EmpView.vue 打包按钮

    2024年02月03日
    浏览(39)
  • 13.JavaWeb & XML:构建结构化数据的重要工具

    目录 导语: 一、XML概念 (1)可拓展 (2)功能-存储数据 (3)xml与html的区别 二、XML内容 三、XML用途 四、案例:使用XML构建在线书店的书籍数据库 结语:     在当今的信息时代,数据结构化和管理成为了一个重要课题。XML(eXtensible Markup Language,可扩展标记语言)作为一

    2024年04月09日
    浏览(51)
  • web开发中,简单的案例说明前端页面和后端以及mysql数据库的交互过程

            首先这是一个基于 web开发 的稿子,作者也是转java20天左右,以前也一直迷惑起那段页面是如何和后端进行交互,数据提交提交到了哪里?后端开发如何获取到前端提交的数据呢?后端数据提交到数据库中应该如何处理,接下来通过一个简单的例子,登录案例 (实

    2024年02月03日
    浏览(57)
  • Web安全—information_schema数据库详解&基础补充

    前言 :在SQL注入中,information_schema数据库中包含的信息特别重要,通过这个表我们可以去获取到存在SQL注入网站的表,列,等信息,其危害不言而喻。 基础 :information_schema是一个存放了当前数据库管理系统中所有数据库信息的一个数据库,数据库只能进行读取,不支持修改

    2023年04月08日
    浏览(42)
  • Web安全——数据库mysql学习

    1、Web安全——HTML基础 2、Web安全——DIV CSS基础 3、Web安全——JavaScript基础 4、Web安全——PHP基础 5、Web安全——JavaScript基础(加入案例) 6、靶场搭建——搭建pikachu靶场 D:phpStudyMySQLbin 登陆: 输入 mysql -uroot -p -P3306 -h127.0.0.1 退出的三种方法 语法使用: 数据库的登陆: 这里

    2024年02月12日
    浏览(40)
  • golang web学习随便记4-内存、文件、数据库

    我们来开始学习如何存储数据。书中有一点不错,就是并不是一上来就告诉你存储数据使用数据库,因为不同的数据存储适合不同的手段。 先来看在内存中存储数据:下面的例子用结构体方式在内存存放数据,然后利用两个map来表示“索引”,键值对中的值是指向内存中结构

    2024年02月06日
    浏览(248)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包