1、在web.xml中指定的固有映射路径优先级最高,找不到的情况下才去调用设置的默认映射路径。
<web-app version="2.5"
metadata-complete="true">
<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>com.lib.helloservlet</servlet-class>
</servlet>
<servlet>
<servlet-name>error</servlet-name>
<servlet-class>com.lib.errorservlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>error</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>
当访问localhost:8080/hello时返回的是helloservlet方法,而如果访问其他的例如localhost:8080/hello1就会返回errorservlet方法。
2、ServletContext
在Web容器启动过程中,它会为每个Web程序都创建一个对应的ServletContext对象,这个对象是全局的,能够代表当前的Web应用
· 共享数据
在一个Servlet中保存到ServletContext中的数据能够在另一个Servlet中拿到。
<servlet>
<servlet-name>test</servlet-name>
<servlet-class>com.lib.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>test</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>get</servlet-name>
<servlet-class>com.lib.GetServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>get</servlet-name>
<url-pattern>/get</url-pattern>
</servlet-mapping>
先在TestServlet中给ServletContext添加值
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("it's ok");
ServletContext sc = this.getServletContext(); //servlet上下文
String s = "lalala";
sc.setAttribute("string",s); //将一个数据保存到servlet的context中
}
然后在GetServlet中获取ServletContext中的值
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext sc1 = this.getServletContext();
String str = (String) sc1.getAttribute("string");
resp.getWriter().print("string:"+str);
}
最后运行程序;
如果先进入get页面则会返回null值,再进入test页面后最后又进入get页面可以看到有返回值。