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)
给出一个简单示例:用户登录


- 新建Web project...
- 添加Spring能力
- 修改web.xml,添加listener和context-param节点
org.springframework.web.context.ContextLoaderListener
contextConfigLocation
/WEB-INF/classes/applicationContext.xml
- 设计数据库,建立数据源
- 添加Hibernate能力
- 切至数据库透视,生成Hibernate配置文件
- 重构所有DAO类到DAO包
- 修改applicationContext.xml,添加相应的DAO bean
- 创建Form,Action和JSP
- 修改Action配置,class改为Spring的代理
- 修改Action类,添加服务Service作为属性
- 创建服务接口IService和相应的实现ServiceImpl类
- 修改applicationContext.xml,添加服务Service bean
- 修改applicationContext.xml,添加Action bean
- 在src目录下添加log4j.xml或log4j.properties,添加ehcache.xml
- 修改工程部署属性,设置成仅仅部署用户库
- 部署应用程序,启动Tomcat服务器
- 测试
- 小结
订阅:
博文 (Atom)