JavaWeb学习笔记

本文最后更新于:15 分钟前

新版 web.xml

1
2
3
4
5
6
7
8
9
10
<?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"
metadata-complete="true">


</web-app>

servlet的依赖包

1
2
3
4
5
6
7
8
9
10
11
12
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
</dependencies>

编写servlet的映射

这部分内容也写在web.xml中

为什么要映射

我们写的是Java程序,而Javaweb需要浏览器来进行访问,而浏览器要链接的是web服务器,所以要在web服务器中注册我们所写的servlet,同时还需要给一个浏览器可以访问的路径(url)

1
2
3
4
5
6
7
8
9
10
11
<!--  注册servlet-->
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>cn.tars.servlet.HelloServlet</servlet-class>
</servlet>
<!-- servlet的请求路径-->
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
<!-- 此时输入hello就会走servlet-->
</servlet-mapping>

servlet中的mapping

这个值是用于指定访问相应Java程序的URL的,可以使用通配符*。
所以,可以有多个url指向一个java程序等等花式操作;(这也是为什么要进行映射二不是直接在域名中使用.class文件名的原因之一)
同时,当通配符与精准域名冲突时(如/hello与/*),默认会使用精确的域名(即/hello),也就是越精确优先级越高。

tomcat查找相应class文件的过程

  1. 当浏览器首次通过localhost:8080/XXXX/hello时,需要加载相应的servlet类
  2. 首先参考web.xml,找到子元素的值为/hello的元素
  3. 读取元素的的子元素的值,由此确定Servlet的类名为hello
  4. 找到子元素的值为hello的元素
  5. 读取该元素的子元素的值,由此确定Servlet的类名为cn.tars.servlet.HelloServlet
  6. 去/WEB-INF/classes/cn.tars.servlet目录下查找HelloServlet.class文件

servlet元素的子元素

删

  • Java包名是不允许有特殊符号的,idea会自动将不合法的包名视为普通文件夹且没有提示

    基础不牢地动山摇😥


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!