导航

进入黑马day4-Serlet与Tomcat

Posted on 2013-02-27 23:38  酷鱼影子  阅读(202)  评论(0编辑  收藏  举报

Servlet运行过程:

1、配置Preferences/MyEclipse Enterprise Workbench/Servers/Tomcat

/Tomcat6.x,注意勾选Enable

2、deploy MyEclipse J2ee project to Service

3、Start Tomcat 6.x

4、在网页中输入http://localhost/项目名/url-pattern(web.xml配置的引用名)

如:http://localhost/day4/servlet/Demo1

Web.xml配置

1、参数

<context-param>

<param-name>data0</param-name>

<param-value>aaaaaaa</param-value>

</context-param>

<servlet>

2、初始化参数

<init-param>

            <param-name>data1</param-name>

            <param-value>累啊</param-value>

    </init-param>

    <init-param>

            <param-name>data2</param-name>

            <param-value>好累啊</param-value>

    </init-param>

    <init-param>

            <param-name>data3</param-name>

            <param-value>非常累啊</param-value>

</init-param>

<load-on-startup>1</load-on-startup>//设置服务器启动时该Servlet第几个加载

</servlet>

Demo1.java

在doGet方法中加入代码

1、关于ServletConfig

ServletConfig config = this.getServletConfig();

String data0 = config.getInitParameter("data0");

System.out.println(data0);

Enumeration en = config.getInitParameterNames();

while(en.hasMoreElements()){

String str = (String)en.nextElement();

System.out.println(str+config.getInitParameter(str));

}

运行Servlet后,控制台输出

null

data2好累啊

data3非常累啊

data1累啊

说明config不能获取<servlet>外面的参数

2、关于ServletContext

ServletContext context =this.getServletContext();

String data0 = context.getInitParameter("data0");

System.out.println(data0);

String data1 = (String)context.getAttribute("data1");

System.out.println(data1);

运行Servlet后,控制台输出

aaaaaaa

Null

说明ServletContext可以用获取<context-param>中的值而不能获取<init-param>的值

所以获取<init-param>的值用ServletConfig,获取<context-param>ServletContext

关于response响应

response.getOutputStream().write("怎么回事呢".getBytes());

返回响应到浏览器

关于Request请求转移

Dispatcher pathcher =request.getRequestDispatcher("/12.html");

pathcher.forward(request, response);

<servlet-mapping>虚拟路径可以配置多个

例如:

<servlet-mapping>

    <servlet-name>Demo1</servlet-name>

    <url-pattern>/servlet/Demo1</url-pattern>

  </servlet-mapping>

   <servlet-mapping>

    <servlet-name>Demo1</servlet-name>

    <url-pattern>/aaa</url-pattern>

  </servlet-mapping>

则可以通过http://localhost/day4/aaa访问

如果<servlet-mapping>虚拟路径同时配置如下的一些映射关系:

Servlet1 映射到 /abc/* 

Servlet2 映射到 /* 

Servlet3 映射到 /abc 

Servlet4 映射到 *.do 

问题:

当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应

Servlet引擎将调用Servlet1

当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应

Servlet引擎将调用Servlet3

当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应

Servlet引擎将调用Servlet1

当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应

Servlet引擎将调用Servlet2

当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应

Servlet引擎将调用Servlet2

//利用ServletContext读取资源文件

ServletContext context = this.getServletContext();

//该路径相对于Tomcat中web应用day4文件夹的路径

InputStream in = context.getResourceAsStream("/1.properties");

Properties p  = new Properties();

p.load(in);

System.out.println(p.getProperty("username"));

//利用TomCat 加载web应用classes中类的加载器获取资源文件

1、利用类加载器获取路径,再用FileInputStream加载,这样就可以避免出现类加载器已有缓存中的资源文件

ClassLoader loader = this.getClass().getClassLoader();

//该路径相对于WEB_INF/classes

URL urlPath = loader.getResource("../../1.properties");

String path = urlPath.getPath();

FileInputStream in = new FileInputStream(path);

2、直接用类加载器加载资源文件,该方法不能实时更新资源文件

ClassLoader loader = this.getClass().getClassLoader();

InputStream in

 =  loader.getResourceAsStream("../../1.properties");                   

         Properties p = new Properties();