最近在学习restful框架,恰好对web.xml文件不太熟悉,于是有了以下的研究,以下多位自己的见解,若有不对,还请大神指点
就拿我的web项目来看
点开WEB-INF目录下发现有个web.xml藏在里,我们来看看葫芦里面卖的是什么药
粗略的看整个xml文件里面密密麻麻的的标签是不是让人感觉摸不着头脑 别急!
我们知道一个web项目要部署到服务器(例如,Tomcat)上,然后通过客户端的url去访问我们的web项目,那么当我们把项目Add到server上之后
然后启动servers就可以了,我的好奇点就是,服务器背后是如何获取到我的项目的各种信息的呢?原来他是通过web.xml的一些配置信息来实现的
我们把话题扯远一点,我们浏览器是怎样通过浏览器去访问部署在servers上的web项目呢(即web app),
当我们的web项目部署到了tomcat容器上后容器就会自动生成一个context即web项目
从tomcat的server.xml文件也能看出来,当我们点击Add之后tomcat自动在xml里面生成代码
我们在回来看web.xml
有人会问,项目是Add上去了,那我们怎么去使用项目里的各种类去完成各种功能呢,这就牵涉到我们的xml了
启动web项目的时候tomcat容器首先会去读取xml的两个标签
即和 。
下面拿我的项目举例
resteasy.resources
restful.api.MyAPI,restful.api.UserLogin
1.容器以的name作为键,value作为值,将其转化为键值对,存入Context。
2.容器创建中的类实例,根据配置的class类路径 来创建监听,在监听中会 有contextInitialized(ServletContextEvent args)初始化方法,启动Web应用时,系统调用Listener的该方法,在这个方法中获得:
ServletContext application =ServletContextEvent.getServletContext();
context-param的值= application.getInitParameter("context-param的键");
得到这个context-param的值之后,你就可以做一些操作了。
现在我们已经拿到了两个类,然后我们需要去利用restful框架的原理去利用它搞事情呀
我们具体来看内容
我们来看MyAPI.java:(这是一个servlet程序)
这是一个我们在浏览器中输入 localhost:8080/test1/a/id 就可以去施行查询目标学生的名字的功能了
我们再来看web.xml
我们在url-pattern中设置了/a/* 一旦我们在浏览器中有/a/xxx 则会被该servlet拦截,我们可知该servlet是一个实现转发功能的servlet:当他发现我们的url里面出现localhost:8080/test1/a/id,则它会把我们响应的请求转发值MyAPI.java中然后执行响应的方法
当然以上都是我一个人意淫出来的结果,若有哪里不对还请大佬们指出来