正在阅读:运用Jakarta Struts的七大实战心法运用Jakarta Struts的七大实战心法

2005-07-19 10:03 出处: 作者:Chuck Cavaness 责任编辑:moningfeng

创建独立的Struts配置文件

  每个Struts应用模块必须拥有自己的配置文件。允许创建自己的独立于其他模块的Action,ActionForm,异常处理甚至更多。

  继续以上面的商店应用程序为例,我们可以创建以下的配置文件:一个文件名为struts-config-catalog.xml,包含catalog(商品目录)、items(商品清单)、和其它与库存相关的功能的配置信息;另一个文件名为struts- config-order.xml, 包含对order(订单)和order tracking(订单跟踪)的设置。第三个配置文件是struts-config.xml,其中含有属于缺省的应用模块中的一般性的功能。

配置Web部署描述符

  在Struts的早期版本中,我们在Web.xml中指定Struts配置文件的路径。好在这点没变,有助于向后兼容。但对于多个应用模块,我们需要在Web部署描述符中增加新的配置文件的设定。

  对于缺省的应用(包括Struts的早期版本),Struts framework 在Web.xml文件中查找带有config的元素<init-param>,用于载入Action mapping 和其它的应用程序设定。作为例子,以下的XML片断展现一个典型的<init-param>元素:

<init-param>
   <param-name>config>/param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>

  注:如果在现有的<init-param>元素中找不到"config"关键字,Struts framework将缺省地使用/WEB/struts-config.xml

  为了支持多个应用模块(Struts 1.1的新特性),必须增加附加的<init-param>元素。与缺省的<init-param>元素不同的是,附加的<init-param>元素与每个应用模块对应,必须以config/xxx的形式命名,其中字符串xxx代表该模块唯一的名字。例如,在商店应用程序的例子中,<init-param>元素可定义如下(注意粗体字部分):

<init-param>
   <param-name>config</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
   <param-name>config/catalog</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
   <param-name>config/order</param-name>
   <param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>

  第一个 <init-param>元素对应缺省的应用模块。第二和第三个元素分别代表非缺省应用模块catalog 和 order。

  当Struts载入应用程序时,它首先载入缺省应用模块的配置文件。然后查找带有字符串config/xxx 形式的附加的初始化参数。对每个附加的配置文件也进行解析并载入内存。这一步完成后,用户就可以很随意地用config/后面的字符串也就是名字来调用相应的应用模块。

多个应用模块之间调用Action类

  在为每个应用模块创建独立的配置文件之后,我们就有可能需要调用不同的模块中Action。为此必须使用Struts框架提供的SwitchAction类。Struts 会自动将应用模块的名字添加到URL,就如Struts 自动添加应用程序的名字加到URL一样。应用模块是对框架的一个新的扩充,有助于进行并行的团队开发。如果你的团队很小那就没必要用到这个特性,不必进行模块化。当然,就算是只有一个模块,系统还是一样的运作。

4. 把JSP放到WEB-INF后以保护JSP源代码

  为了更好地保护你的JSP避免未经授权的访问和窥视, 一个好办法是将页面文件存放在Web应用的WEB-INF目录下。

  通常JSP开发人员会把他们的页面文件存放在Web应用相应的子目录下。一个典型的商店应用程序的目录结构如图2所示。跟catalog (商品目录)相关的JSP被保存在catalog子目录下。跟customer相关的JSP,跟订单相关的JSP等都按照这种方法存放。

图 2.基于不同的功能 JSP 被放置在不同的目录下



  这种方法的问题是这些页面文件容易被偷看到源代码,或被直接调用。某些场合下这可能不是个大问题,可是在特定情形中却可能构成安全隐患。用户可以绕过Struts的controller直接调用JSP同样也是个问题。

  为了减少风险,可以把这些页面文件移到WEB-INF 目录下。基于Servlet的声明,WEB-INF不作为Web应用的公共文档树的一部分。因此,WEB-INF 目录下的资源不是为客户直接服务的。我们仍然可以使用WEB-INF目录下的JSP页面来提供视图给客户,客户却不能直接请求访问JSP。

键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品