Struts2+Hibernate整合应用开发步骤

下面就简单学习下Struts2+Hibernate的整合。

其实就七个步骤:

第一步:添加所需的jar包。

第二步:创建实体类以及对应的映射文件。

第三步:配置hibernate.cfg.xml配置文件。

第四步:配置struts.xml配置文件。

第五步:创建相应的action。

第六步:在web.xml中配置启动Struts2框架的过滤器。

第七步:编写JSP显示页面。

---------------------------------------------------------------------------------------------------------------------------

具体细节及代码如下(代码仅供参考):

第一步:jar包的添加这里不多说。

第二步:

实体类Message.java

  1. /** 
  2.  *  ClassName: Message.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.domain;  
  9.   
  10. import java.io.Serializable;  
  11. import java.util.Date;  
  12.   
  13. /** 
  14.  * 留言实体类 
  15.  *  
  16.  * @author yjd 
  17.  */  
  18. public class Message implements Serializable {  
  19.   
  20.     private static final long serialVersionUID = 6617253915349620625L;  
  21.     private Integer id; // OID   
  22.     private String nickname; // 昵称   
  23.     private boolean gender; // 性别   
  24.     private String header_img; // 头像   
  25.     private String qq; // qq   
  26.     private String email; // 邮箱号   
  27.     private String content; // 留言内容   
  28.     private String ip; // 发布者的IP地址   
  29.     private Date pubTime; // 留言时间   
  30.     private String reply;// 管理员回复内容   
  31.     private Date replyTime; // 回复时间   
  32.   
  33.     public Integer getId() {  
  34.         return id;  
  35.     }  
  36.   
  37.     public void setId(Integer id) {  
  38.         this.id = id;  
  39.     }  
  40.   
  41.     public String getNickname() {  
  42.         return nickname;  
  43.     }  
  44.   
  45.     public void setNickname(String nickname) {  
  46.         this.nickname = nickname;  
  47.     }  
  48.   
  49.     public boolean isGender() {  
  50.         return gender;  
  51.     }  
  52.   
  53.     public void setGender(boolean gender) {  
  54.         this.gender = gender;  
  55.     }  
  56.   
  57.     public String getHeader_img() {  
  58.         return header_img;  
  59.     }  
  60.   
  61.     public void setHeader_img(String headerImg) {  
  62.         header_img = headerImg;  
  63.     }  
  64.   
  65.     public String getQq() {  
  66.         return qq;  
  67.     }  
  68.   
  69.     public void setQq(String qq) {  
  70.         this.qq = qq;  
  71.     }  
  72.   
  73.     public String getEmail() {  
  74.         return email;  
  75.     }  
  76.   
  77.     public void setEmail(String email) {  
  78.         this.email = email;  
  79.     }  
  80.   
  81.     public String getContent() {  
  82.         return content;  
  83.     }  
  84.   
  85.     public void setContent(String content) {  
  86.         this.content = content;  
  87.     }  
  88.   
  89.     public String getIp() {  
  90.         return ip;  
  91.     }  
  92.   
  93.     public void setIp(String ip) {  
  94.         this.ip = ip;  
  95.     }  
  96.   
  97.     public Date getPubTime() {  
  98.         return pubTime;  
  99.     }  
  100.   
  101.     public void setPubTime(Date pubTime) {  
  102.         this.pubTime = pubTime;  
  103.     }  
  104.   
  105.     public String getReply() {  
  106.         return reply;  
  107.     }  
  108.   
  109.     public void setReply(String reply) {  
  110.         this.reply = reply;  
  111.     }  
  112.   
  113.     public Date getReplyTime() {  
  114.         return replyTime;  
  115.     }  
  116.   
  117.     public void setReplyTime(Date replyTime) {  
  118.         this.replyTime = replyTime;  
  119.     }  
  120.   
  121.     @Override  
  122.     public String toString() {  
  123.         return "Message [content=" + content + ", email=" + email + ", gender="  
  124.                 + gender + ", header_img=" + header_img + ", id=" + id  
  125.                 + ", ip=" + ip + ", nickname=" + nickname + ", pubTime="  
  126.                 + pubTime + ", qq=" + qq + "]";  
  127.     }  
  128.   
  129. }  
/**
 *  ClassName: Message.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * 留言实体类
 * 
 * @author yjd
 */
public class Message implements Serializable {

	private static final long serialVersionUID = 6617253915349620625L;
	private Integer id; // OID
	private String nickname; // 昵称
	private boolean gender; // 性别
	private String header_img; // 头像
	private String qq; // qq
	private String email; // 邮箱号
	private String content; // 留言内容
	private String ip; // 发布者的IP地址
	private Date pubTime; // 留言时间
	private String reply;// 管理员回复内容
	private Date replyTime; // 回复时间

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public boolean isGender() {
		return gender;
	}

	public void setGender(boolean gender) {
		this.gender = gender;
	}

	public String getHeader_img() {
		return header_img;
	}

	public void setHeader_img(String headerImg) {
		header_img = headerImg;
	}

	public String getQq() {
		return qq;
	}

	public void setQq(String qq) {
		this.qq = qq;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public Date getPubTime() {
		return pubTime;
	}

	public void setPubTime(Date pubTime) {
		this.pubTime = pubTime;
	}

	public String getReply() {
		return reply;
	}

	public void setReply(String reply) {
		this.reply = reply;
	}

	public Date getReplyTime() {
		return replyTime;
	}

	public void setReplyTime(Date replyTime) {
		this.replyTime = replyTime;
	}

	@Override
	public String toString() {
		return "Message [content=" + content + ", email=" + email + ", gender="
				+ gender + ", header_img=" + header_img + ", id=" + id
				+ ", ip=" + ip + ", nickname=" + nickname + ", pubTime="
				+ pubTime + ", qq=" + qq + "]";
	}

}
实体类映射文件Message.hbm.xml.

  1. <!DOCTYPE hibernate-mapping PUBLIC  
  2.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3.         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  4.   
  5. <hibernate-mapping>  
  6.     <class name="com.yjd.nb.domain.Message" table="msg">  
  7.         <id name="id" column="id">  
  8.             <generator class="native" />  
  9.         </id>  
  10.   
  11.         <property name="nickname" />  
  12.         <property name="gender" />  
  13.         <property name="header_img" />  
  14.         <property name="qq" />  
  15.         <property name="email" />  
  16.         <property name="ip" />  
  17.         <property name="content" />  
  18.         <property name="pubTime" column="pub_time" />  
  19.         <property name="reply" />  
  20.         <property name="replyTime" column="reply_time" />  
  21.     </class>  
  22. </hibernate-mapping>  
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="com.yjd.nb.domain.Message" table="msg">
		<id name="id" column="id">
			<generator class="native" />
		</id>

		<property name="nickname" />
		<property name="gender" />
		<property name="header_img" />
		<property name="qq" />
		<property name="email" />
		<property name="ip" />
		<property name="content" />
		<property name="pubTime" column="pub_time" />
		<property name="reply" />
		<property name="replyTime" column="reply_time" />
	</class>
</hibernate-mapping>
第三步:Hibernate配置文件hibernate.cfg.xml.

  1. <!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6. <session-factory>  
  7.     <!-- 数据库的连接参数配置 -->  
  8.     <property name="hibernate.connection.driver_class">  
  9.         com.mysql.jdbc.Driver  
  10.     </property>  
  11.     <property name="hibernate.connection.url">  
  12.         jdbc:mysql:///s2h-model  
  13.     </property>  
  14.     <property name="hibernate.connection.username">root</property>  
  15.     <property name="hibernate.connection.password">root</property>  
  16.   
  17.     <!-- 数据库方言 -->  
  18.     <property name="hibernate.dialect">  
  19.         org.hibernate.dialect.MySQLDialect  
  20.     </property>  
  21.   
  22.     <!-- c3p0连接池的配置 -->  
  23.     <property name="connection.provider_class">  
  24.         org.hibernate.connection.C3P0ConnectionProvider  
  25.     </property>  
  26.     <property name="hibernate.c3p0.min_size">5</property>  
  27.     <property name="hibernate.c3p0.max_size">30</property>  
  28.     <property name="hibernate.c3p0.timeout">1800</property>  
  29.     <property name="hibernate.c3p0.max_statements">50</property>  
  30.   
  31.     <!-- 其它配置 -->  
  32.     <property name="hbm2ddl.auto">update</property>  
  33.     <property name="show_sql">true</property>  
  34.     <!-- <property name="format_sql">true</property> -->  
  35.   
  36.     <!-- 注册映射文件 -->  
  37.     <mapping resource="com/yjd/nb/domain/Message.hbm.xml" />  
  38.   
  39. </session-factory>  
  40. </hibernate-configuration>  
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
	<!-- 数据库的连接参数配置 -->
	<property name="hibernate.connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<property name="hibernate.connection.url">
		jdbc:mysql:///s2h-model
	</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">root</property>

	<!-- 数据库方言 -->
	<property name="hibernate.dialect">
		org.hibernate.dialect.MySQLDialect
	</property>

	<!-- c3p0连接池的配置 -->
	<property name="connection.provider_class">
		org.hibernate.connection.C3P0ConnectionProvider
	</property>
	<property name="hibernate.c3p0.min_size">5</property>
	<property name="hibernate.c3p0.max_size">30</property>
	<property name="hibernate.c3p0.timeout">1800</property>
	<property name="hibernate.c3p0.max_statements">50</property>

	<!-- 其它配置 -->
	<property name="hbm2ddl.auto">update</property>
	<property name="show_sql">true</property>
	<!-- <property name="format_sql">true</property> -->

	<!-- 注册映射文件 -->
	<mapping resource="com/yjd/nb/domain/Message.hbm.xml" />

</session-factory>
</hibernate-configuration>


第四步:Struts2配置文件struts.xml.

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.dtd">  
  5. <struts>  
  6.     <!--  
  7.         在struts.xml文件中可以使用<constant>标记来对default.properties中的常量属性做覆盖性配置,最常更改的几个常量属性是:  
  8.         1.struts.i18n.encoding=UTF-8:请求消息的编码方式  
  9.         2.struts.action.extension=action:指定被struts2处理的请求后缀类型。多个用逗号隔开。如:action,do,go  
  10.         3.struts.configuration.xml.reload=false:当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开  
  11.         4.struts.devMode=false:是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开  
  12.         5.struts.serve.static.browserCache=true:设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭。  
  13.         6.struts.objectFactory=spring:指定由spring负责action对象的创建  
  14.         7.struts.enable.SlashesInActionNames=false:启用Action的name是否支持斜线(/)  
  15.         8.struts.enable.DynamicMethodInvocation=false:启用动态方法调用  
  16.         9.struts.ui.theme=simple:UI主题类型  
  17.     -->  
  18.     <constant name="struts.action.extension" value="action,do,htm" />  
  19.     <constant name="struts.configuration.xml.reload" value="true" />  
  20.     <constant name="struts.devMode" value="false" />  
  21.     <constant name="struts.serve.static.browserCache" value="false" />  
  22.   
  23.     <!-- Struts2以package形式管理Action的配置 -->  
  24.     <!--  
  25.         package常用的属性:  
  26.         1.name:包名,作为被其它包引用的标识。必须的。实际应用中,应该把一组业务功能相关的Action放在同一个包下。  
  27.         2.extends:指定要扩展的包名。一般会继承自struts-default包。struts-default包是struts2内置的,它定义了struts2内部的众多拦截器和Result类型。  
  28.         3.namespace:指定名称空间。Struts2中Action的请求URI映射由namespace和action名称两部分组成。如果不指定该属性,默认的命名空间为""(空字符串)。  
  29.         4.abstract:声明包为抽象的。抽象包中不能配置action。  
  30.     -->  
  31.     <package name="front" namespace="/" extends="struts-default">  
  32.         <action name="index" class="com.yjd.nb.web.action.IndexAction">  
  33.             <result>/main.jsp</result>  
  34.         </action>  
  35.     </package>  
  36.     <package name="front.msgOpt" namespace="/msg" extends="struts-default">  
  37.         <action name="add" class="com.yjd.nb.web.action.MsgAction"  
  38.             method="add">  
  39.             <result name="list" type="redirect">/index.action</result>  
  40.         </action>  
  41.     </package>  
  42. </struts>  
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!--
		在struts.xml文件中可以使用<constant>标记来对default.properties中的常量属性做覆盖性配置,最常更改的几个常量属性是:
		1.struts.i18n.encoding=UTF-8:请求消息的编码方式
		2.struts.action.extension=action:指定被struts2处理的请求后缀类型。多个用逗号隔开。如:action,do,go
		3.struts.configuration.xml.reload=false:当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开
		4.struts.devMode=false:是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开
		5.struts.serve.static.browserCache=true:设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭。
		6.struts.objectFactory=spring:指定由spring负责action对象的创建
		7.struts.enable.SlashesInActionNames=false:启用Action的name是否支持斜线(/)
		8.struts.enable.DynamicMethodInvocation=false:启用动态方法调用
		9.struts.ui.theme=simple:UI主题类型
	-->
	<constant name="struts.action.extension" value="action,do,htm" />
	<constant name="struts.configuration.xml.reload" value="true" />
	<constant name="struts.devMode" value="false" />
	<constant name="struts.serve.static.browserCache" value="false" />

	<!-- Struts2以package形式管理Action的配置 -->
	<!--
		package常用的属性:
		1.name:包名,作为被其它包引用的标识。必须的。实际应用中,应该把一组业务功能相关的Action放在同一个包下。
		2.extends:指定要扩展的包名。一般会继承自struts-default包。struts-default包是struts2内置的,它定义了struts2内部的众多拦截器和Result类型。
		3.namespace:指定名称空间。Struts2中Action的请求URI映射由namespace和action名称两部分组成。如果不指定该属性,默认的命名空间为""(空字符串)。
		4.abstract:声明包为抽象的。抽象包中不能配置action。
	-->
	<package name="front" namespace="/" extends="struts-default">
		<action name="index" class="com.yjd.nb.web.action.IndexAction">
			<result>/main.jsp</result>
		</action>
	</package>
	<package name="front.msgOpt" namespace="/msg" extends="struts-default">
		<action name="add" class="com.yjd.nb.web.action.MsgAction"
			method="add">
			<result name="list" type="redirect">/index.action</result>
		</action>
	</package>
</struts>

第五步:创建action类。

跳转到首页的action:

  1. /** 
  2.  *  ClassName: IndexAction.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.web.action;  
  9.   
  10. import org.apache.struts2.ServletActionContext;  
  11.   
  12. import com.opensymphony.xwork2.ActionSupport;  
  13. import com.yjd.domain.common.PageModel;  
  14. import com.yjd.nb.domain.Message;  
  15. import com.yjd.nb.service.MessageService;  
  16.   
  17. /** 
  18.  * 首页的请求处理类 
  19.  *  
  20.  * @author yjd 
  21.  */  
  22. public class IndexAction extends ActionSupport {  
  23.     private static final long serialVersionUID = -3634083788212536690L;  
  24.     private MessageService messageService = new MessageService();  
  25.     private int pageNo = 1;  
  26.     private int pageSize = 10;  
  27.   
  28.     public String execute() {  
  29.         PageModel<Message> pm = messageService.findByPage(pageNo, pageSize);  
  30.   
  31.         ServletActionContext.getRequest().setAttribute("pm", pm);  
  32.         // ActionContext.getContext().put("pm", pm);   
  33.         return SUCCESS;  
  34.     }  
  35.   
  36.     public MessageService getMessageService() {  
  37.         return messageService;  
  38.     }  
  39.   
  40.     public void setMessageService(MessageService messageService) {  
  41.         this.messageService = messageService;  
  42.     }  
  43.   
  44.     public int getPageNo() {  
  45.         return pageNo;  
  46.     }  
  47.   
  48.     public void setPageNo(int pageNo) {  
  49.         this.pageNo = pageNo;  
  50.     }  
  51.   
  52.     public int getPageSize() {  
  53.         return pageSize;  
  54.     }  
  55.   
  56.     public void setPageSize(int pageSize) {  
  57.         this.pageSize = pageSize;  
  58.     }  
  59. }  
/**
 *  ClassName: IndexAction.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.web.action;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.yjd.domain.common.PageModel;
import com.yjd.nb.domain.Message;
import com.yjd.nb.service.MessageService;

/**
 * 首页的请求处理类
 * 
 * @author yjd
 */
public class IndexAction extends ActionSupport {
	private static final long serialVersionUID = -3634083788212536690L;
	private MessageService messageService = new MessageService();
	private int pageNo = 1;
	private int pageSize = 10;

	public String execute() {
		PageModel<Message> pm = messageService.findByPage(pageNo, pageSize);

		ServletActionContext.getRequest().setAttribute("pm", pm);
		// ActionContext.getContext().put("pm", pm);
		return SUCCESS;
	}

	public MessageService getMessageService() {
		return messageService;
	}

	public void setMessageService(MessageService messageService) {
		this.messageService = messageService;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
}
实体操作action:

  1. /** 
  2.  *  ClassName: MsgAction.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.web.action;  
  9.   
  10. import java.util.Date;  
  11.   
  12. import org.apache.struts2.ServletActionContext;  
  13.   
  14. import com.opensymphony.xwork2.ActionSupport;  
  15. import com.yjd.nb.domain.Message;  
  16. import com.yjd.nb.service.MessageService;  
  17.   
  18. /** 
  19.  * 前台针对Msg操作的处理类 
  20.  *  
  21.  * @author yjd 
  22.  */  
  23. public class MsgAction extends ActionSupport {  
  24.     private static final long serialVersionUID = -5736885633645314440L;  
  25.     private MessageService messageService = new MessageService();  
  26.     private Message msg;  
  27.   
  28.     // 添加实体   
  29.     public String add() {  
  30.         msg.setIp(ServletActionContext.getRequest().getRemoteAddr());  
  31.         msg.setPubTime(new Date());  
  32.   
  33.         messageService.add(msg);  
  34.         return "list";  
  35.     }  
  36.   
  37.     public Message getMsg() {  
  38.         return msg;  
  39.     }  
  40.   
  41.     public void setMsg(Message msg) {  
  42.         this.msg = msg;  
  43.     }  
  44.   
  45. }  
/**
 *  ClassName: MsgAction.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.web.action;

import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.yjd.nb.domain.Message;
import com.yjd.nb.service.MessageService;

/**
 * 前台针对Msg操作的处理类
 * 
 * @author yjd
 */
public class MsgAction extends ActionSupport {
	private static final long serialVersionUID = -5736885633645314440L;
	private MessageService messageService = new MessageService();
	private Message msg;

	// 添加实体
	public String add() {
		msg.setIp(ServletActionContext.getRequest().getRemoteAddr());
		msg.setPubTime(new Date());

		messageService.add(msg);
		return "list";
	}

	public Message getMsg() {
		return msg;
	}

	public void setMsg(Message msg) {
		this.msg = msg;
	}

}

第六步:在web.xml中配置启动Struts2框架的过滤器。

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.       
  8.     <filter>  
  9.         <filter-name>struts2</filter-name>  
  10.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  11.     </filter>  
  12.       
  13.     <filter-mapping>  
  14.         <filter-name>struts2</filter-name>  
  15.         <url-pattern>/*</url-pattern>  
  16.     </filter-mapping>  
  17.       
  18.   <welcome-file-list>  
  19.     <welcome-file>index.jsp</welcome-file>  
  20.   </welcome-file-list>  
  21. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

第七步:编写JSP显示页面。

首页跳转index.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%--<jsp:forward page="index.action"/> --%>  
  3. <meta http-equiv="refresh" content="0;url=index.action" />  
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--<jsp:forward page="index.action"/> --%>
<meta http-equiv="refresh" content="0;url=index.action" />
主页:main.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
  3. <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>  
  4. <%@taglib uri="http://hi.youkuaiyun.com/tjcyjd/tags" prefix="myTag" %>  
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  6. <html><head><title>在线留言系统</title>  
  7. <meta http-equiv=content-type content="text/html; charset=UTF-8">  
  8. <link href="images/style.css" type=text/css rel=stylesheet></link>  
  9. <style type="text/css">  
  10. body{font-size: 12px}  
  11. table{font-size: 12px}  
  12. a{font-size:12px}  
  13. .current{font-size:12px;}  
  14. </style>  
  15.   
  16. </head>  
  17. <body><!--留言表单 -->  
  18. <form name=form1 action="msg/add.action" method=post>  
  19. <table class=tab cellspacing=1 align=center border=0>  
  20.   <tbody>  
  21.   <tr>  
  22.     <td class=title background=images/titlebg.jpg colspan=2   
  23.       height=25><span>请 签 写 留 言</span> </td></tr>  
  24.   <tr>  
  25.     <td align=right width="20%">您的称呼: </td>  
  26.     <td width="80%"><input id="username" maxlength=50 name="msg.nickname"/> </td></tr>  
  27.   <tr>  
  28.     <td align=right width="20%">您的性别: </td>  
  29.     <td width="80%"><input id=sex type=radio value="true" name="msg.gender">   
  30.       男    <input type=radio checked value="false" name="msg.gender"> 女   
  31.   </td></tr>  
  32.   <tr>  
  33.     <td align=right>选择头像: </td>  
  34.     <td><select id=image name="msg.header_img"> <option   
  35.         value=1.gif selected>1.gif</option> <option   
  36.         value=2.gif>2.gif</option> <option   
  37.         value=3.gif>3.gif</option> <option   
  38.         value=4.gif>4.gif</option> <option   
  39.         value=5.gif>5.gif</option> <option   
  40.         value=6.gif>6.gif</option> <option   
  41.         value=7.gif>7.gif</option> <option   
  42.         value=8.gif>8.gif</option> <option   
  43.         value=9.gif>9.gif</option> <option   
  44.         value=10.gif>10.gif</option> <option   
  45.         value=11.gif>11.gif</option> <option   
  46.         value=12.gif>12.gif</option> <option   
  47.         value=13.gif>13.gif</option> <option   
  48.         value=14.gif>14.gif</option> <option   
  49.         value=15.gif>15.gif</option> <option   
  50.         value=16.gif>16.gif</option> <option   
  51.         value=17.gif>17.gif</option> <option   
  52.         value=18.gif>18.gif</option> <option   
  53.         value=19.gif>19.gif</option> <option   
  54.         value=20.gif>20.gif</option></select> </td></tr>  
  55.   <tr>  
  56.     <td align=right>您的qq: </td>  
  57.     <td><input id=qq maxlength=50 name="msg.qq"> </td></tr>  
  58.   <tr>  
  59.     <td align=right>您的邮箱: </td>  
  60.     <td><input id=email maxlength=50 name="msg.email"> </td></tr>  
  61.   <tr>  
  62.     <td align=right>留言内容: </td>  
  63.     <td><textarea id=content name="msg.content" rows=5 cols=50></textarea>   
  64.   </td></tr>  
  65.   <tr>  
  66.     <td align="center" colspan=2><input type=submit value=提交>       
  67. <input type=reset value=重置> </td></tr></tbody></table></form><!--留言表单结束 --><!--留言列表 -->  
  68. <table class=tab cellspacing=1 align=center border=0>  
  69.   <tbody>  
  70.   <tr>  
  71.     <td class=title background=images/titlebg.jpg colspan=2   
  72.       height=25><span>留 言 列 表【<a href="login.jsp">管理登录</a>】 </span></td></tr>  
  73.   
  74. <c:forEach items="${pm.data}" var="msg">  
  75.   <tr>  
  76.     <td align="center" width="20%" rowspan=4>你好 : ${msg.nickname} ${msg.gender ? "帅哥" : "靓妹"} <br><br><img   
  77.       src="images/${msg.header_img}"> </td></tr>  
  78.   <tr>  
  79.     <td width="80%" height="100%">发表于: <fmt:formatDate value="${msg.pubTime}" pattern="yyyy-MM-dd HH:mm:ss"/>   <img   
  80.       src="images/8_online.gif" border=0> <a href="mailto:${msg.email}"><img   
  81.       src="images/email.gif" border=0></a> <img src="images/ip.gif"   
  82.       border=0> 来自:${msg.ip}</td></tr>  
  83.   <tr>  
  84.     <td>${msg.content}</td></tr>  
  85.   <tr>  
  86.     <td><font color=#ff0000>管理员回复:</font> </td></tr>  
  87. </c:forEach>  
  88.    
  89. </tbody></table><!--留言列表显示结束-->  
  90.     <!--分页链接 -->  
  91.     <myTag:pager pageSize="${pm.pageSize}" pageNo="${pm.pageNo}" url="index.action" recordCount="${pm.recordCount}"/>  
  92.     <!--分页链接结束 -->  
  93. </body></html>  

 

 

下面就简单学习下Struts2+Hibernate的整合。

其实就七个步骤:

第一步:添加所需的jar包。

第二步:创建实体类以及对应的映射文件。

第三步:配置hibernate.cfg.xml配置文件。

第四步:配置struts.xml配置文件。

第五步:创建相应的action。

第六步:在web.xml中配置启动Struts2框架的过滤器。

第七步:编写JSP显示页面。

---------------------------------------------------------------------------------------------------------------------------

具体细节及代码如下(代码仅供参考):

第一步:jar包的添加这里不多说。

第二步:

实体类Message.java

  1. /** 
  2.  *  ClassName: Message.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.domain;  
  9.   
  10. import java.io.Serializable;  
  11. import java.util.Date;  
  12.   
  13. /** 
  14.  * 留言实体类 
  15.  *  
  16.  * @author yjd 
  17.  */  
  18. public class Message implements Serializable {  
  19.   
  20.     private static final long serialVersionUID = 6617253915349620625L;  
  21.     private Integer id; // OID   
  22.     private String nickname; // 昵称   
  23.     private boolean gender; // 性别   
  24.     private String header_img; // 头像   
  25.     private String qq; // qq   
  26.     private String email; // 邮箱号   
  27.     private String content; // 留言内容   
  28.     private String ip; // 发布者的IP地址   
  29.     private Date pubTime; // 留言时间   
  30.     private String reply;// 管理员回复内容   
  31.     private Date replyTime; // 回复时间   
  32.   
  33.     public Integer getId() {  
  34.         return id;  
  35.     }  
  36.   
  37.     public void setId(Integer id) {  
  38.         this.id = id;  
  39.     }  
  40.   
  41.     public String getNickname() {  
  42.         return nickname;  
  43.     }  
  44.   
  45.     public void setNickname(String nickname) {  
  46.         this.nickname = nickname;  
  47.     }  
  48.   
  49.     public boolean isGender() {  
  50.         return gender;  
  51.     }  
  52.   
  53.     public void setGender(boolean gender) {  
  54.         this.gender = gender;  
  55.     }  
  56.   
  57.     public String getHeader_img() {  
  58.         return header_img;  
  59.     }  
  60.   
  61.     public void setHeader_img(String headerImg) {  
  62.         header_img = headerImg;  
  63.     }  
  64.   
  65.     public String getQq() {  
  66.         return qq;  
  67.     }  
  68.   
  69.     public void setQq(String qq) {  
  70.         this.qq = qq;  
  71.     }  
  72.   
  73.     public String getEmail() {  
  74.         return email;  
  75.     }  
  76.   
  77.     public void setEmail(String email) {  
  78.         this.email = email;  
  79.     }  
  80.   
  81.     public String getContent() {  
  82.         return content;  
  83.     }  
  84.   
  85.     public void setContent(String content) {  
  86.         this.content = content;  
  87.     }  
  88.   
  89.     public String getIp() {  
  90.         return ip;  
  91.     }  
  92.   
  93.     public void setIp(String ip) {  
  94.         this.ip = ip;  
  95.     }  
  96.   
  97.     public Date getPubTime() {  
  98.         return pubTime;  
  99.     }  
  100.   
  101.     public void setPubTime(Date pubTime) {  
  102.         this.pubTime = pubTime;  
  103.     }  
  104.   
  105.     public String getReply() {  
  106.         return reply;  
  107.     }  
  108.   
  109.     public void setReply(String reply) {  
  110.         this.reply = reply;  
  111.     }  
  112.   
  113.     public Date getReplyTime() {  
  114.         return replyTime;  
  115.     }  
  116.   
  117.     public void setReplyTime(Date replyTime) {  
  118.         this.replyTime = replyTime;  
  119.     }  
  120.   
  121.     @Override  
  122.     public String toString() {  
  123.         return "Message [content=" + content + ", email=" + email + ", gender="  
  124.                 + gender + ", header_img=" + header_img + ", id=" + id  
  125.                 + ", ip=" + ip + ", nickname=" + nickname + ", pubTime="  
  126.                 + pubTime + ", qq=" + qq + "]";  
  127.     }  
  128.   
  129. }  
/**
 *  ClassName: Message.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * 留言实体类
 * 
 * @author yjd
 */
public class Message implements Serializable {

	private static final long serialVersionUID = 6617253915349620625L;
	private Integer id; // OID
	private String nickname; // 昵称
	private boolean gender; // 性别
	private String header_img; // 头像
	private String qq; // qq
	private String email; // 邮箱号
	private String content; // 留言内容
	private String ip; // 发布者的IP地址
	private Date pubTime; // 留言时间
	private String reply;// 管理员回复内容
	private Date replyTime; // 回复时间

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public boolean isGender() {
		return gender;
	}

	public void setGender(boolean gender) {
		this.gender = gender;
	}

	public String getHeader_img() {
		return header_img;
	}

	public void setHeader_img(String headerImg) {
		header_img = headerImg;
	}

	public String getQq() {
		return qq;
	}

	public void setQq(String qq) {
		this.qq = qq;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public Date getPubTime() {
		return pubTime;
	}

	public void setPubTime(Date pubTime) {
		this.pubTime = pubTime;
	}

	public String getReply() {
		return reply;
	}

	public void setReply(String reply) {
		this.reply = reply;
	}

	public Date getReplyTime() {
		return replyTime;
	}

	public void setReplyTime(Date replyTime) {
		this.replyTime = replyTime;
	}

	@Override
	public String toString() {
		return "Message [content=" + content + ", email=" + email + ", gender="
				+ gender + ", header_img=" + header_img + ", id=" + id
				+ ", ip=" + ip + ", nickname=" + nickname + ", pubTime="
				+ pubTime + ", qq=" + qq + "]";
	}

}

实体类映射文件Message.hbm.xml.

  1. <!DOCTYPE hibernate-mapping PUBLIC  
  2.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3.         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  4.   
  5. <hibernate-mapping>  
  6.     <class name="com.yjd.nb.domain.Message" table="msg">  
  7.         <id name="id" column="id">  
  8.             <generator class="native" />  
  9.         </id>  
  10.   
  11.         <property name="nickname" />  
  12.         <property name="gender" />  
  13.         <property name="header_img" />  
  14.         <property name="qq" />  
  15.         <property name="email" />  
  16.         <property name="ip" />  
  17.         <property name="content" />  
  18.         <property name="pubTime" column="pub_time" />  
  19.         <property name="reply" />  
  20.         <property name="replyTime" column="reply_time" />  
  21.     </class>  
  22. </hibernate-mapping>  
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="com.yjd.nb.domain.Message" table="msg">
		<id name="id" column="id">
			<generator class="native" />
		</id>

		<property name="nickname" />
		<property name="gender" />
		<property name="header_img" />
		<property name="qq" />
		<property name="email" />
		<property name="ip" />
		<property name="content" />
		<property name="pubTime" column="pub_time" />
		<property name="reply" />
		<property name="replyTime" column="reply_time" />
	</class>
</hibernate-mapping>

第三步:Hibernate配置文件hibernate.cfg.xml.

  1. <!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6. <session-factory>  
  7.     <!-- 数据库的连接参数配置 -->  
  8.     <property name="hibernate.connection.driver_class">  
  9.         com.mysql.jdbc.Driver  
  10.     </property>  
  11.     <property name="hibernate.connection.url">  
  12.         jdbc:mysql:///s2h-model  
  13.     </property>  
  14.     <property name="hibernate.connection.username">root</property>  
  15.     <property name="hibernate.connection.password">root</property>  
  16.   
  17.     <!-- 数据库方言 -->  
  18.     <property name="hibernate.dialect">  
  19.         org.hibernate.dialect.MySQLDialect  
  20.     </property>  
  21.   
  22.     <!-- c3p0连接池的配置 -->  
  23.     <property name="connection.provider_class">  
  24.         org.hibernate.connection.C3P0ConnectionProvider  
  25.     </property>  
  26.     <property name="hibernate.c3p0.min_size">5</property>  
  27.     <property name="hibernate.c3p0.max_size">30</property>  
  28.     <property name="hibernate.c3p0.timeout">1800</property>  
  29.     <property name="hibernate.c3p0.max_statements">50</property>  
  30.   
  31.     <!-- 其它配置 -->  
  32.     <property name="hbm2ddl.auto">update</property>  
  33.     <property name="show_sql">true</property>  
  34.     <!-- <property name="format_sql">true</property> -->  
  35.   
  36.     <!-- 注册映射文件 -->  
  37.     <mapping resource="com/yjd/nb/domain/Message.hbm.xml" />  
  38.   
  39. </session-factory>  
  40. </hibernate-configuration>  
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
	<!-- 数据库的连接参数配置 -->
	<property name="hibernate.connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<property name="hibernate.connection.url">
		jdbc:mysql:///s2h-model
	</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">root</property>

	<!-- 数据库方言 -->
	<property name="hibernate.dialect">
		org.hibernate.dialect.MySQLDialect
	</property>

	<!-- c3p0连接池的配置 -->
	<property name="connection.provider_class">
		org.hibernate.connection.C3P0ConnectionProvider
	</property>
	<property name="hibernate.c3p0.min_size">5</property>
	<property name="hibernate.c3p0.max_size">30</property>
	<property name="hibernate.c3p0.timeout">1800</property>
	<property name="hibernate.c3p0.max_statements">50</property>

	<!-- 其它配置 -->
	<property name="hbm2ddl.auto">update</property>
	<property name="show_sql">true</property>
	<!-- <property name="format_sql">true</property> -->

	<!-- 注册映射文件 -->
	<mapping resource="com/yjd/nb/domain/Message.hbm.xml" />

</session-factory>
</hibernate-configuration>



 

第四步:Struts2配置文件struts.xml.

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.dtd">  
  5. <struts>  
  6.     <!--  
  7.         在struts.xml文件中可以使用<constant>标记来对default.properties中的常量属性做覆盖性配置,最常更改的几个常量属性是:  
  8.         1.struts.i18n.encoding=UTF-8:请求消息的编码方式  
  9.         2.struts.action.extension=action:指定被struts2处理的请求后缀类型。多个用逗号隔开。如:action,do,go  
  10.         3.struts.configuration.xml.reload=false:当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开  
  11.         4.struts.devMode=false:是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开  
  12.         5.struts.serve.static.browserCache=true:设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭。  
  13.         6.struts.objectFactory=spring:指定由spring负责action对象的创建  
  14.         7.struts.enable.SlashesInActionNames=false:启用Action的name是否支持斜线(/)  
  15.         8.struts.enable.DynamicMethodInvocation=false:启用动态方法调用  
  16.         9.struts.ui.theme=simple:UI主题类型  
  17.     -->  
  18.     <constant name="struts.action.extension" value="action,do,htm" />  
  19.     <constant name="struts.configuration.xml.reload" value="true" />  
  20.     <constant name="struts.devMode" value="false" />  
  21.     <constant name="struts.serve.static.browserCache" value="false" />  
  22.   
  23.     <!-- Struts2以package形式管理Action的配置 -->  
  24.     <!--  
  25.         package常用的属性:  
  26.         1.name:包名,作为被其它包引用的标识。必须的。实际应用中,应该把一组业务功能相关的Action放在同一个包下。  
  27.         2.extends:指定要扩展的包名。一般会继承自struts-default包。struts-default包是struts2内置的,它定义了struts2内部的众多拦截器和Result类型。  
  28.         3.namespace:指定名称空间。Struts2中Action的请求URI映射由namespace和action名称两部分组成。如果不指定该属性,默认的命名空间为""(空字符串)。  
  29.         4.abstract:声明包为抽象的。抽象包中不能配置action。  
  30.     -->  
  31.     <package name="front" namespace="/" extends="struts-default">  
  32.         <action name="index" class="com.yjd.nb.web.action.IndexAction">  
  33.             <result>/main.jsp</result>  
  34.         </action>  
  35.     </package>  
  36.     <package name="front.msgOpt" namespace="/msg" extends="struts-default">  
  37.         <action name="add" class="com.yjd.nb.web.action.MsgAction"  
  38.             method="add">  
  39.             <result name="list" type="redirect">/index.action</result>  
  40.         </action>  
  41.     </package>  
  42. </struts>  
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!--
		在struts.xml文件中可以使用<constant>标记来对default.properties中的常量属性做覆盖性配置,最常更改的几个常量属性是:
		1.struts.i18n.encoding=UTF-8:请求消息的编码方式
		2.struts.action.extension=action:指定被struts2处理的请求后缀类型。多个用逗号隔开。如:action,do,go
		3.struts.configuration.xml.reload=false:当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开
		4.struts.devMode=false:是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开
		5.struts.serve.static.browserCache=true:设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭。
		6.struts.objectFactory=spring:指定由spring负责action对象的创建
		7.struts.enable.SlashesInActionNames=false:启用Action的name是否支持斜线(/)
		8.struts.enable.DynamicMethodInvocation=false:启用动态方法调用
		9.struts.ui.theme=simple:UI主题类型
	-->
	<constant name="struts.action.extension" value="action,do,htm" />
	<constant name="struts.configuration.xml.reload" value="true" />
	<constant name="struts.devMode" value="false" />
	<constant name="struts.serve.static.browserCache" value="false" />

	<!-- Struts2以package形式管理Action的配置 -->
	<!--
		package常用的属性:
		1.name:包名,作为被其它包引用的标识。必须的。实际应用中,应该把一组业务功能相关的Action放在同一个包下。
		2.extends:指定要扩展的包名。一般会继承自struts-default包。struts-default包是struts2内置的,它定义了struts2内部的众多拦截器和Result类型。
		3.namespace:指定名称空间。Struts2中Action的请求URI映射由namespace和action名称两部分组成。如果不指定该属性,默认的命名空间为""(空字符串)。
		4.abstract:声明包为抽象的。抽象包中不能配置action。
	-->
	<package name="front" namespace="/" extends="struts-default">
		<action name="index" class="com.yjd.nb.web.action.IndexAction">
			<result>/main.jsp</result>
		</action>
	</package>
	<package name="front.msgOpt" namespace="/msg" extends="struts-default">
		<action name="add" class="com.yjd.nb.web.action.MsgAction"
			method="add">
			<result name="list" type="redirect">/index.action</result>
		</action>
	</package>
</struts>


第五步:创建action类。

跳转到首页的action:

  1. /** 
  2.  *  ClassName: IndexAction.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.web.action;  
  9.   
  10. import org.apache.struts2.ServletActionContext;  
  11.   
  12. import com.opensymphony.xwork2.ActionSupport;  
  13. import com.yjd.domain.common.PageModel;  
  14. import com.yjd.nb.domain.Message;  
  15. import com.yjd.nb.service.MessageService;  
  16.   
  17. /** 
  18.  * 首页的请求处理类 
  19.  *  
  20.  * @author yjd 
  21.  */  
  22. public class IndexAction extends ActionSupport {  
  23.     private static final long serialVersionUID = -3634083788212536690L;  
  24.     private MessageService messageService = new MessageService();  
  25.     private int pageNo = 1;  
  26.     private int pageSize = 10;  
  27.   
  28.     public String execute() {  
  29.         PageModel<Message> pm = messageService.findByPage(pageNo, pageSize);  
  30.   
  31.         ServletActionContext.getRequest().setAttribute("pm", pm);  
  32.         // ActionContext.getContext().put("pm", pm);   
  33.         return SUCCESS;  
  34.     }  
  35.   
  36.     public MessageService getMessageService() {  
  37.         return messageService;  
  38.     }  
  39.   
  40.     public void setMessageService(MessageService messageService) {  
  41.         this.messageService = messageService;  
  42.     }  
  43.   
  44.     public int getPageNo() {  
  45.         return pageNo;  
  46.     }  
  47.   
  48.     public void setPageNo(int pageNo) {  
  49.         this.pageNo = pageNo;  
  50.     }  
  51.   
  52.     public int getPageSize() {  
  53.         return pageSize;  
  54.     }  
  55.   
  56.     public void setPageSize(int pageSize) {  
  57.         this.pageSize = pageSize;  
  58.     }  
  59. }  
/**
 *  ClassName: IndexAction.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.web.action;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.yjd.domain.common.PageModel;
import com.yjd.nb.domain.Message;
import com.yjd.nb.service.MessageService;

/**
 * 首页的请求处理类
 * 
 * @author yjd
 */
public class IndexAction extends ActionSupport {
	private static final long serialVersionUID = -3634083788212536690L;
	private MessageService messageService = new MessageService();
	private int pageNo = 1;
	private int pageSize = 10;

	public String execute() {
		PageModel<Message> pm = messageService.findByPage(pageNo, pageSize);

		ServletActionContext.getRequest().setAttribute("pm", pm);
		// ActionContext.getContext().put("pm", pm);
		return SUCCESS;
	}

	public MessageService getMessageService() {
		return messageService;
	}

	public void setMessageService(MessageService messageService) {
		this.messageService = messageService;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
}

实体操作action:

  1. /** 
  2.  *  ClassName: MsgAction.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.web.action;  
  9.   
  10. import java.util.Date;  
  11.   
  12. import org.apache.struts2.ServletActionContext;  
  13.   
  14. import com.opensymphony.xwork2.ActionSupport;  
  15. import com.yjd.nb.domain.Message;  
  16. import com.yjd.nb.service.MessageService;  
  17.   
  18. /** 
  19.  * 前台针对Msg操作的处理类 
  20.  *  
  21.  * @author yjd 
  22.  */  
  23. public class MsgAction extends ActionSupport {  
  24.     private static final long serialVersionUID = -5736885633645314440L;  
  25.     private MessageService messageService = new MessageService();  
  26.     private Message msg;  
  27.   
  28.     // 添加实体   
  29.     public String add() {  
  30.         msg.setIp(ServletActionContext.getRequest().getRemoteAddr());  
  31.         msg.setPubTime(new Date());  
  32.   
  33.         messageService.add(msg);  
  34.         return "list";  
  35.     }  
  36.   
  37.     public Message getMsg() {  
  38.         return msg;  
  39.     }  
  40.   
  41.     public void setMsg(Message msg) {  
  42.         this.msg = msg;  
  43.     }  
  44.   
  45. }  
/**
 *  ClassName: MsgAction.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.web.action;

import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.yjd.nb.domain.Message;
import com.yjd.nb.service.MessageService;

/**
 * 前台针对Msg操作的处理类
 * 
 * @author yjd
 */
public class MsgAction extends ActionSupport {
	private static final long serialVersionUID = -5736885633645314440L;
	private MessageService messageService = new MessageService();
	private Message msg;

	// 添加实体
	public String add() {
		msg.setIp(ServletActionContext.getRequest().getRemoteAddr());
		msg.setPubTime(new Date());

		messageService.add(msg);
		return "list";
	}

	public Message getMsg() {
		return msg;
	}

	public void setMsg(Message msg) {
		this.msg = msg;
	}

}


第六步:在web.xml中配置启动Struts2框架的过滤器。

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.       
  8.     <filter>  
  9.         <filter-name>struts2</filter-name>  
  10.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  11.     </filter>  
  12.       
  13.     <filter-mapping>  
  14.         <filter-name>struts2</filter-name>  
  15.         <url-pattern>/*</url-pattern>  
  16.     </filter-mapping>  
  17.       
  18.   <welcome-file-list>  
  19.     <welcome-file>index.jsp</welcome-file>  
  20.   </welcome-file-list>  
  21. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


第七步:编写JSP显示页面。

首页跳转index.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%--<jsp:forward page="index.action"/> --%>  
  3. <meta http-equiv="refresh" content="0;url=index.action" />  
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--<jsp:forward page="index.action"/> --%>
<meta http-equiv="refresh" content="0;url=index.action" />

主页:main.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
  3. <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>  
  4. <%@taglib uri="http://hi.youkuaiyun.com/tjcyjd/tags" prefix="myTag" %>  
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  6. <html><head><title>在线留言系统</title>  
  7. <meta http-equiv=content-type content="text/html; charset=UTF-8">  
  8. <link href="images/style.css" type=text/css rel=stylesheet></link>  
  9. <style type="text/css">  
  10. body{font-size: 12px}  
  11. table{font-size: 12px}  
  12. a{font-size:12px}  
  13. .current{font-size:12px;}  
  14. </style>  
  15.   
  16. </head>  
  17. <body><!--留言表单 -->  
  18. <form name=form1 action="msg/add.action" method=post>  
  19. <table class=tab cellspacing=1 align=center border=0>  
  20.   <tbody>  
  21.   <tr>  
  22.     <td class=title background=images/titlebg.jpg colspan=2   
  23.       height=25><span>请 签 写 留 言</span> </td></tr>  
  24.   <tr>  
  25.     <td align=right width="20%">您的称呼: </td>  
  26.     <td width="80%"><input id="username" maxlength=50 name="msg.nickname"/> </td></tr>  
  27.   <tr>  
  28.     <td align=right width="20%">您的性别: </td>  
  29.     <td width="80%"><input id=sex type=radio value="true" name="msg.gender">   
  30.       男    <input type=radio checked value="false" name="msg.gender"> 女   
  31.   </td></tr>  
  32.   <tr>  
  33.     <td align=right>选择头像: </td>  
  34.     <td><select id=image name="msg.header_img"> <option   
  35.         value=1.gif selected>1.gif</option> <option   
  36.         value=2.gif>2.gif</option> <option   
  37.         value=3.gif>3.gif</option> <option   
  38.         value=4.gif>4.gif</option> <option   
  39.         value=5.gif>5.gif</option> <option   
  40.         value=6.gif>6.gif</option> <option   
  41.         value=7.gif>7.gif</option> <option   
  42.         value=8.gif>8.gif</option> <option   
  43.         value=9.gif>9.gif</option> <option   
  44.         value=10.gif>10.gif</option> <option   
  45.         value=11.gif>11.gif</option> <option   
  46.         value=12.gif>12.gif</option> <option   
  47.         value=13.gif>13.gif</option> <option   
  48.         value=14.gif>14.gif</option> <option   
  49.         value=15.gif>15.gif</option> <option   
  50.         value=16.gif>16.gif</option> <option   
  51.         value=17.gif>17.gif</option> <option   
  52.         value=18.gif>18.gif</option> <option   
  53.         value=19.gif>19.gif</option> <option   
  54.         value=20.gif>20.gif</option></select> </td></tr>  
  55.   <tr>  
  56.     <td align=right>您的qq: </td>  
  57.     <td><input id=qq maxlength=50 name="msg.qq"> </td></tr>  
  58.   <tr>  
  59.     <td align=right>您的邮箱: </td>  
  60.     <td><input id=email maxlength=50 name="msg.email"> </td></tr>  
  61.   <tr>  
  62.     <td align=right>留言内容: </td>  
  63.     <td><textarea id=content name="msg.content" rows=5 cols=50></textarea>   
  64.   </td></tr>  
  65.   <tr>  
  66.     <td align="center" colspan=2><input type=submit value=提交>       
  67. <input type=reset value=重置> </td></tr></tbody></table></form><!--留言表单结束 --><!--留言列表 -->  
  68. <table class=tab cellspacing=1 align=center border=0>  
  69.   <tbody>  
  70.   <tr>  
  71.     <td class=title background=images/titlebg.jpg colspan=2   
  72.       height=25><span>留 言 列 表【<a href="login.jsp">管理登录</a>】 </span></td></tr>  
  73.   
  74. <c:forEach items="${pm.data}" var="msg">  
  75.   <tr>  
  76.     <td align="center" width="20%" rowspan=4>你好 : ${msg.nickname} ${msg.gender ? "帅哥" : "靓妹"} <br><br><img   
  77.       src="images/${msg.header_img}"> </td></tr>  
  78.   <tr>  
  79.     <td width="80%" height="100%">发表于: <fmt:formatDate value="${msg.pubTime}" pattern="yyyy-MM-dd HH:mm:ss"/>   <img   
  80.       src="images/8_online.gif" border=0> <a href="mailto:${msg.email}"><img   
  81.       src="images/email.gif" border=0></a> <img src="images/ip.gif"   
  82.       border=0> 来自:${msg.ip}</td></tr>  
  83.   <tr>  
  84.     <td>${msg.content}</td></tr>  
  85.   <tr>  
  86.     <td><font color=#ff0000>管理员回复:</font> </td></tr>  
  87. </c:forEach>  
  88.    
  89. </tbody></table><!--留言列表显示结束-->  
  90.     <!--分页链接 -->  
  91.     <myTag:pager pageSize="${pm.pageSize}" pageNo="${pm.pageNo}" url="index.action" recordCount="${pm.recordCount}"/>  
  92.     <!--分页链接结束 -->  
  93. </body></html>  

下面就简单学习下Struts2+Hibernate的整合。

其实就七个步骤:

第一步:添加所需的jar包。

第二步:创建实体类以及对应的映射文件。

第三步:配置hibernate.cfg.xml配置文件。

第四步:配置struts.xml配置文件。

第五步:创建相应的action。

第六步:在web.xml中配置启动Struts2框架的过滤器。

第七步:编写JSP显示页面。

---------------------------------------------------------------------------------------------------------------------------

具体细节及代码如下(代码仅供参考):

第一步:jar包的添加这里不多说。

第二步:

实体类Message.java

  1. /** 
  2.  *  ClassName: Message.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.domain;  
  9.   
  10. import java.io.Serializable;  
  11. import java.util.Date;  
  12.   
  13. /** 
  14.  * 留言实体类 
  15.  *  
  16.  * @author yjd 
  17.  */  
  18. public class Message implements Serializable {  
  19.   
  20.     private static final long serialVersionUID = 6617253915349620625L;  
  21.     private Integer id; // OID   
  22.     private String nickname; // 昵称   
  23.     private boolean gender; // 性别   
  24.     private String header_img; // 头像   
  25.     private String qq; // qq   
  26.     private String email; // 邮箱号   
  27.     private String content; // 留言内容   
  28.     private String ip; // 发布者的IP地址   
  29.     private Date pubTime; // 留言时间   
  30.     private String reply;// 管理员回复内容   
  31.     private Date replyTime; // 回复时间   
  32.   
  33.     public Integer getId() {  
  34.         return id;  
  35.     }  
  36.   
  37.     public void setId(Integer id) {  
  38.         this.id = id;  
  39.     }  
  40.   
  41.     public String getNickname() {  
  42.         return nickname;  
  43.     }  
  44.   
  45.     public void setNickname(String nickname) {  
  46.         this.nickname = nickname;  
  47.     }  
  48.   
  49.     public boolean isGender() {  
  50.         return gender;  
  51.     }  
  52.   
  53.     public void setGender(boolean gender) {  
  54.         this.gender = gender;  
  55.     }  
  56.   
  57.     public String getHeader_img() {  
  58.         return header_img;  
  59.     }  
  60.   
  61.     public void setHeader_img(String headerImg) {  
  62.         header_img = headerImg;  
  63.     }  
  64.   
  65.     public String getQq() {  
  66.         return qq;  
  67.     }  
  68.   
  69.     public void setQq(String qq) {  
  70.         this.qq = qq;  
  71.     }  
  72.   
  73.     public String getEmail() {  
  74.         return email;  
  75.     }  
  76.   
  77.     public void setEmail(String email) {  
  78.         this.email = email;  
  79.     }  
  80.   
  81.     public String getContent() {  
  82.         return content;  
  83.     }  
  84.   
  85.     public void setContent(String content) {  
  86.         this.content = content;  
  87.     }  
  88.   
  89.     public String getIp() {  
  90.         return ip;  
  91.     }  
  92.   
  93.     public void setIp(String ip) {  
  94.         this.ip = ip;  
  95.     }  
  96.   
  97.     public Date getPubTime() {  
  98.         return pubTime;  
  99.     }  
  100.   
  101.     public void setPubTime(Date pubTime) {  
  102.         this.pubTime = pubTime;  
  103.     }  
  104.   
  105.     public String getReply() {  
  106.         return reply;  
  107.     }  
  108.   
  109.     public void setReply(String reply) {  
  110.         this.reply = reply;  
  111.     }  
  112.   
  113.     public Date getReplyTime() {  
  114.         return replyTime;  
  115.     }  
  116.   
  117.     public void setReplyTime(Date replyTime) {  
  118.         this.replyTime = replyTime;  
  119.     }  
  120.   
  121.     @Override  
  122.     public String toString() {  
  123.         return "Message [content=" + content + ", email=" + email + ", gender="  
  124.                 + gender + ", header_img=" + header_img + ", id=" + id  
  125.                 + ", ip=" + ip + ", nickname=" + nickname + ", pubTime="  
  126.                 + pubTime + ", qq=" + qq + "]";  
  127.     }  
  128.   
  129. }  
/**
 *  ClassName: Message.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.domain;

import java.io.Serializable;
import java.util.Date;

/**
 * 留言实体类
 * 
 * @author yjd
 */
public class Message implements Serializable {

	private static final long serialVersionUID = 6617253915349620625L;
	private Integer id; // OID
	private String nickname; // 昵称
	private boolean gender; // 性别
	private String header_img; // 头像
	private String qq; // qq
	private String email; // 邮箱号
	private String content; // 留言内容
	private String ip; // 发布者的IP地址
	private Date pubTime; // 留言时间
	private String reply;// 管理员回复内容
	private Date replyTime; // 回复时间

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getNickname() {
		return nickname;
	}

	public void setNickname(String nickname) {
		this.nickname = nickname;
	}

	public boolean isGender() {
		return gender;
	}

	public void setGender(boolean gender) {
		this.gender = gender;
	}

	public String getHeader_img() {
		return header_img;
	}

	public void setHeader_img(String headerImg) {
		header_img = headerImg;
	}

	public String getQq() {
		return qq;
	}

	public void setQq(String qq) {
		this.qq = qq;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public String getIp() {
		return ip;
	}

	public void setIp(String ip) {
		this.ip = ip;
	}

	public Date getPubTime() {
		return pubTime;
	}

	public void setPubTime(Date pubTime) {
		this.pubTime = pubTime;
	}

	public String getReply() {
		return reply;
	}

	public void setReply(String reply) {
		this.reply = reply;
	}

	public Date getReplyTime() {
		return replyTime;
	}

	public void setReplyTime(Date replyTime) {
		this.replyTime = replyTime;
	}

	@Override
	public String toString() {
		return "Message [content=" + content + ", email=" + email + ", gender="
				+ gender + ", header_img=" + header_img + ", id=" + id
				+ ", ip=" + ip + ", nickname=" + nickname + ", pubTime="
				+ pubTime + ", qq=" + qq + "]";
	}

}

实体类映射文件Message.hbm.xml.

  1. <!DOCTYPE hibernate-mapping PUBLIC  
  2.         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3.         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  4.   
  5. <hibernate-mapping>  
  6.     <class name="com.yjd.nb.domain.Message" table="msg">  
  7.         <id name="id" column="id">  
  8.             <generator class="native" />  
  9.         </id>  
  10.   
  11.         <property name="nickname" />  
  12.         <property name="gender" />  
  13.         <property name="header_img" />  
  14.         <property name="qq" />  
  15.         <property name="email" />  
  16.         <property name="ip" />  
  17.         <property name="content" />  
  18.         <property name="pubTime" column="pub_time" />  
  19.         <property name="reply" />  
  20.         <property name="replyTime" column="reply_time" />  
  21.     </class>  
  22. </hibernate-mapping>  
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
	<class name="com.yjd.nb.domain.Message" table="msg">
		<id name="id" column="id">
			<generator class="native" />
		</id>

		<property name="nickname" />
		<property name="gender" />
		<property name="header_img" />
		<property name="qq" />
		<property name="email" />
		<property name="ip" />
		<property name="content" />
		<property name="pubTime" column="pub_time" />
		<property name="reply" />
		<property name="replyTime" column="reply_time" />
	</class>
</hibernate-mapping>

第三步:Hibernate配置文件hibernate.cfg.xml.

  1. <!DOCTYPE hibernate-configuration PUBLIC  
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  3.     "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">  
  4.   
  5. <hibernate-configuration>  
  6. <session-factory>  
  7.     <!-- 数据库的连接参数配置 -->  
  8.     <property name="hibernate.connection.driver_class">  
  9.         com.mysql.jdbc.Driver  
  10.     </property>  
  11.     <property name="hibernate.connection.url">  
  12.         jdbc:mysql:///s2h-model  
  13.     </property>  
  14.     <property name="hibernate.connection.username">root</property>  
  15.     <property name="hibernate.connection.password">root</property>  
  16.   
  17.     <!-- 数据库方言 -->  
  18.     <property name="hibernate.dialect">  
  19.         org.hibernate.dialect.MySQLDialect  
  20.     </property>  
  21.   
  22.     <!-- c3p0连接池的配置 -->  
  23.     <property name="connection.provider_class">  
  24.         org.hibernate.connection.C3P0ConnectionProvider  
  25.     </property>  
  26.     <property name="hibernate.c3p0.min_size">5</property>  
  27.     <property name="hibernate.c3p0.max_size">30</property>  
  28.     <property name="hibernate.c3p0.timeout">1800</property>  
  29.     <property name="hibernate.c3p0.max_statements">50</property>  
  30.   
  31.     <!-- 其它配置 -->  
  32.     <property name="hbm2ddl.auto">update</property>  
  33.     <property name="show_sql">true</property>  
  34.     <!-- <property name="format_sql">true</property> -->  
  35.   
  36.     <!-- 注册映射文件 -->  
  37.     <mapping resource="com/yjd/nb/domain/Message.hbm.xml" />  
  38.   
  39. </session-factory>  
  40. </hibernate-configuration>  
<!DOCTYPE hibernate-configuration PUBLIC
	"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
	"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>
	<!-- 数据库的连接参数配置 -->
	<property name="hibernate.connection.driver_class">
		com.mysql.jdbc.Driver
	</property>
	<property name="hibernate.connection.url">
		jdbc:mysql:///s2h-model
	</property>
	<property name="hibernate.connection.username">root</property>
	<property name="hibernate.connection.password">root</property>

	<!-- 数据库方言 -->
	<property name="hibernate.dialect">
		org.hibernate.dialect.MySQLDialect
	</property>

	<!-- c3p0连接池的配置 -->
	<property name="connection.provider_class">
		org.hibernate.connection.C3P0ConnectionProvider
	</property>
	<property name="hibernate.c3p0.min_size">5</property>
	<property name="hibernate.c3p0.max_size">30</property>
	<property name="hibernate.c3p0.timeout">1800</property>
	<property name="hibernate.c3p0.max_statements">50</property>

	<!-- 其它配置 -->
	<property name="hbm2ddl.auto">update</property>
	<property name="show_sql">true</property>
	<!-- <property name="format_sql">true</property> -->

	<!-- 注册映射文件 -->
	<mapping resource="com/yjd/nb/domain/Message.hbm.xml" />

</session-factory>
</hibernate-configuration>



 

第四步:Struts2配置文件struts.xml.

  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.1.dtd">  
  5. <struts>  
  6.     <!--  
  7.         在struts.xml文件中可以使用<constant>标记来对default.properties中的常量属性做覆盖性配置,最常更改的几个常量属性是:  
  8.         1.struts.i18n.encoding=UTF-8:请求消息的编码方式  
  9.         2.struts.action.extension=action:指定被struts2处理的请求后缀类型。多个用逗号隔开。如:action,do,go  
  10.         3.struts.configuration.xml.reload=false:当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开  
  11.         4.struts.devMode=false:是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开  
  12.         5.struts.serve.static.browserCache=true:设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭。  
  13.         6.struts.objectFactory=spring:指定由spring负责action对象的创建  
  14.         7.struts.enable.SlashesInActionNames=false:启用Action的name是否支持斜线(/)  
  15.         8.struts.enable.DynamicMethodInvocation=false:启用动态方法调用  
  16.         9.struts.ui.theme=simple:UI主题类型  
  17.     -->  
  18.     <constant name="struts.action.extension" value="action,do,htm" />  
  19.     <constant name="struts.configuration.xml.reload" value="true" />  
  20.     <constant name="struts.devMode" value="false" />  
  21.     <constant name="struts.serve.static.browserCache" value="false" />  
  22.   
  23.     <!-- Struts2以package形式管理Action的配置 -->  
  24.     <!--  
  25.         package常用的属性:  
  26.         1.name:包名,作为被其它包引用的标识。必须的。实际应用中,应该把一组业务功能相关的Action放在同一个包下。  
  27.         2.extends:指定要扩展的包名。一般会继承自struts-default包。struts-default包是struts2内置的,它定义了struts2内部的众多拦截器和Result类型。  
  28.         3.namespace:指定名称空间。Struts2中Action的请求URI映射由namespace和action名称两部分组成。如果不指定该属性,默认的命名空间为""(空字符串)。  
  29.         4.abstract:声明包为抽象的。抽象包中不能配置action。  
  30.     -->  
  31.     <package name="front" namespace="/" extends="struts-default">  
  32.         <action name="index" class="com.yjd.nb.web.action.IndexAction">  
  33.             <result>/main.jsp</result>  
  34.         </action>  
  35.     </package>  
  36.     <package name="front.msgOpt" namespace="/msg" extends="struts-default">  
  37.         <action name="add" class="com.yjd.nb.web.action.MsgAction"  
  38.             method="add">  
  39.             <result name="list" type="redirect">/index.action</result>  
  40.         </action>  
  41.     </package>  
  42. </struts>  
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
    "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
	<!--
		在struts.xml文件中可以使用<constant>标记来对default.properties中的常量属性做覆盖性配置,最常更改的几个常量属性是:
		1.struts.i18n.encoding=UTF-8:请求消息的编码方式
		2.struts.action.extension=action:指定被struts2处理的请求后缀类型。多个用逗号隔开。如:action,do,go
		3.struts.configuration.xml.reload=false:当struts.xml改动后,是否重新加载。默认值为false(生产环境下使用),开发阶段最好打开
		4.struts.devMode=false:是否使用struts的开发模式。开发模式会有更多的调试信息。默认值为false(生产环境下使用),开发阶段最好打开
		5.struts.serve.static.browserCache=true:设置浏览器是否缓存静态内容。默认值为true(生产环境下使用),开发阶段最好关闭。
		6.struts.objectFactory=spring:指定由spring负责action对象的创建
		7.struts.enable.SlashesInActionNames=false:启用Action的name是否支持斜线(/)
		8.struts.enable.DynamicMethodInvocation=false:启用动态方法调用
		9.struts.ui.theme=simple:UI主题类型
	-->
	<constant name="struts.action.extension" value="action,do,htm" />
	<constant name="struts.configuration.xml.reload" value="true" />
	<constant name="struts.devMode" value="false" />
	<constant name="struts.serve.static.browserCache" value="false" />

	<!-- Struts2以package形式管理Action的配置 -->
	<!--
		package常用的属性:
		1.name:包名,作为被其它包引用的标识。必须的。实际应用中,应该把一组业务功能相关的Action放在同一个包下。
		2.extends:指定要扩展的包名。一般会继承自struts-default包。struts-default包是struts2内置的,它定义了struts2内部的众多拦截器和Result类型。
		3.namespace:指定名称空间。Struts2中Action的请求URI映射由namespace和action名称两部分组成。如果不指定该属性,默认的命名空间为""(空字符串)。
		4.abstract:声明包为抽象的。抽象包中不能配置action。
	-->
	<package name="front" namespace="/" extends="struts-default">
		<action name="index" class="com.yjd.nb.web.action.IndexAction">
			<result>/main.jsp</result>
		</action>
	</package>
	<package name="front.msgOpt" namespace="/msg" extends="struts-default">
		<action name="add" class="com.yjd.nb.web.action.MsgAction"
			method="add">
			<result name="list" type="redirect">/index.action</result>
		</action>
	</package>
</struts>


第五步:创建action类。

跳转到首页的action:

  1. /** 
  2.  *  ClassName: IndexAction.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.web.action;  
  9.   
  10. import org.apache.struts2.ServletActionContext;  
  11.   
  12. import com.opensymphony.xwork2.ActionSupport;  
  13. import com.yjd.domain.common.PageModel;  
  14. import com.yjd.nb.domain.Message;  
  15. import com.yjd.nb.service.MessageService;  
  16.   
  17. /** 
  18.  * 首页的请求处理类 
  19.  *  
  20.  * @author yjd 
  21.  */  
  22. public class IndexAction extends ActionSupport {  
  23.     private static final long serialVersionUID = -3634083788212536690L;  
  24.     private MessageService messageService = new MessageService();  
  25.     private int pageNo = 1;  
  26.     private int pageSize = 10;  
  27.   
  28.     public String execute() {  
  29.         PageModel<Message> pm = messageService.findByPage(pageNo, pageSize);  
  30.   
  31.         ServletActionContext.getRequest().setAttribute("pm", pm);  
  32.         // ActionContext.getContext().put("pm", pm);   
  33.         return SUCCESS;  
  34.     }  
  35.   
  36.     public MessageService getMessageService() {  
  37.         return messageService;  
  38.     }  
  39.   
  40.     public void setMessageService(MessageService messageService) {  
  41.         this.messageService = messageService;  
  42.     }  
  43.   
  44.     public int getPageNo() {  
  45.         return pageNo;  
  46.     }  
  47.   
  48.     public void setPageNo(int pageNo) {  
  49.         this.pageNo = pageNo;  
  50.     }  
  51.   
  52.     public int getPageSize() {  
  53.         return pageSize;  
  54.     }  
  55.   
  56.     public void setPageSize(int pageSize) {  
  57.         this.pageSize = pageSize;  
  58.     }  
  59. }  
/**
 *  ClassName: IndexAction.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.web.action;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.yjd.domain.common.PageModel;
import com.yjd.nb.domain.Message;
import com.yjd.nb.service.MessageService;

/**
 * 首页的请求处理类
 * 
 * @author yjd
 */
public class IndexAction extends ActionSupport {
	private static final long serialVersionUID = -3634083788212536690L;
	private MessageService messageService = new MessageService();
	private int pageNo = 1;
	private int pageSize = 10;

	public String execute() {
		PageModel<Message> pm = messageService.findByPage(pageNo, pageSize);

		ServletActionContext.getRequest().setAttribute("pm", pm);
		// ActionContext.getContext().put("pm", pm);
		return SUCCESS;
	}

	public MessageService getMessageService() {
		return messageService;
	}

	public void setMessageService(MessageService messageService) {
		this.messageService = messageService;
	}

	public int getPageNo() {
		return pageNo;
	}

	public void setPageNo(int pageNo) {
		this.pageNo = pageNo;
	}

	public int getPageSize() {
		return pageSize;
	}

	public void setPageSize(int pageSize) {
		this.pageSize = pageSize;
	}
}

实体操作action:

  1. /** 
  2.  *  ClassName: MsgAction.java 
  3.  *  Created on 2011 
  4.  *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved. 
  5.  *  site: http://hi.youkuaiyun.com/tjcyjd 
  6.  *  email: 908599713@qq.com 
  7.  */  
  8. package com.yjd.nb.web.action;  
  9.   
  10. import java.util.Date;  
  11.   
  12. import org.apache.struts2.ServletActionContext;  
  13.   
  14. import com.opensymphony.xwork2.ActionSupport;  
  15. import com.yjd.nb.domain.Message;  
  16. import com.yjd.nb.service.MessageService;  
  17.   
  18. /** 
  19.  * 前台针对Msg操作的处理类 
  20.  *  
  21.  * @author yjd 
  22.  */  
  23. public class MsgAction extends ActionSupport {  
  24.     private static final long serialVersionUID = -5736885633645314440L;  
  25.     private MessageService messageService = new MessageService();  
  26.     private Message msg;  
  27.   
  28.     // 添加实体   
  29.     public String add() {  
  30.         msg.setIp(ServletActionContext.getRequest().getRemoteAddr());  
  31.         msg.setPubTime(new Date());  
  32.   
  33.         messageService.add(msg);  
  34.         return "list";  
  35.     }  
  36.   
  37.     public Message getMsg() {  
  38.         return msg;  
  39.     }  
  40.   
  41.     public void setMsg(Message msg) {  
  42.         this.msg = msg;  
  43.     }  
  44.   
  45. }  
/**
 *  ClassName: MsgAction.java
 *  Created on 2011
 *  Copyrights 2011 hi.youkuaiyun.com/tjcyjd All rights reserved.
 *  site: http://hi.youkuaiyun.com/tjcyjd
 *  email: 908599713@qq.com
 */
package com.yjd.nb.web.action;

import java.util.Date;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;
import com.yjd.nb.domain.Message;
import com.yjd.nb.service.MessageService;

/**
 * 前台针对Msg操作的处理类
 * 
 * @author yjd
 */
public class MsgAction extends ActionSupport {
	private static final long serialVersionUID = -5736885633645314440L;
	private MessageService messageService = new MessageService();
	private Message msg;

	// 添加实体
	public String add() {
		msg.setIp(ServletActionContext.getRequest().getRemoteAddr());
		msg.setPubTime(new Date());

		messageService.add(msg);
		return "list";
	}

	public Message getMsg() {
		return msg;
	}

	public void setMsg(Message msg) {
		this.msg = msg;
	}

}


第六步:在web.xml中配置启动Struts2框架的过滤器。

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.4"   
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
  6.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  7.       
  8.     <filter>  
  9.         <filter-name>struts2</filter-name>  
  10.         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
  11.     </filter>  
  12.       
  13.     <filter-mapping>  
  14.         <filter-name>struts2</filter-name>  
  15.         <url-pattern>/*</url-pattern>  
  16.     </filter-mapping>  
  17.       
  18.   <welcome-file-list>  
  19.     <welcome-file>index.jsp</welcome-file>  
  20.   </welcome-file-list>  
  21. </web-app>  
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
	
	<filter>
		<filter-name>struts2</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>struts2</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


第七步:编写JSP显示页面。

首页跳转index.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%--<jsp:forward page="index.action"/> --%>  
  3. <meta http-equiv="refresh" content="0;url=index.action" />  
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%--<jsp:forward page="index.action"/> --%>
<meta http-equiv="refresh" content="0;url=index.action" />

主页:main.jsp

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
  2. <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
  3. <%@taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>  
  4. <%@taglib uri="http://hi.youkuaiyun.com/tjcyjd/tags" prefix="myTag" %>  
  5. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
  6. <html><head><title>在线留言系统</title>  
  7. <meta http-equiv=content-type content="text/html; charset=UTF-8">  
  8. <link href="images/style.css" type=text/css rel=stylesheet></link>  
  9. <style type="text/css">  
  10. body{font-size: 12px}  
  11. table{font-size: 12px}  
  12. a{font-size:12px}  
  13. .current{font-size:12px;}  
  14. </style>  
  15.   
  16. </head>  
  17. <body><!--留言表单 -->  
  18. <form name=form1 action="msg/add.action" method=post>  
  19. <table class=tab cellspacing=1 align=center border=0>  
  20.   <tbody>  
  21.   <tr>  
  22.     <td class=title background=images/titlebg.jpg colspan=2   
  23.       height=25><span>请 签 写 留 言</span> </td></tr>  
  24.   <tr>  
  25.     <td align=right width="20%">您的称呼: </td>  
  26.     <td width="80%"><input id="username" maxlength=50 name="msg.nickname"/> </td></tr>  
  27.   <tr>  
  28.     <td align=right width="20%">您的性别: </td>  
  29.     <td width="80%"><input id=sex type=radio value="true" name="msg.gender">   
  30.       男    <input type=radio checked value="false" name="msg.gender"> 女   
  31.   </td></tr>  
  32.   <tr>  
  33.     <td align=right>选择头像: </td>  
  34.     <td><select id=image name="msg.header_img"> <option   
  35.         value=1.gif selected>1.gif</option> <option   
  36.         value=2.gif>2.gif</option> <option   
  37.         value=3.gif>3.gif</option> <option   
  38.         value=4.gif>4.gif</option> <option   
  39.         value=5.gif>5.gif</option> <option   
  40.         value=6.gif>6.gif</option> <option   
  41.         value=7.gif>7.gif</option> <option   
  42.         value=8.gif>8.gif</option> <option   
  43.         value=9.gif>9.gif</option> <option   
  44.         value=10.gif>10.gif</option> <option   
  45.         value=11.gif>11.gif</option> <option   
  46.         value=12.gif>12.gif</option> <option   
  47.         value=13.gif>13.gif</option> <option   
  48.         value=14.gif>14.gif</option> <option   
  49.         value=15.gif>15.gif</option> <option   
  50.         value=16.gif>16.gif</option> <option   
  51.         value=17.gif>17.gif</option> <option   
  52.         value=18.gif>18.gif</option> <option   
  53.         value=19.gif>19.gif</option> <option   
  54.         value=20.gif>20.gif</option></select> </td></tr>  
  55.   <tr>  
  56.     <td align=right>您的qq: </td>  
  57.     <td><input id=qq maxlength=50 name="msg.qq"> </td></tr>  
  58.   <tr>  
  59.     <td align=right>您的邮箱: </td>  
  60.     <td><input id=email maxlength=50 name="msg.email"> </td></tr>  
  61.   <tr>  
  62.     <td align=right>留言内容: </td>  
  63.     <td><textarea id=content name="msg.content" rows=5 cols=50></textarea>   
  64.   </td></tr>  
  65.   <tr>  
  66.     <td align="center" colspan=2><input type=submit value=提交>       
  67. <input type=reset value=重置> </td></tr></tbody></table></form><!--留言表单结束 --><!--留言列表 -->  
  68. <table class=tab cellspacing=1 align=center border=0>  
  69.   <tbody>  
  70.   <tr>  
  71.     <td class=title background=images/titlebg.jpg colspan=2   
  72.       height=25><span>留 言 列 表【<a href="login.jsp">管理登录</a>】 </span></td></tr>  
  73.   
  74. <c:forEach items="${pm.data}" var="msg">  
  75.   <tr>  
  76.     <td align="center" width="20%" rowspan=4>你好 : ${msg.nickname} ${msg.gender ? "帅哥" : "靓妹"} <br><br><img   
  77.       src="images/${msg.header_img}"> </td></tr>  
  78.   <tr>  
  79.     <td width="80%" height="100%">发表于: <fmt:formatDate value="${msg.pubTime}" pattern="yyyy-MM-dd HH:mm:ss"/>   <img   
  80.       src="images/8_online.gif" border=0> <a href="mailto:${msg.email}"><img   
  81.       src="images/email.gif" border=0></a> <img src="images/ip.gif"   
  82.       border=0> 来自:${msg.ip}</td></tr>  
  83.   <tr>  
  84.     <td>${msg.content}</td></tr>  
  85.   <tr>  
  86.     <td><font color=#ff0000>管理员回复:</font> </td></tr>  
  87. </c:forEach>  
  88.    
  89. </tbody></table><!--留言列表显示结束-->  
  90.     <!--分页链接 -->  
  91.     <myTag:pager pageSize="${pm.pageSize}" pageNo="${pm.pageNo}" url="index.action" recordCount="${pm.recordCount}"/>  
  92.     <!--分页链接结束 -->  
  93. </body></html>  
本系统采用Python编程语言中的Flask框架作为基础架构,实现了一个面向二手商品交易的网络平台。该平台具备完整的前端展示后端管理功能,适合用作学术研究、课程作业或个人技术能力训练的实际案例。Flask作为一种简洁高效的Web开发框架,能够以模块化方式支持网站功能的快速搭建。在本系统中,Flask承担了核心服务端的角色,主要完成请求响应处理、数据运算及业务流程控制等任务。 开发工具选用PyCharm集成环境。这款由JetBrains推出的Python专用编辑器集成了智能代码提示、错误检测、程序调试自动化测试等多种辅助功能,显著提升了软件编写维护的效率。通过该环境,开发者可便捷地进行项目组织问题排查。 数据存储部分采用MySQL关系型数据库管理系统,用于保存会员资料、产品信息及订单历史等内容。MySQL具备良好的稳定性和处理性能,常被各类网络服务所采用。在Flask体系内,一般会配合SQLAlchemy这一对象关系映射工具使用,使得开发者能够通过Python类对象直接管理数据实体,避免手动编写结构化查询语句。 缓存服务由Redis内存数据库提供支持。Redis是一种支持持久化存储的开放源代码内存键值存储系统,可作为高速缓存、临时数据库或消息代理使用。在本系统中,Redis可能用于暂存高频访问的商品内容、用户登录状态等动态信息,从而加快数据获取速度,降低主数据库的查询负载。 项目归档文件“Python_Flask_ershou-master”预计包含以下关键组成部分: 1. 应用主程序(app.py):包含Flask应用初始化代码及请求路径映射规则。 2. 数据模型定义(models.py):通过SQLAlchemy声明数据库表对应的类结构。 3. 视图控制器(views.py):包含处理各类网络请求并生成回复的业务函数,涵盖账户管理、商品展示、订单处理等操作。 4. 页面模板目录(templates):存储用于动态生成网页的HTML模板文件。 5. 静态资源目录(static):存放层叠样式表、客户端脚本及图像等固定资源。 6. 依赖清单(requirements.txt):记录项目运行所需的所有第三方Python库及其版本号,便于环境重建。 7. 参数配置(config.py):集中设置数据库连接参数、缓存服务器地址等运行配置。 此外,项目还可能包含自动化测试用例、数据库结构迁移工具以及运行部署相关文档。通过构建此系统,开发者能够系统掌握Flask框架的实际运用,理解用户身份验证、访问控制、数据持久化、界面动态生成等网络应用关键技术,同时熟悉MySQL数据库运维Redis缓存机制的应用方法。对于入门阶段的学习者而言,该系统可作为综合性的实践训练载体,有效促进Python网络编程技能的提升。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
在当代储能装置监控技术领域,精确测定锂离子电池的电荷存量(即荷电状态,SOC)是一项关键任务,它直接关系到电池运行的安全性、耐久性及整体效能。随着电动车辆产业的迅速扩张,业界对锂离子电池SOC测算的精确度稳定性提出了更为严格的标准。为此,构建一套能够在多样化运行场景及温度条件下实现高精度SOC测算的技术方案具有显著的实际意义。 本文介绍一种结合Transformer架构容积卡尔曼滤波(CKF)的混合式SOC测算系统。Transformer架构最初在语言处理领域获得突破性进展,其特有的注意力机制能够有效捕捉时间序列数据中的长期关联特征。在本应用中,该架构用于分析电池工作过程中采集的电压、电流温度等时序数据,从而识别电池在不同放电区间的动态行为规律。 容积卡尔曼滤波作为一种适用于非线性系统的状态估计算法,在本系统中负责对Transformer提取的特征数据进行递归融合实时推算,以持续更新电池的SOC值。该方法增强了系统在测量噪声干扰下的稳定性,确保了测算结果在不同环境条件下的可靠性。 本系统在多种标准驾驶循环(如BJDST、DST、FUDS、US06)及不同环境温度(0°C、25°C、45°C)下进行了验证测试,这些条件涵盖了电动车辆在实际使用中可能遇到的主要工况气候范围。实验表明,该系统在低温、常温及高温环境中,面对差异化的负载变化,均能保持较高的测算准确性。 随附文档中提供了该系统的补充说明、实验数据及技术细节,核心代码模型文件亦包含于对应目录中,可供进一步研究或工程部署使用。该融合架构不仅在方法层面具有创新性,同时展现了良好的工程适用性测算精度,对推进电池管理技术的进步具有积极意义。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
代码转载自:https://pan.quark.cn/s/9e296fe8986c 实验题目为“复杂模型机的设计实现”。 _1. 实验目的要求:目的:1. 熟练掌握并达成较为复杂的计算机原理。 2. 本实验增加了16条机器指令,全面运用所学的计算机原理知识,借助扩展的机器指令设计并编写程序,然后在CPU中执行所编写的程序。 要求:依照练习一和练习二的要求完成相应的操作,并上机进行调试和运行。 2. 实验方案:……实验报告的标题设定为“广东工业大学计组实验报告复杂模型机的设计实现六”,主要围绕计算机组成原理中的复杂模型机设计和实现展开。 实验的宗旨在于让学生深入理解和实际操作计算机原理,特别是通过增加16条机器指令,来全面运用所学知识设计程序,并在CPU中运行这些程序。 实验的具体要求包括:1. 掌握复杂的计算机工作原理,这要求学生不仅具备扎实的理论知识,还需要拥有将理论转化为实际操作的能力。 2. 实验中增加了16条机器指令,这涉及到计算机指令集的扩展和设计,可能包含算术运算、逻辑运算、数据传输和控制流程等指令。 3. 学生需要运用扩展的机器指令编写程序,并通过CPU进行运行和调试,这涉及到编程、汇编和CPU执行流程的理解。 4. 依照练习一和练习二的要求完成操作,这表明实验包含分阶段的练习任务,需要逐步完成并验证。 实验方案包括:1. 实验连线:保证硬件连接准确无误,这是任何电子实验的基础,对于计算机实验,这通常涵盖CPU、内存、输入/输出设备等组件的连接。 2. 实验程序:提供了范例程序,包括机器指令程序和微指令程序的微代码。 这部分内容展示了如何利用扩展的机器指令编写程序,以及对应的微指令实现,有助于理解计算机内部的低级操作。 在实验结果和数据处理部分,学生需要:1. 在程...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值