JBuilder2005 Servlet开拓之自启动
当前位置:以往代写 > JAVA 教程 >JBuilder2005 Servlet开拓之自启动
2019-06-14

JBuilder2005 Servlet开拓之自启动

JBuilder2005 Servlet开拓之自启动

副标题#e#

Servlet和JSP的一个重大的区别等于Servlet可以通过Web.XML文件的设置让Servlet在Web容器启动时就自动启动Servlet。可以操作Servlet的这个特性稳定革的数据事先加载到Web应用处事器中以便缓存利用。

假设,我们系统的用户在系统陈设前就已经建设好,今后不常产生变革,那么我们可以在Web应用措施启动时就将其下载缓存到Web应用处事器内存中,假如用户产生变革可以手工挪用这个Servlet举办刷新。下面我们就通过Servlet领导建设这个UserCacheServlet,它在Web容器启动时自动下载并缓存系统所有用户Id和用户名:

1.启动建设Servlet领导,填写Servlet名字

通过File->New…->Web->双击Standard Servlet图标启动建设Servlet领导的第一步,如下图所示:

JBuilder2005 Servlet开辟之自启动

图 2填写Servlet名字

在Class name中填入Servlet的名字:UserCacheServlet,在Package中填入bookstore.servlet作为包名。按Next到下一步。

2.选择Servlet所要实现的要领。

我们在前面已经先容了Servlet通过差异的doXxx()要领的响应HTTP请求方法,你可以在领导的第2步选择需要界说哪些doXxx()要领。默认环境下doGet()要领被勾选,即通过HTTP GET请求方法会见Servlet。通过带参的URL会见Servlet时,Servlet就用doGet()要领响应这个请求。由于我们只是假设用户数据不常变换,并不是说永远稳定换,所以我们在Web容器初始化时,但愿通过UserCacheServlet自动加载用户数据到缓存中,当数据库表T_USER的用户数据产生变换时,我们可以手工挪用UserCacheServlet,让其刷新缓存中的用户数据。

Web容器启动时自动初始化UserCacheServlet,此时init()要领被挪用,我们可以通过init()要领加载用户数据,当用户通过URL请求刷新用户数据时,UserCacheServlet通过doGet()要领响应这个HTTP GET请求。也就是说,我们需要实现doGet()要领,所以我们接管领导的默认配置,如下图所示:

JBuilder2005 Servlet开辟之自启动

图 3 选择需要包围的Servlet响应要领

按Next跳过第3步到领导的第4步。


#p#副标题#e#

3.指定会见Servlet的路径

JBuilder2005 Servlet开辟之自启动

图 4 指定Servlet会见路径

·Name:usercacheservlet,Servlet在web.xml设置文件中所取的名字

·URL pattern:/usercacheservlet,会见这个Servlet的匹配路径。指定这个会见路径后,假设Web应用措施陈设在http://localhost:8080/webModule下,则通过http://localhost:8080/webModule/usercacheservlet会见servlet。

直接按Finish建设Servlet。

打开web.xml文件,你可以找到关于UserCacheServlet声明和会见的陈设描写信息:

·<servlet>节点:描写servlet的名字及类名。

·<servlet-mapping>节点:描写servlet会见匹配路径。

双击工程窗格资源树的webModule节点,JBuilder在内容窗格中打开用于编辑web.xml文件的Web模块DD编辑器(Web Module DD editor),此时布局窗格显示出web.xml文件的布局,如下图所示:

JBuilder2005 Servlet开辟之自启动

图 5 布局窗格的web.xml文件布局树

JBuilder2005 Servlet开辟之自启动 图标的节点暗示已经有设置内容,而未带 JBuilder2005 Servlet开辟之自启动图标的节点暗示临时还没有对应的设置内容。我们展开Servlets节点,定位到usercacheservlet并双击这个节点,DD编辑器调解界面临usercacheservlet这个Servlet举办设置,如下图所示:

JBuilder2005 Servlet开辟之自启动

图 6 DD编辑器

#p#副标题#e#

Servlet可以在Web容器启动时,自动初始化。假设有多个Servlet都需要自动初始化,则可以通过web.xml的<load-on-startup>配置启动的序次。我们在DD编辑器将Load on startup值设为2, 这样UserCacheServlet将在Web容器启动后,排在顺序2初始化。

一些系统所用的Servlet,由于是Web开始处事的基本必需在顺序1初化,所以我们开拓的Servlet最亏得顺序2或顺序3初始化。Servlet初始化时,init()要领被挪用。在举办这样的配置后web.xml将包括以下粗体所示的设置信息。

代码清单 1 web.xml有关UserCacheServlet的描写信息

1. <web-app>
2.  …
3.  <servlet>
4.   <servlet-name>usercacheservlet</servlet-name>
5.   <servlet-class>bookstore.servlet.UserCacheServlet</servlet-class>
6.   <load-on-startup>2</load-on-startup>
7.  </servlet>
8. <servlet-mapping>
9.  <servlet-name>usercacheservlet</servlet-name>
10.  <url-pattern>/usercacheservlet</url-pattern>
11. </servlet-mapping>
12. …
13. </web-app>

留意:

当删除UserCacheServlet后,Servlet在web.xml所对应的陈设描写信息并不会一起删除,你必需手工删除。

#p#分页标题#e#

在init()初始化要领中操作UserList.fillUser()要领从数据库中下载并缓存用户记录信息,在doGet()要领中也引用了UserList.fillUser(),用户通过URL会见UserCacheServlet时,doGet()要领被挪用,刷新缓存用户数据,并显示"刷新乐成"提示,其代码如下所示:

代码清单 2 UserCacheServlet.Java

1. package bookstore.servlet;
2.
3. import javax.servlet.*;
4. import javax.servlet.http.*;
5. import java.io.*;
6. import bookstore.UserList;
7.
8. public class UserCacheServlet
9. extends HttpServlet
10. {
11.  private static final String CONTENT_TYPE = "text/html; charset=GBK";
12.
13.  //Initialize global variables
14.  public void init()
15.  throws ServletException
16.  {
17.   UserList.fillUser();//Web容器启动后挪用
18.  }
19.
20.  //Process the HTTP Get request
21.  public void doGet(HttpServletRequest request, HttpServletResponse response)
22. throws ServletException, IOException
23. {
24.  UserList.fillUser();//刷新用户数据
25.  response.setContentType(CONTENT_TYPE);
26.  PrintWriter out = response.getWriter();
27.  out.println("<html>");
28.  out.println("<head><title>UserCacheServlet</title></head>");
29.  out.println("<body bgcolor=\"#ffffff\">");
30.  out.println("刷新乐成!");
31.  out.println("</body>");
32.  out.println("</html>");
33.  out.close();
34. }

#p#副标题#e#

虽然,我们要对《JBuilder 2005实战JSP开拓》专题中建设的UserList.java代码举办变动,界说fillUser()要领以供UserCacheServlet.java挪用,另外,还需要调解原getUserListHTML()要领,如下所示:

代码清单 3 调解后的UserList.java代码

2. package bookstore;
3.
4. import java.sql.*;
5. import java.util.*;
6.
7. public class UserList
8. {
9.  private static Map userMap;//用户ID和用户名的Map
10.  //将用户数据缓存到Map中
11.  public static void fillUser()
12.  {
13.   if (userMap == null)
14.   {
15.    userMap = new HashMap();
16.   } else
17.   {
18.    userMap.clear();
19.   }
20.   Connection conn = null;
21.   StringBuffer sBuf = new StringBuffer();
22.   try
23.   {
24.    conn = DBConnection.getConnection();
25.   PreparedStatement pStat = conn.prepareStatement(
26.     "select USER_ID,USER_NAME from T_USER");
27.   ResultSet rs = pStat.executeQuery();
28.   while (rs.next())
29.   {
30.    userMap.put(rs.getString(1), rs.getString(2));
31.   }
32.   } catch (SQLException ex)
33.   {
34.    ex.printStackTrace();
35.   } finally
36.   {
37.    try
38.    {
39.     if (conn != null)
40.     {
41.      conn.close();
42.      conn = null;
43.     }
44.    } catch (SQLException ex1)
45.    {
46.     ex1.printStackTrace();
47.    }
48.   }
49.  }
50.
51.  //获取HTML下拉框的用户列表代码
52.  public static String getUserListHTML()
53.  {
54.   StringBuffer sBuf = new StringBuffer();
55.   Set set = userMap.keySet();
56.   Iterator iter = set.iterator();
57.   while (iter.hasNext())
58.   {
59.    Object item = (Object) iter.next();
60.    sBuf.append("<option value=’" + item + "’>" +
61.    userMap.get(item) + "</option>\n");
62.   }
63.   return sBuf.toString();
64.  }
65. }

首先,我们在第9行界说了一个静态的userMap工具用以缓存用户信息,这个Map以userId为键生存UserName的值。第11~49行的静态fillUser()要领从数据库中获取用户的信息填充到userMap中。当用户会见login.jsp生成用户下拉框时,用户数据直接从userMap缓存中读取,而不再从数据库中读取,你可以从第54~56行的代码中看到这种获取用户数据方法的改变。当添加或删除用户时,可以通过http://localhost:8080/webModule/usercacheservlet刷新缓存数据。

    关键字:

在线提交作业