servlet

1、servlet的入门

1.1 什么是servlet

(1)servlet 是运行在 Web 服务器中的小型 Java 程序。

(2)servlet 通常通过 HTTP(超文本传输协议)接收和响应来自 Web 客户端的请求。

 

1.2 实现servlet

(1)实现Servlet接口

* 如果实现接口,需要把接口里面的方法都实现

 

(2)继承GenericServlet, HttpServlet类

* 如果继承类,不需要把类中的方法都实现

 

(3)需要web服务器知道java程序不是一个普通的java程序,而是一个servlet

* 通过配置进行操作

* 在web项目中,web.xml里面进行配置

1.3 servlet的入门程序

(1)写一个servlet,实现向页面输出内容 hello servlet

(2)步骤

第一步,创建一个类,使用这个类继承GenericServlet类

第二步,实现类里面的 service(ServletRequest req, ServletResponse res) 

* ServletRequest代表请求

* ServletResponse代表响应

第三步,使用ServletResponse向页面输出内容 getWriter() 

第四步,在web项目中的web.xml进行配置,让服务器知道是一个servlet

* <servlet>

<servlet-name>servletDemo1</servlet-name>

<servlet-class>cn.servlet.servlet.ServletDemo1</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>servletDemo1</servlet-name>

<url-pattern>/hello</url-pattern>

</servlet-mapping>

2、servlet的执行过程(画图分析执行过程)

2.1 执行过程

(1)根据在浏览器地址栏输入的地址,找web.xml中相同的url-pattern

(2)找到了url-pattern,对应的servlet-name

(3)根据找到的servlet-name到另外一个标签里面(servlet)相同名称的servlet-name

(4)在servlet标签里面找到了相同名称的servlet-name,找servlet的包类路径servlet-class

利用反射原理,让servlet里面的service方法执行

 

3、servlet的生命周期

3.1 什么是生命周期:一个人从出生到死亡

3.2 servlet的生命周期:从servlet创建到servlet销毁的过程

3.3 在servlet接口里面有五个方法,其中有三个方法是与生命周期相关的方法

(1)init方法,在servlet创建时候执行这个方法,执行一次,servlet在第一次访问时候创建

(2)service方法,在每次访问servlet时候会执行这个方法,执行多次

(3)destroy方法,销毁servlet时候执行这个方法,执行一次

  1. import java.io.IOException;
  2. import javax.servlet.GenericServlet;
  3. import javax.servlet.ServletConfig;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.ServletRequest;
  6. import javax.servlet.ServletResponse;
  7. public class ServletDemo2 extends GenericServlet {
  8. /*
  9. * 1、servlet在什么时候创建?在服务器启动的时候
  10. * 2、执行几次?一次
  11. * */
  12. @Override
  13. public void init(ServletConfig config) throws ServletException {
  14. System.out.println("init............");
  15. }
  16. /*
  17. * 1、在什么时候执行service方法?每次访问都会执行一次此方法
  18. * 2、执行几次?多次
  19. */
  20. @Override
  21. public void service(ServletRequest arg0, ServletResponse arg1)
  22. throws ServletException, IOException {
  23. System.out.println("service...............");
  24. }
  25. /*
  26. * 1、在servlet销毁时候执行,关闭服务器时候执行
  27. * 2、执行几次?一次
  28. * */
  29. @Override
  30. public void destroy() {
  31. System.out.println("destory............");
  32. }
  33. }

 

4、servlet开发细节的问题

4.1 HttpServletRequest和ServletRequest关系

                子父接口关系

(1)servletRequest和serlvetResponse不带协议

     HttpServletRequest和HttpServletResponse带协议

(2)sun公司设计时候,认为未来互联网的发展有很多的协议,目前只是http协议

 

4.2 在GenericServlet类里面有init没有参数的方法和init有参数的方法的关系

(1)有参数init方法最终也要调用init没有参数的方法,直接使用init没有参数的方法就可以了

 

4.3 在HttpServlet类里面service方法和doxxx方法关系

(1)根据提交的方式,调用不同的doXXX的方法

比如提交方式是get,调用doGet方法;比如提交方式是post,调用doPost方法

(2)一般在开发中,直接写doGet和doPost方法就可以了

(3)一般在创建servlet时候,直接继承HttpServlet实现servlet

 

4.4 在服务器启动时候创建servlet

(1)通过配置文件进行配置 ,在servlet标签里面写标签 <load-on-startup>正整数的值</load-on-startup>

 

4.5 简化编程

(1)当通过get提交方式时候,实现从1加到100

     当通过post提交方式时候,实现从1加到100

(2)无论什么提交方式,代码都能执行到

* 在dopost方法里面调用doget方法

 

5、url-pattern的配置

5.1 配置有三种方式

第一种方式:完全路径匹配

(1)写法 : /aa   /hello

 

第二种方式:目录匹配

(1)写法:  /aa/*

 

第三种方式:扩展名匹配

(1)写法:  *.do   *.action

 

5.2 优先级

完全路径匹配 > 目录匹配 > 扩展名匹配

5.3 练习

 
  1. 对于如下的一些映射关系:
  2. Servlet1 映射到 /abc/*
  3. Servlet2 映射到 /*
  4. Servlet3 映射到 /abc
  5. Servlet4 映射到 *.do
  6. //问题:
  7. //1、当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应
  8. Servlet1
  9. //2、当请求URL为“/abc”时,“/abc/*”和“/abc”都匹配,哪个servlet响应
  10. Servlet3
  11. //3、当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应
  12. Servlet1
  13. //4、当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
  14. Servlet2
  15. //5、当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应
  16. Servlet2

 

6、开发中路径的问题

6.1 相对路径

(1)在html文件中引入图片

(2)有三种情况

第一种:图片和html在同一个目录下面

* 直接写图片的名称

第二种:图片在html的上层目录

* 写 ../ 表示上层目录

第三种:图片在html的下层目录

* 直接写目录名称和图片名称

 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>path01.html</title>
  5. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  6. <meta http-equiv="description" content="this is my page">
  7. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  8. <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
  9. </head>
  10. <body>
  11. <!-- 图片和html文件在同一个目录 -->
  12. <!-- <img src="a.jpg"/> -->
  13. <!-- 图片在html的上层目录 -->
  14. <!-- <img src="../b.jpg"/> -->
  15. <!-- 图片在html的下层目录 -->
  16. <img src="cc/c.jpg"/>
  17. </body>
  18. </html>

 

6.2 绝对路径(一般开发中都使用)

(1)第一种写法:http://ip地址+端口号/文件的路径

<img src="http://127.0.0.1/day07/path02/a.jpg"/>

               /* <img src="http://127.0.0.1:8080/day07/path01/a.jpg"/>*/

 

(2)第二种写法:直接写 /项目名称/文件路径

<img src="/day07/path01/cc/c.jpg"/>

 
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>path02.html</title>
  5. <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
  6. <meta http-equiv="description" content="this is my page">
  7. <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  8. <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->
  9. </head>
  10. <body>
  11. <!-- 第一种写法:使用绝对路径引入图片 -->
  12. <!-- <img src="http://127.0.0.1/day0/path02/a.jpg"/> -->
  13. <!-- 第二种写法:使用项目绝对路径引入图片 -->
  14. <img src="/day07/path01/cc/c.jpg"/>
  15. </body>
  16. </html>

 

7、重定向和转发

7.1 重定向

(1)使用的是客户端路径

(2)重定向请求两次,使用的是客户端路径,携带项目名称 ,比如 /day07/demo3

7.2 转发

(1)使用的是服务端路径

(2)转发请求一次,使用的是服务器端路径,不需要携带项目名称 , 比如 /demo4

8、ServletConfig对象

8.0 创建ServletConfig对象

(1)直接使用方法创建对象 getServletConfig()

 

8.1 得到当前运行的servlet的名称

(1)web.xml中 <servlet-name>ConfigDemo1</servlet-name>

(2)String getServletName() 

  1. import java.io.IOException;
  2. import javax.servlet.ServletConfig;
  3. import javax.servlet.ServletException;
  4. import javax.servlet.http.HttpServlet;
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.http.HttpServletResponse;
  7. public class ConfigDemo1_1 extends HttpServlet {
  8. /**
  9. *
  10. */
  11. public void doGet(HttpServletRequest request, HttpServletResponse response)
  12. throws ServletException, IOException {
  13. //创建servletconfig对象
  14. ServletConfig config = getServletConfig();
  15. //得到当前运行的servlet名称
  16. String name = config.getServletName();
  17. System.out.println(name);
  18. }
  19. /**
  20. *
  21. */
  22. public void doPost(HttpServletRequest request, HttpServletResponse response)
  23. throws ServletException, IOException {
  24. doGet(request, response);
  25. }
  26. }

8.2 创建servletContext对象    (重点)

(1)ServletContext getServletContext() 

(2)一般都使用 getServletContext()方法

 

8.3 获取初始化参数

(1)在web.xml中进行配置初始化参数

在servlet标签里面进行配置

(2)

               ****String     getInitParameter(String name) :根据名称得到值(参数是初始化参数名称)

* 代码

//得到servletconfig对象

ServletConfig config = getServletConfig();

//getInitParameter(String name)

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

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

     ****Enumeration    getInitParameterNames()  :得到所有的初始化参数的名称

* 代码

//得到servletconfig对象

ServletConfig config = getServletConfig();

//得到所有的初始化参数名称

Enumeration<String> enumrEnumeration = config.getInitParameterNames();

//得到每个参数的名称

while(enumrEnumeration.hasMoreElements()) {

String name = enumrEnumeration.nextElement();

//根据name得到值

String value = config.getInitParameter(name);

System.out.println(name+" :: "+value);

}

  1. import java.io.IOException;
  2. import java.util.Enumeration;
  3. import javax.servlet.ServletConfig;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class ConfigDemo2_1 extends HttpServlet {
  9. /**
  10. *
  11. */
  12. public void doGet(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. test2();
  15. }
  16. //getInitParameterNames()
  17. public void test2() {
  18. //得到servletconfig对象
  19. ServletConfig config = getServletConfig();
  20. //得到所有的初始化参数名称
  21. Enumeration<String> enumrEnumeration = config.getInitParameterNames();
  22. //得到每个参数的名称
  23. while(enumrEnumeration.hasMoreElements()) {
  24. String name = enumrEnumeration.nextElement();
  25. //根据name得到值
  26. String value = config.getInitParameter(name);
  27. System.out.println(name+" :: "+value);
  28. }
  29. }
  30. //getInitParameter(String name)
  31. private void test1() {
  32. //得到servletconfig对象
  33. ServletConfig config = getServletConfig();
  34. //getInitParameter(String name)
  35. String username = config.getInitParameter("username");
  36. String password = config.getInitParameter("password");
  37. System.out.println(username);
  38. System.out.println(password);
  39. }
  40. /**
  41. *
  42. */
  43. public void doPost(HttpServletRequest request, HttpServletResponse response)
  44. throws ServletException, IOException {
  45. doGet(request, response);
  46. }
  47. }

 

 

9、ServletContext对象

9.1 创建ServletContext对象

(1)第一种方式,使用ServletConfig对象里面的方法 getServletContext()

(2)第二种方式,直接使用 getServletContext()

 

9.2 获取全局的初始化参数

(1)配置全局初始化参数

  <context-param>

<param-name>url</param-name>

<param-value>localhost</param-value>

  </context-param>

(2)String getInitParameter(String name) :根据名称得到全局初始化参数的值

* 代码

//得到servletContext对象

ServletContext context = getServletContext();

//根据名称得到全局初始化参数的值

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

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

 

     Enumeration getInitParameterNames()  :得到所有的全局初始化参数的名称

* 代码

//得到servletContext对象

ServletContext context = getServletContext();

//使用方法得到所有的全局初始化参数的名称

Enumeration<String> enumrEnumeration = context.getInitParameterNames();

//得到每个全局初始化参数的名称

while(enumrEnumeration.hasMoreElements()) {

String name = enumrEnumeration.nextElement();

String value = context.getInitParameter(name);

System.out.println(name+" :: "+value);

}

9.3 在启动tomcat服务器时候,会为每个项目创建一个servletContext对象,在这个项目里面如果通过servlet1向

servletContext里面设置一个值,在这个项目里面的其他的servlet里面可以的这个值

(1)servletContext域对象:在一定的范围内,存值和取值,范围是整个web项目

(2)存值:setAttribute(String name, Object object) 

(3)取值:getAttribute(String name) 

(4)首先创建servlet1,通过servlet1向servletContext里面设置一个值

     其次,再创建servlet2,在servlet2获取通过servlet1设置的值

 

10、练习:统计网站的访问次数

10.1 创建一个servlet,每次访问这个servlet计算一次访问

19.2 实现的步骤(分析图)

 

11、使用servletContext对象获取web项目中的资源

11.1 使用传统方式获取web项目中的文件

(1)创建web项目,创建properties文件

(2)得到要操作文件的输入流,使用相对路径

* classes/db1.properties : 相对路径

* 相对虚拟机的位置

* 在web项目中,虚拟机在tomcat启动时候,tomcat在bin里面

(3)使用传统方式里面的相对路径,不能读取web项目中的文件

  1. import java.io.FileInputStream;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.Properties;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. /**
  10. * 使用传统方式读取web项目中的文件
  11. * @author asus
  12. *
  13. */
  14. public class ServletDemo7_1 extends HttpServlet {
  15. /**
  16. * classes/db1.properties : 相对路径
  17. * 相对虚拟机的位置
  18. * 在web项目中,虚拟机在tomcat启动时候,tomcat在bin里面
  19. *
  20. */
  21. public void doGet(HttpServletRequest request, HttpServletResponse response)
  22. throws ServletException, IOException {
  23. //创建对象
  24. Properties p = new Properties();
  25. //得到操作文件的输入流
  26. InputStream in = new FileInputStream("classes/db1.properties");
  27. //把文件的输入流放到对象里面
  28. p.load(in);
  29. //依次得到文件里面值
  30. String url = p.getProperty("url");
  31. String username = p.getProperty("username");
  32. String password = p.getProperty("password");
  33. System.out.println(url);
  34. System.out.println(username);
  35. System.out.println(password);
  36. }
  37. /**
  38. *
  39. */
  40. public void doPost(HttpServletRequest request, HttpServletResponse response)
  41. throws ServletException, IOException {
  42. doGet(request, response);
  43. }
  44. }

 

11.2 使用servletContext对象读取web项目中的文件

(1)InputStream getResourceAsStream(java.lang.String path) :得到要操作文件的输入流

第一个操作:文件放到src下面

= 路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat的webapps里面的具体的路径

= 代码

//路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat里面的具体的路径

InputStream in = context.getResourceAsStream("/WEB-INF/classes/db1.properties");

 

第二个操作:文件放到包里面

= 路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径

= 代码

//路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径

InputStream in = context.getResourceAsStream("/WEB-INF/classes/cn/itcast/read/db2.properties");

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.util.Properties;
  4. import javax.servlet.ServletContext;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class ServletDemo7_2 extends HttpServlet {
  10. /**
  11. * 使用servletContext对象里面
  12. * getResourceAsStream(java.lang.String path) :得到要操作文件的输入流
  13. */
  14. public void doGet(HttpServletRequest request, HttpServletResponse response)
  15. throws ServletException, IOException {
  16. test2();
  17. }
  18. //读取包下面properties格式文件的方法
  19. public void test2() throws IOException {
  20. //创建对象
  21. Properties p = new Properties();
  22. //得到servletContext对象
  23. ServletContext context = getServletContext();
  24. //得到要操作文件的输入流
  25. //路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径
  26. InputStream in = context.getResourceAsStream("/WEB-INF/classes/cn/itcast/read/db2.properties");
  27. //把文件的输入流放到对象里面
  28. p.load(in);
  29. //依次得到文件里面内容
  30. String url = p.getProperty("url");
  31. String username = p.getProperty("username");
  32. String password = p.getProperty("password");
  33. System.out.println(url);
  34. System.out.println(username);
  35. System.out.println(password);
  36. }
  37. //读取src下面properties格式文件的方法
  38. private void test1() throws IOException {
  39. //创建对象
  40. Properties p = new Properties();
  41. //得到servletContext对象
  42. ServletContext context = getServletContext();
  43. //得到要操作文件的输入流
  44. //路径: 第一个位置 /,理解为项目的名称;后面写文件在tomcat里面的具体的路径
  45. InputStream in = context.getResourceAsStream("/WEB-INF/classes/db1.properties");
  46. //把文件的输入流放到对象
  47. p.load(in);
  48. //依次得到文件里面内容
  49. String url = p.getProperty("url");
  50. String username = p.getProperty("username");
  51. String password = p.getProperty("password");
  52. System.out.println(url);
  53. System.out.println(username);
  54. System.out.println(password);
  55. }
  56. /**
  57. *
  58. */
  59. public void doPost(HttpServletRequest request, HttpServletResponse response)
  60. throws ServletException, IOException {
  61. doGet(request, response);
  62. }
  63. }

第三个操作:文件放到webroot下面

= 路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径

= 代码:

//路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径

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

 

* 注意:当把文件放到和webroot同级的目录下面,这个文件不会部署到tomcat里面,

所以使用servletContext对里面getResourceAsStream方法不能得到文件的内容

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.util.Properties;
  4. import javax.servlet.ServletContext;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. public class ServletDemo7_3 extends HttpServlet {
  10. /**
  11. *
  12. */
  13. public void doGet(HttpServletRequest request, HttpServletResponse response)
  14. throws ServletException, IOException {
  15. //读取webroot下面的文件
  16. //创建对象
  17. Properties p = new Properties();
  18. //得到servletContext对象
  19. ServletContext context = getServletContext();
  20. //得到要操作文件的输入流
  21. //路径:第一个位置 / 理解为项目名称;后面写文件在tomcat的webapps下面的具体的路径
  22. InputStream in = context.getResourceAsStream("/db3.properties");
  23. //把文件的输入流放到对象里面
  24. p.load(in);
  25. //依次得到文件里面内容
  26. String url = p.getProperty("url");
  27. String username = p.getProperty("username");
  28. String password = p.getProperty("password");
  29. System.out.println(url);
  30. System.out.println(username);
  31. System.out.println(password);
  32. }
  33. /**
  34. *
  35. */
  36. public void doPost(HttpServletRequest request, HttpServletResponse response)
  37. throws ServletException, IOException {
  38. doGet(request, response);
  39. }
  40. }

(2)String getRealPath(java.lang.String path)  :得到要操作文件的完全路径(带盘符的路径)

= 参数:和getResourceAsStream类似的

== 第一个位置 / ,项目名称;后面写文件在tomcat的webapps里面的具体的路径

 

= 代码

//使用getRealPath方法

//路径:第一个位置 / ,项目名称;后面写文件在tomcat的webapps里面的具体的路径

String path = context.getRealPath("/db3.properties");

//C:\Users\asus\Desktop\javaweb\day06\apache-tomcat-7.0.53\webapps\day07-7\db3.properties

//得到要操作文件的输入流

InputStream in = new FileInputStream(path); 

  1. import java.io.FileInputStream;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.Properties;
  5. import javax.servlet.ServletContext;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. public class ServletDemo7_4 extends HttpServlet {
  11. /**
  12. * 使用servletContext里面的getRealPath方法进行操作
  13. */
  14. public void doGet(HttpServletRequest request, HttpServletResponse response)
  15. throws ServletException, IOException {
  16. //创建servletContext对象
  17. ServletContext context = getServletContext();
  18. //使用getRealPath方法
  19. //路径:第一个位置 / ,项目名称;后面写文件在tomcat的webapps里面的具体的路径
  20. String path = context.getRealPath("/db3.properties");
  21. //C:\Users\asus\Desktop\javaweb\day06\apache-tomcat-7.0.53\webapps\day07-7\db3.properties
  22. // System.out.println(path);
  23. //创建对象
  24. Properties p = new Properties();
  25. //得到要操作文件的输入流
  26. InputStream in = new FileInputStream(path);
  27. //把流放到对象里面
  28. p.load(in);
  29. //依次得到文件里面的内容
  30. String url = p.getProperty("url");
  31. String username = p.getProperty("username");
  32. String password = p.getProperty("password");
  33. System.out.println(url);
  34. System.out.println(username);
  35. System.out.println(password);
  36. }
  37. /**
  38. *
  39. */
  40. public void doPost(HttpServletRequest request, HttpServletResponse response)
  41. throws ServletException, IOException {
  42. doGet(request, response);
  43. }
  44. }

 

12、使用类加载器读取文件

12.0 读取的文件的位置是 classes里面的文件

12.1 得到类加载器

(1)首先得到Class

* 第一种方式:类名.class

* 第二种方式:对象.getClass()

* 第三种方式:Class.forName("包类路径")

(2)使用Class得到类加载器

 

12.2 代码

//得到类的Class

Class clazz = ServletDemo1.class;

//得到类加载器

ClassLoader loader = clazz.getClassLoader();

//得到要操作文件的输入流

//文件的路径,因为读取的classes里面的文件,直接写文件的名称

InputStream in = loader.getResourceAsStream("db1.properties");

  1. import java.io.IOException;
  2. import java.io.InputStream;
  3. import java.util.Properties;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.http.HttpServlet;
  6. import javax.servlet.http.HttpServletRequest;
  7. import javax.servlet.http.HttpServletResponse;
  8. public class ServletDemo_8_1 extends HttpServlet {
  9. /**
  10. * 使用类加载器读取文件
  11. */
  12. public void doGet(HttpServletRequest request, HttpServletResponse response)
  13. throws ServletException, IOException {
  14. //得到类的Class
  15. Class clazz = ServletDemo_8_1.class;
  16. //得到类加载器
  17. ClassLoader loader = clazz.getClassLoader();
  18. //得到要操作文件的输入流
  19. InputStream in = loader.getResourceAsStream("db1.properties");
  20. //使用Properties类读取文件的内容
  21. Properties p = new Properties();
  22. p.load(in);
  23. //依次得到文件里面内容
  24. String url = p.getProperty("url");
  25. String username = p.getProperty("username");
  26. String password = p.getProperty("password");
  27. System.out.println(url);
  28. System.out.println(username);
  29. System.out.println(password);
  30. }
  31. /**
  32. *
  33. */
  34. public void doPost(HttpServletRequest request, HttpServletResponse response)
  35. throws ServletException, IOException {
  36. doGet(request, response);
  37. }
  38. }

 

13、默认的servlet

13.1 比如在浏览器的地址栏随便输入一个地址,出现404,资源找不到,这个效果是由默认的servlet实现的

13.2 在tomcat的conf里面找到web.xml,有对默认servlet的配置

* 如果自己创建servlet,让这个servlet在启动时候创建,<load-on-startup>大于1的值</load-on-startup>

* 默认servlet的配置里面url-pattern是 /,当把自己创建的servlet的url-pattern写成/,这个servlet就会

称为一个默认的servlet

<servlet>

<servlet-name>default</servlet-name>

<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>

<init-param>

    <param-name>debug</param-name>

    <param-value>0</param-value>

</init-param>

<init-param>

    <param-name>listings</param-name>

    <param-value>false</param-value>

</init-param>

<load-on-startup>1</load-on-startup>

 </servlet>

 <servlet-mapping>

<servlet-name>default</servlet-name>

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

 </servlet-mapping>

 

 
  1. <servlet>
  2. <servlet-name>default</servlet-name>
  3. <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
  4. <init-param>
  5. <param-name>debug</param-name>
  6. <param-value>0</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name>listings</param-name>
  10. <param-value>false</param-value>
  11. </init-param>
  12. <load-on-startup>1</load-on-startup>
  13. </servlet>
 
  1. <!-- The mapping for the default servlet -->
  2. <servlet-mapping>
  3. <servlet-name>default</servlet-name>
  4. <url-pattern>/</url-pattern>
  5. </servlet-mapping>

 

 

 13.3 在默认的servlet的初始化参数里面有 listings,当把这个参数的值设置成true之后,

 当直接访问web项目中文件夹时候,会把文件夹里面的所有内容显示出来

 
  1. <servlet>
  2. <servlet-name>default</servlet-name>
  3. <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
  4. <init-param>
  5. <param-name>debug</param-name>
  6. <param-value>0</param-value>
  7. </init-param>
  8. <init-param>
  9. <param-name>listings</param-name>
  10. <param-value>true</param-value>
  11. </init-param>
  12. <load-on-startup>1</load-on-startup>
  13. </servlet>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值