找回密码
 注册
搜索

:::Eclipse中struts+spring+Hibernate框架的搭建:::

 楼主| 郎心勾妃 2008-8-14 12:34 显示全部楼层 来自: LAN
      throw re;  
       }finally{
           session.close(); 字串6
       } 字串4
    }
}  
以上代码的作用是将User对象写入数据库,因为和本教程联系不大,所以就不介绍了,读者可以参考教材上hibernate的相关章节。
字串7
字串5
修改上一篇中com.wish.struts.action中的WelcomeAction.java类,代码如下:
package com.wish.struts.action;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;  
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward; 字串9
import org.apache.struts.action.ActionMapping;
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:35 显示全部楼层 来自: LAN
mport com.wish.hibernate.dao.User;
import com.wish.hibernate.dao.UserDAO;  
import com.wish.struts.form.UserForm;
publicclass WelcomeAction extends Action {
   
    public ActionForward execute(ActionMapping mapping,
           ActionForm form,
           HttpServletRequest reuqest,
           HttpServletResponse response) throws Exception {
       //TODO Auto-generated method stub
       UserForm userForm=(UserForm)form; 字串2
      
       UserDAO userDAO=new UserDAO();
       User user=new User();
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:36 显示全部楼层 来自: LAN
user.setUsername(userForm.getUsername());  
       userDAO.saveInstance(user);

       reuqest.setAttribute("username", userForm.getUsername());  
       return mapping.findForward("welcome");   
    }
}
以上代码粗体字部分为修改部分

7.    最后还要对hibernate.cfg.xml文件进行一下修改,在配置文件中加入一下粗体字部分
<hibernate-configuration>  
    <session-factory>
        <property      name="hibernate.connection.driver_class">
           com.mysql.jdbc.Driver
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:37 显示全部楼层 来自: LAN
</property>
        <property name="hibernate.connection.password">
           Admin  
       </property>  
        <property name="hibernate.connection.url">
           jdbc:mysql://localhost:3306/momoko
       </property>
        <property name="hibernate.connection.username">
           Root
       </property>
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:38 显示全部楼层 来自: LAN
<property name="hibernate.dialect">  
           org.hibernate.dialect.MySQLDialect  
       </property>
        <mapping resource="com/wish/hibernate/dao/User.hbm.xml"/>
    </session-factory>  
</hibernate-configuration>
这里是将生成的User.hbm.xml添加到hibernate配置文件中去,可能hibernate tools这个插件可以想MyEclipse一样自动做到这一步,但是笔者在使用过程中没有找到这一功能,请读者自己尝试。
8.    运行tomcat服务器,在浏览器内输入
:8088/firstStruts/index.jsp
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:39 显示全部楼层 来自: LAN
,在文本框中键入momoko,点击ok  
  
跳转至hello.jsp,如下  
打开mySQL中的User表,发现数据已经被插入数据库中。
  
至此Hibernate toolsDemo演示完毕。读者可以结合上2篇的教程,利用这些插件自行完成一套以Tomcat为服务器,Struts+hibernate架构的web程序。
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:45 显示全部楼层 来自: LAN
struts2 的struts.properties配置详解
Struts2框架有两个核心配置文件,其中struts.xml文件主要负责管理应用中的Action映射,以及该Action包含的Result定义等。除此之外,Struts 2框架还包含一个struts.properties文件,该文件定义了Struts2框架的大量属性,开发者可以通过改变这些属性来满足应用的需求。
struts.properties文件是一个标准的Properties文件,该文件包含了系列的key-value对象,每个key就是一个Struts 2属性,该key对应的value就是一个Struts 2属性值。  
struts.properties文件通常放在Web应用的WEB-INF/classes路径下。实际上,只要将该文件放在Web应用的CLASSPATH路径下,Struts 2框架就可以加载该文件。  
现在的问题是,struts.properties文件的哪些key是有效的?即struts.properties文件里包含哪些属性是有效的Struts 2属性。下面列出了可以在struts.properties中定义的Struts 2属性。  
—  struts.configuration:该属性指定加载Struts2配置文件的配置文件管理器。该属性的默认值是org.apache.Struts2.config.DefaultConfiguration,这是Struts2默认的配置文件管理器。如果需要实现自己的配置管理器,开发者则可以实现一个实现Configuration接口的类,该类可以自己加载Struts2配置文件。  
—  struts.locale:指定Web应用的默认Locale。  
—  struts.i18n.encoding:指定Web应用的默认编码集。该属性对于处理中文请求参数非常有用,对于获取中文请求参数值,应该将该属性值设置为GBK或者GB2312。  
  提示  当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法。
字串5

—  struts.objectFactory:指定Struts 2默认的ObjectFactory Bean,该属性默认值是spring。  
—  struts.objectFactory.spring.autoWire:指定Spring框架的自动装配模式,该属性的默认值是name,即默认根据Bean的name属性自动装配。  
—  struts.objectFactory.spring.useClassCache:该属性指定整合Spring框架时,是否缓存Bean实例,该属性只允许使用true和false两个属性值,它的默认值是true。通常不建议修改该属性值。  
—  struts.objectTypeDeterminer:该属性指定Struts 2的类型检测机制,通常支持tiger和notiger两个属性值。  
— struts.multipart.parser:该属性指定处理multipart/form-data的MIME类型(文件上传)请求的框架,该属性支持cos、pell和jakarta等属性值,即分别对应使用cos的文件上传框架、pell上传及common-fileupload文件上传框架。该属性的默认值为jakarta。
注意  如果需要使用cos或者pell的文件上传方式,则应该将对应的JAR文件复制到Web应用中。例如,使用cos上传方式,则需要自己下载cos框架的JAR文件,并将该文件放在WEB-INF/lib路径下。

—  struts.multipart.saveDir:该属性指定上传文件的临时保存路径,该属性的默认值是javax.servlet.context.tempdir。  
—  struts.multipart.maxSize:该属性指定Struts 2文件上传中整个请求内容允许的最大字节数。
   
—  struts.custom.properties:该属性指定Struts2应用加载用户自定义的属性文件,该自定义属性文件指定的属性不会覆盖struts.properties文件中指定的属性。如果需要加载多个自定义属性文件,多个自定义属性文件的文件名以英文逗号(,)隔开。
— struts.mapper.class:指定将HTTP请求映射到指定Action的映射器,Struts2提供了默认的映射器:org.apache.struts2.dispatcher.mapper.DefaultActionMapper。默认映射器根据请求的前缀与Action的name属性完成映射。

—  struts.action.extension:该属性指定需要Struts2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts2处理。如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。
—  struts.serve.static:该属性设置是否通过JAR文件提供静态内容服务,该属性只支持true和false属性值,该属性的默认属性值是true。  
—  struts.serve.static.browserCache:该属性设置浏览器是否缓存静态内容。当应用处于开发阶段时,我们希望每次请求都获得服务器的最新响应,则可设置该属性为false。

—  struts.enable.DynamicMethodInvocation:该属性设置Struts 2是否支持动态方法调用,该属性的默认值是true。如果需要关闭动态方法调用,则可设置该属性为false。


[ 本帖最后由 郎心勾妃 于 2008-8-14 12:47 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:46 显示全部楼层 来自: LAN
—  struts.enable.SlashesInActionNames:该属性设置Struts 2是否允许在Action名中使用斜线,该属性的默认值是false。如果开发者希望允许在Action名中使用斜线,则可设置该属性为true。
—  struts.tag.altSyntax:该属性指定是否允许在Struts 2标签中使用表达式语法,因为通常都需要在标签中使用表达式语法,故此属性应该设置为true,该属性的默认值是true。  


—  struts.devMode:该属性设置Struts2应用是否使用开发模式。如果设置该属性为true,则可以在应用出错时显示更多、更友好的出错提示。该属性只接受true和flase两个值,该属性的默认值是false。通常,应用在开发阶段,将该属性设置为true,当进入产品发布阶段后,则该属性设置为false。


—  struts.i18n.reload:该属性设置是否每次HTTP请求到达时,系统都重新加载资源文件。该属性默认值是false。在开发阶段将该属性设置为true会更有利于开发,但在产品发布阶段应将该属性设置为false。
提示  开发阶段将该属性设置了true,将可以在每次请求时都重新加载国际化资源文件,从而可以让开发者看到实时开发效果;产品发布阶段应该将该属性设置为false,是为了提供响应性能,每次请求都需要重新加载资源文件会大大降低应用的性能。

—  struts.ui.theme:该属性指定视图标签默认的视图主题,该属性的默认值是xhtml。
—  struts.ui.templateDir:该属性指定视图主题所需要模板文件的位置,该属性的默认值是template,即默认加载template路径下的模板文件。  


—  struts.ui.templateSuffix:该属性指定模板文件的后缀,该属性的默认属性值是ftl。该属性还允许使用ftl、vm或jsp,分别对应FreeMarker、Velocity和JSP模板。  


—  struts.configuration.xml.reload:该属性设置当struts.xml文件改变后,系统是否自动重新加载该文件。该属性的默认值是false。  


—  struts.velocity.configfile:该属性指定Velocity框架所需的velocity.properties文件的位置。该属性的默认值为velocity.properties。
—  struts.velocity.contexts:该属性指定Velocity框架的Context位置,如果该框架有多个Context,则多个Context之间以英文逗号(,)隔开。  


—  struts.velocity.toolboxlocation:该属性指定Velocity框架的toolbox的位置。  


—  struts.url.http.port:该属性指定Web应用所在的监听端口。该属性通常没有太大的用户,只是当Struts 2需要生成URL时(例如Url标签),该属性才提供Web应用的默认端口。
—  struts.url.https.port:该属性类似于struts.url.http.port属性的作用,区别是该属性指定的是Web应用的加密服务端口。  字串1
—  struts.url.includeParams:该属性指定Struts 2生成URL时是否包含请求参数。该属性接受none、get和all三个属性值,分别对应于不包含、仅包含GET类型请求参数和包含全部请求参数。
—  struts.custom.i18n.resources:该属性指定Struts 2应用所需要的国际化资源文件,如果有多份国际化资源文件,则多个资源文件的文件名以英文逗号(,)隔开。  


—  struts.dispatcher.parametersWorkaround:对于某些JavaEE服务器,不支持HttpServletRequest调用getParameterMap()方法,此时可以设置该属性值为true来解决该问题。该属性的默认值是false。对于WebLogic、Orion和OC4J服务器,通常应该设置该属性为true。


—  struts.freemarker.manager.classname:该属性指定Struts2使用的FreeMarker管理器。该属性的默认值是org.apache.struts2.views.freemarker.FreemarkerManager,这是Struts2内建的FreeMarker管理器。


—  struts.freemarker.wrapper.altMap:该属性只支持true和false两个属性值,默认值是true。通常无需修改该属性值。  字串5
—  struts.xslt.nocache:该属性指定XSLT Result是否使用样式表缓存。当应用处于开发阶段时,该属性通常被设置为true;当应用处于产品使用阶段时,该属性通常被设置为false。  


—  struts.configuration.files:该属性指定Struts2框架默认加载的配置文件,如果需要指定默认加载多个配置文件,则多个配置文件的文件名之间以英文逗号(,)隔开。该属性的默认值为struts-default.xml,struts-plugin.xml,struts.xml,看到该属性值,读者应该明白为什么Struts2框架默认加载struts.xml文件了。
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:49 显示全部楼层 来自: LAN
struts的一些异常和错误下面列出了一些Struts的常见错误和异常,并给出了一些可能发生此类错误或异常的原因。有的后面有相关连接,你可以通过它找到更多的信息。

Cannot retrieve mapping for action
javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的action名字)


可能原因
action没有再struts-config.xml 中定义,或没有找到匹配的action,例如在JSP文件中使用 <html:form action="Login.do".将表单提交给Login.do处理,如果出现上述异常,请查看struts-config.xml中的定义部分,有时可能是打错了字符或者是某些不符合规则,可以使用struts console工具来检查。

org.apache.jasper.JasperException: Cannot retrieve definition for form bean null

可能原因      
        
这个异常是因为Struts根据struts-config.xml中的mapping没有找到action期望的form bean。大部分的情况可能是因为在form-bean中设置的name属性和action中设置的name属性不匹配所致。换句话说,action和form都应该各自有一个name属性,并且要精确匹配,包括大小写。这个错误当没有name属性和action关联时也会发生,如果没有在action中指定name属性,那么就没有name属性和action相关联。当然当action制作某些控制时,譬如根据参数值跳转到相应的jsp页面,而不是处理表单数据,这是就不用name属性,这也是action的使用方法之一。   


No action instance for path /xxxx could be created

可能原因
特别提示:因为有很多中情况会导致这个错误的发生,所以推荐大家调高你的web服务器的日志/调试级别,这样可以从更多的信息中看到潜在的、在试图创建action类时发生的错误,这个action类你已经在struts-config.xml中设置了关联(即添加了<action>标签)。

在struts-config.xml中通过action标签的class属性指定的action类不能被找到有很多种原因,例如:

定位编译后的.class文件失败。Failure to place compiled .class file for the action in the classpath (在web开发中,class的的位置在r WEB-INF/classes,所以你的action class必须要在这个目录下。例如你的action类位于WEB-INF/classes/action/Login.class,那么在struts-config.xml中设置action的属性type时就是action.Login).
拼写错误,这个也时有发生,并且不易找到,特别注意第一个字母的大小写和包的名称。   

在struts-config.xml中指定的action类没有继承自Stuts的Action类,或者你自定义的Action类没有继承自Struts提供的Action类。

javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN

可能原因
没有位form bean中的某个变量定义getter 方法

这个错误主要发生在表单提交的FormBean中,用struts标记<html:text property=”username”>时,在FormBean中必须有一个getUsername()方法。注意字母“U”。

java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm

可能原因
这个错误主要发生在在classpath中找不到相应的Java .class文件。如果这个错误发生在web应用程序的运行时,主要是因为指定的class文件不在web server的classpath中(/WEB-INF/classes 和 /WEB-INF/lib)。   

在上面的错误中,原因是找不到ActionForm类。

Exception
javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection

可能原因
不是标识Struts actionServlet的<servlet>标记就是映射.do扩展名的<sevlet-mapping>标记或者两者都没有在web.xml中声明。

在struts-config.xml中的打字或者拼写错误也可导致这个异常的发生。例如缺少一个标记的关闭符号/>。最好使用struts console工具检查一下。

另外,load-on-startup必须在web.xml中声明,这要么是一个空标记,要么指定一个数值,这个数值用来表servlet运行的优先级,数值越大优先级越低。

还有一个和使用load-on-startup有关的是使用Struts预编译JSP文件时也可能导致这个异常。

java.lang.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223)   

可能原因
在struts-config.xml中的forward元素缺少path属性。例如应该是如下形式:
<forward name="userhome" path="/user/userhome.jsp"/>

javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope

Probable Causes
试图在Struts的form标记外使用form的子元素。这常常发生在你在</html:form>后面使用Struts的html标记。
回复 支持 反对

使用道具 举报

 楼主| 郎心勾妃 2008-8-14 12:50 显示全部楼层 来自: LAN
另外要注意可能你不经意使用的无主体的标记,如<html:form … />,这样web 服务器解析时就当作一个无主体的标记,随后使用的所有<html>标记都被认为是在这个标记之外的,如又使用了<html:text property=”id”>

还有就是在使用taglib引入HTML标记库时,你使用的prefix的值不是html。

javax.servlet.jsp.JspException: Missing message for key xx.xx.xx

Probable Causes
这个key的值对没有在资源文件ApplicationResources.properties中定义。如果你使用eclipse时经常碰到这样的情况,当项目重新编译时,eclipse会自动将classes目录下的资源文件删除。

资源文件ApplicationResources.properties 不在classpath中 应将资源文件放到 WEB-INF/classes 目录下,当然要在struts-config.xml中定义)

Cannot find message resources under key org.apache.struts.action.MESSAGE   

可能原因
很显然,这个错误是发生在使用资源文件时,而Struts没有找到资源文件。

Implicitly trying to use message resources that are not available (such as using empty html:options tag instead of specifying the options in its body -- this assumes options are specified in ApplicationResources.properties file)

XML parser issues -- too many, too few, incorrect/incompatible versions

Strange and seemingly random characters in HTML and on screen, but not in original JSP or servlet.

可能原因
混和使用Struts的html:form标记和标准的HTML标记不正确。

使用的编码样式在本页中不支持。   

"Document contained no data" in Netscape
No data rendered (completely empty) page in Microsoft Internet Explorer


可能原因
使用一个Action的派生类而没有实现perform()方法或execute()方法。在Struts1.0中实现的是perform()方法,在Struts1.1中实现的是execute()方法,但Struts1.1向后兼容perform()方法。

但你使用Struts1.1创建一个Action的派生类,并且实现了execute()方法,而你在Struts1.0中运行的话,就会得到"Document contained no data" error message in Netscape or a completely empty (no HTML whatsoever) page rendered in Microsoft Internet Explorer.”的错误信息。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

  • 0 关注
  • 3 粉丝
  • 10 帖子
 

天健社区APP