配置Servlet映射
 <servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>servlet.TestServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet</url-pattern>
    </servlet-mapping>
	只能使用/TestServlet来访问,使用其他的比如/TestServlet/xxx是访问不了的。
	第一个/表示项目根目录。
	 
	 
	可以使用. 
	<url-pattern>/servlet.TestServlet</url-pattern> 
	访问时以 /servlet.TestServlet 来访问。注意不是通过/servlet/TestServlet来访问。
	 
	 
	可以使用/
<url-pattern>/servlet/TestServlet</url-pattern>
	访问时以 /servlet/TestServlet 来访问
	 
	 
	可以使用通配符*
<url-pattern>/*</url-pattern>
	匹配所有请求。
	 
	 
	多重映射:一个Servlet配置多个<url-pattern>,可通过多个路径来访问。
<servlet-mapping>
        <servlet-name>TestServlet</servlet-name>
        <url-pattern>/TestServlet1</url-pattern>
        <url-pattern>/TestServlet2</url-pattern>
    </servlet-mapping>
	既可通过/TestServlet1来访问,又可通过/TestServlet2来访问。
	 
	 
	配置 load-on-startup
<servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>servlet.TestServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
	配置了<load-on-startup></load-on-startup>的Servlet会在Servlet容器(比如Tomcat)启动时就创建此Servlet的实例。
	参数是一个整数,值越小的越先创建(初始化)。
	 
	 
	 
	 
	 
	配置某个Servlet的初始化参数
<servlet>
        <servlet-name>TestServlet</servlet-name>
        <servlet-class>servlet.TestServlet</servlet-class>
        <init-param>
            <param-name>name</param-name>
            <param-value>张三</param-value>
        </init-param>
        <init-param>
            <param-name>age</param-name>
            <param-value>18</param-value>
        </init-param>
    </servlet>
	一个<init-param>设置一个参数。可以设置多个。
	 
	 %e</param-name>
        <param-value>20</param-value>
    </context-param>
	一个<context-param>配置一个参数,可配置多个参数。
	 
	 
	在servlet中获取参数值
 1 response.setContentType("text/html;charset=utf-8");  2 PrintWriter writer = response.getWriter();  3 ServletContext context=this.getServletContext(); //可缺省this,直接调用getServletContext()  4  5 //获取单个参数值  6 String name = context.getInitParameter("name");  7 String age = context.getInitParameter("age");  8 writer.write("name:"+name+"<br />");  9 writer.write("age:"+age); 10 11 writer.write("<hr />"); 12 13 //遍历 14 Enumeration<String> initParameterNames =context.getInitParameterNames(); //里面的元素是参数名 15 while (initParameterNames.hasMoreElements()){ 16 String paramName=initParameterNames.nextElement(); //参数名 17 String paramValue=context.getInitParameter(paramName); //参数值 18 writer.write(paramName+":"+paramValue+"<br />"); 19 }
	 
	我们注意到通过ServletContext对象获取东西参数名、参数值、Enumeration对象的三个方法都是getInitParameterXxx()。为什么是init?
	 
	ServletConfig表示当前Servlet的初始化配置。
	 
	ServletContext表示整个Web应用中所有Servlet的共享数据。共享数据有2个部分:
	- 
		在xml中通过<context-param>配置的初始化参数,这部分数据要通过ServletContext实例的getInitParameterXxx()来获取
	
- 
		另一部分共享数据是在web应用运行中通过setAttribute()添加|设置的,需要使用getAttribute()来获取。
	
	这2部分数据是分开的、独立的,操作数据的方法也是独立的一套。
	 
	 
	 
	 
	整个Web应用的共享数据
	在一个Servlet中:
    ServletContext context=getServletContext(); //可缺省this context.setAttribute("name","chy");
        context.setAttribute("age",20);  
	设置的数据是所有Servlet共享的,在其他Servlet中可以修改、获取这些数据。
	 
	在另一个Servlet中使用:
 //获取单个属性值 String name= (String) servletContext.getAttribute("name"); //获取的是属性值都是Object,需要强转 int age= (int) servletContext.getAttribute("age"); //遍历 Enumeration<String> attributeNames = servletContext.getAttributeNames(); while (attributeNames.hasMoreElements()){
            String attributeName=attributeNames.nextElement(); //属性名是String Object attributeValue = servletContext.getAttribute(attributeName); //属性值是Object,需要强转 //... }
	 
	需要先访问前一个Servlet。先设置了数据,才取得出来。
	如果要移除某个共享数据,可以使用 removeAttribute(String name) 。
	 
	获取ServletConfig对象、ServletContext对象,可以使用this,也可以缺省this,直接写getServletConfig|Context()。
	因为getServletConfig()获取的只能是当前Servlet的初始化配置,是唯一的;
	getServletContext()获取的只能是当前WebApp中的共享数据,也是唯一的;
	不需要this。
	 
	获取当前Servlet的初始化参数时,可以不要ServletConfig对象,直接写 getInitParameter()、getInitParameterNames()。
	因为当前的Servlet是唯一的、确定的。
	 
	 
	 
	 使用ServletContext读取资源文件
1 ServletContext servletContext = getServletContext(); 2 InputStream is = servletContext.getResourceAsStream("/test.properties"); 3 Properties properties = new Properties(); 4 properties.load(is);
	 
	 
	 
	 
	配置Tomcat数据源
	1、在tomcat->conf->context.xml中配置数据源
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
 <Resource name="jdbc/mysql" type="javax.sql.DataSource" driverClassName="com.mysql.cj.jdbc.Driver" url="jdbc:mysql://localhost:3306/my_db?serverTimezone=GMT" username="chy" password="abcd"  />
</Context>
	<WatchedResource>是自带的,不用管。
	一个<Resource>配置一个资源,可同时配置多个资源。<Resource>的name属性唯一标识此资源,数据源的name常用jdbc/xxx来命名。Tomcat中配置的资源是全局的,所有webapp都可以通过name引用。
	type指定资源类型是数据源。Tomcat的内置数据源是DBCP,所以参数要是DBCP的参数,可在<Resource>中配置DBCP中可配置的所有参数。
	 
	需要把数据库驱动添加到tomat的lib中。
	说明:tomcat自带java web常用的jar包。使用tomcat运行webapp时,默认会自动使用tomcat\lib下的servlet-api.jar、jsp-api.jar这2个包,所以我们不必手动添加这2个包的依赖。当然把java ee的jar包添加进来也行。
	 
	 
	 
	 
	 
	 
	2、在WebApp的web.xml中引用Tomcat数据源
<resource-ref>
        <res-ref-name>jdbc/mysql</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
    </resource-ref>
	配置在<web-app>中,一个<resource-ref>配置一个资源引用,<res-ref-name>指定要引用的资源的name(对应tomcat中资源的name),res-type指定所引用资源的类型。
	这2个子元素的位置可以互换,但在某些版本的IDEA中,如果type写在前,name写在后,type会报红,这是IDEA本身的问题,代码没有错。
	 
	 
	3、在Servlet中使用数据源
   InitialContext initialContext = new InitialContext();
            Context context = (Context) initialContext.lookup("java:comp/env"); //返回值是Object,需要强转。参数是固定的。 DataSource dataSource = (DataSource)context.lookup("jdbc/mysql"); //获取数据源,参数是资源的name。返回值是Object,需要强转 Connection connection = dataSource.getConnection(); 
	 
	 
	 
	 
	 
	使用注解配置Servlet
	从Servlet3.0开始,可以使用注解来配置Servlet。
@WebServlet(
  name = "testServlet", 
  urlPatterns = { "/servlet/testServlet" }, 
  loadOnStartup = 1, 
  initParams = {@WebInitParam(name = "name", value = "张三"),@WebInitParam(name="age",value="12")} 
)
public class TestServlet extends HttpServlet {
  //......
}
	name指定此Servlet的name,缺省时默认为此Servlet的全限定类名。
	urlPatterns、value指定映射,二者完全等价。多重映射写成字符串数组的形式,如果只有一个映射关系,可以直接写成字符串。
	loadOnStartup,即<load-on-startup>。
	initParams指定此Servlet的初始化参数,数组形式。一个@WebInitParam配置一个初始化参数,name、value均为String。
	 
	以上参数均可缺省,但一般都要配置value | urlPatterns。
	参数只有value | urlPatterns时可以缺省value | urlPatterns,直接写参数值。
@WebServlet("/servlet/testServlet")
                    	
                    	
                    	  
                    	    
                    	    
                    	    
                    	 
    如果您觉得本文的内容对您的学习有所帮助:
     
                    	
                    	   
                    	   关键字:
Dubbo