初始化参数和上下文初始化参数训练

(下述步骤根据本机球境作适当修改)

 

1.实训目标

      创建一个Servlet,读取初始化参数和上下文初始化参数,并将这些参数显示在网页上。掌握Servlet读取参数的编程要点和配置步骤。

2.实训场景

Servlet初始化参数与上下文初始化参数的获取_xml

3.概念及定义

      Servlet初始化参数与上下文初始化参数

  • Servlet初始化参数:

1.     Servlet初始化参数定义在web.xml中的一个servlet元素中,例如:



1. <servlet>
2. <servlet-name>test</servlet-name>
3. <servlet-class>com.bk.Test</servlet-class>
4. <init-param>
5. <param-name>default-time</param-name>
6. <param-value>60</param-value>
7. </init-param>
8. </servlet>

可以有若干个<init-param>对。


2.  怎样取得Servlet初始化参数

可以在Servlet中直接调用getInitParameterr(java.lang.Stringname)方法来读取初始化参数。也可以通过ServletConfig接口的getInitParameter(java.lang.Stringname)方法。getServletConfig()该方法定义在Servlet接口中,返回ServletConfig接口的引用。

所有的servlet都继承了该方法。当容器实例化一个servlet之前,会从web.xml中读取这个servlet的初始化参数,并把这些参数交给ServletConfig然后在调用init()方法时,容器会传送这个ServletConfig的引用到servlet每个servlet都会有一个唯一的ServletConfig引用。一旦有了ServletConfig的引用就可以调用getInitParameter()方法来取得我们在servlet中设置的初始化参数。

 

  • 上下文初始化参数:

上下文初始化参数与Servlet初始化参数类似,区别是上下文初始化参数对整个web应用而不是Servlet初始化参数只对应一个servlet

在web应用的整个生命周期中上下文初始化参数都存在,任意的servlet和jsp都可以随时随地的访问它。

1.     在web.xml中的配置例子如下:


1. <context-param>
2. <param-name>default-time</param-name>
3. <param-value>60</param-value>
4. </context-param>



上下文初始化参数对应于整个web应用,因此它不在某个servlet元素内。一个web应用有一个ServletContext,而一个servlet有一个ServletConfig

2.     怎样取得上下文初始化参数?

servlet的ServletConfig对象拥有该servlet的ServletContext的一个引用,所以可这样取得上下文初始化参数:getServletConfig().getServletContext().getInitParameter()

也可以在servlet中直接调用getServletContext().getInitParameter(),两者是等价的。

 

4.场景实现演示

4.1配置Tomcat5.5站点

  • 创建Web应用程序servletest

4.2Servlet读取参数研究

  • InitParamServlet.java完整代码如下:


1. packagejsplession;
2.
3. importjavax.servlet.ServletConfig;
4. importjavax.servlet.ServletContext;
5. importjavax.servlet.ServletException;
6. importjavax.servlet.http.HttpServlet;
7. importjavax.servlet.http.HttpServletRequest;
8. importjavax.servlet.http.HttpServletResponse;
9.
10. import java.io.PrintWriter;
11. importjava.io.IOException;
12.
13. publicclass InitParamServlet extends HttpServlet
14. {
15. public void doGet(HttpServletRequest req,HttpServletResponse res)
16. throws IOException,ServletException
17. {
18.
19. "text/plain;charset=GBK");
20. PrintWriter out = res.getWriter();
21.
22. "URL");
23.
24. ServletConfig config = getServletConfig();
25. ServletContext context =getServletContext();
26. "UID");
27. "PWD");
28. "some-port");
29.
30. "初始化参数和上下文初始化参数如下:");
31. "URL: " + url);
32. "UID: " + uid);
33. "PWD: " + pwd);
34. "some-port: " +port);
35. }
36. }


1.   创建public class InitParamServletextends HttpServlet

2.   重写public void doGet(HttpServletRequest req, HttpServletResponse res)

·        设置响应(response)内容类型,即res.setContentType("text/plain;charset=GBK")

·        获得response的输出流,即PrintWriter out = res.getWriter()

·        获得初始化参数URL,即String url =getInitParameter("URL")

·        获得ServletConfig的引用,即ServletConfig config = getServletConfig()

·        获得ServletContext的引用,即ServletContext context = getServletContext()

·        通过ServletConfig引用获得初始化参数:String uid = config.getInitParameter("UID"); String pwd =config.getInitParameter("PWD")

·        通过ServletContext引用获得上下文初始化参数:String port = context.getInitParameter("some-port")

3.    输出各个参数,如out.println("URL: " + url)

  • 修改web.xml,配置Servlet、初始化参数和上下文初始化参数,web.xml文件内容如下:

1. <?xmlversionxmlversion="1.0" encoding="UTF-8"?>
2. <web-appidweb-appid="WebApp_ID" version="2.4"
3. xmlns="http://java.sun.com/xml/ns/j2ee"
4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
5. xsi:schemaLocation="http://java.sun.com/xml/ns/j2eehttp://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
6. <display-name>servletest</display-name>
7. <context-param>
8. <param-name>some-port</param-name>
9. <param-value>5000</param-value>
10. </context-param>
11. <servlet>
12. <servlet-name>init</servlet-name>
13. <servlet-class>jsplession.InitParamServlet</servlet-class>
14. <init-param>
15. <param-name>URL</param-name>
16. <param-value>jdbc:​​mysql​​://localhost/pizza</param-value>
17. </init-param>
18. <init-param>
19. <param-name>UID</param-name>
20. <param-value>matt</param-value>
21. </init-param>
22. <init-param>
23. <param-name>PWD</param-name>
24. <param-value>secret</param-value>
25. </init-param>
26. </servlet>
27. <servlet-mapping>
28. <servlet-name>init</servlet-name>
29. <url-pattern>/init</url-pattern>
30. </servlet-mapping>
31. <welcome-file-list>
32. <welcome-file>index.jsp</welcome-file>
33. </welcome-file-list>
34. </web-app>



4.3部署运行

  • 部署文件编译InitParamServlet.java,把class文件放到WEB-INF\classes\jsplession目录下
  • 启动Tomcat
  • 在IE浏览器的地址栏中输入http://localhost:8080/servletest/init

实训 2.    Servlet数据库练习示例

(数据库与数据表根据本机配置环境作适当修改)

1. packagecom.jsp.Database;
2. importjava.sql.*;
3. importjavax.sql.*;
4. importjava.io.*;
5. importjavax.servlet.*;
6. importjavax.servlet.http.*;
7. importcom.microsoft.jdbc.sqlserver.SQLServerDriver;
8. publicclass JDBCServlet extends HttpServlet
9. {
10. /* 连接数据库属性*/
11. Stringdriver;
12. Stringpassword,url,user;
13. /*处理doGet */
14.
15. publicvoid doGet(HttpServletRequest request,HttpServletResponse response)
16. throwsIOException,ServletException
17. {
18. "text/html;charset=gb2312");
19. PrintWriter out=response.getWriter();
20. try
21. {
22. Connection con=getConnection();
23. Statement stmt=con.createStatement();
24. "select * from user_info");
25. while(rst.next())
26. {
27. "userid"));
28. "<br>");
29.
30. }
31. rst.close();
32. stmt.close();
33. con.close();
34.
35. }
36. catch(SQLException e)
37. {
38. e.printStackTrace();
39. }
40. }
41. /*处理doPost请求*/
42. public void doPost(HttpServletRequestrequest,HttpServletResponse response)
43. throws IOException,ServletException
44. {
45. doGet(request,response);
46. }
47.
48. throws ServletException
49. {
50. driver=getInitParameter("DRIVER");
51. password=getInitParameter("PASSWORD");
52. url=getInitParameter("URL");
53. user=getInitParameter("USER");
54. }
55. privateConnection getConnection()
56. {
57. null;
58. try
59. {
60. Class.forName(driver);
61. con=DriverManager.getConnection(url,user,password);
62. }
63. catch(Exception e )
64. {
65. e.printStackTrace();
66. }
67.
68. return con;
69. }
70. }

========web.xml文件配置========


1. <servlet>
2. <servlet-name>JDBCServlet</servlet-name>
3. <servlet-class>com.jsp.Database.JDBCServlet</servlet-class>
4. <init-param>
5. <param-name>DRIVER</param-name>
6. <param-value>com.microsoft.jdbc.sqlserver.SQLServerDriver</param-value>
7. </init-param>
8.
9. <init-param>
10. <param-name>URL</param-name>
11. <param-value>jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=jspdev</param-value>
12. </init-param>
13.
14. <init-param>
15. <param-name>USER</param-name>
16. <param-value>sa</param-value>
17. </init-param>
18. <init-param>
19.
20. <param-name>PASSWORD</param-name>
21. <param-value></param-value>
22. </init-param>
23. </servlet>
24.
25.
26. <servlet-mapping>
27. <servlet-name>JDBCServlet</servlet-name>
28. <url-pattern>/init_servlet</url-pattern>
29. </servlet-mapping>

WEB.XML在你的tomcat/webapp/你的目录/WEB-INF/下..

或者复制tomcat/webapp/ROOT/WEB-INF/下的,,做一下修改就行了.