显示标签为“Struts”的博文。显示所有博文
显示标签为“Struts”的博文。显示所有博文

2009年4月13日星期一

有关Struts中Tiles使用的问题

1.出现空引用
Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:524)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:435)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:40)


root cause

java.lang.NullPointerException
org.apache.struts.taglib.tiles.InsertTag.processName(InsertTag.java:527)
org.apache.struts.taglib.tiles.InsertTag.createTagHandler(InsertTag.java:482)
org.apache.struts.taglib.tiles.InsertTag.doStartTag(InsertTag.java:438)
org.apache.jsp.index_jsp._jspx_meth_tiles_005finsert_005f0(index_jsp.java:119)
org.apache.jsp.index_jsp._jspService(index_jsp.java:86)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
com.filter.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:40)

其问题主要由于使用不当造成的!!!

通常Struts配置文件为
<plug-in classname="org.apache.struts.tiles.TilesPlugin">
<set-property property="definitions-config" value="/WEB-INF/tiles-def.xml">
<set-property property="moduleAware" value="true">
</set-property>
</plug-in>
则相应的tiles-def.xml定义为


<tiles-definitions>

<definition name="main.Layout" path="/layout.jsp">
<put name="header" type="page" value="/header.jsp">
</put>

</definition>
</tiles-definitions></set-property>
重点来了,其中path给出的layout.jsp为模板文件,而不是你直接访问的页面,其内容如下:
<html>
<head>

<title>My JSP 'layout.jsp' starting page</title>

</head>
<body>
<tiles:insert attribute="header"/>
</body>
</html>
因此,需要在实际被用户访问的页面里使用
<tiles:insert definition="main.Layout" />
才不会出错;而不是直接访问模板文件。切记!!!

2. 另外请注意Tiles插件的类名是TilesPlugin而不是TilesPlugIn,与Validator不同。

2009年2月27日星期五

基于MyEclipse 6.0实现SSH整合:Struts(1.2)+Spring(2.0)+Hibernate(3.0)

给出一个简单示例:用户登录
  1. 新建Web project...
  1. 添加Struts能力
  1. 添加Spring能力
  2. 修改web.xml,添加listener和context-param节点

  3. org.springframework.web.context.ContextLoaderListener


    contextConfigLocation
    /WEB-INF/classes/applicationContext.xml


  4. 设计数据库,建立数据源
  5. 添加Hibernate能力

  6. 切至数据库透视,生成Hibernate配置文件
  7. 重构所有DAO类到DAO包
  8. 修改applicationContext.xml,添加相应的DAO bean
  9. 创建Form,Action和JSP
  10. 修改Action配置,class改为Spring的代理
  11. 修改Action类,添加服务Service作为属性
  12. 创建服务接口IService和相应的实现ServiceImpl类
  13. 修改applicationContext.xml,添加服务Service bean
  14. 修改applicationContext.xml,添加Action bean
  15. 在src目录下添加log4j.xml或log4j.properties,添加ehcache.xml
  16. 修改工程部署属性,设置成仅仅部署用户库
  17. 部署应用程序,启动Tomcat服务器
  18. 测试
  19. 小结