JavaWeb项目开发(三):SSH框架

使用SSH框架,完成“用户管理”模块的信息列表展示功能。

1、Struts配置

SSH的所有jar包下载链接: https://pan.baidu.com/s/1c1Rtenu 密码: 4ft6

引入Struts 必须的jar包,放到WEB-INF/lib目录下。如下图所示:


修改WEB-INF下的web.xml文件,增加struts2的配置

<!-- 定义核心控制器 -->
  <filter>
<filter-name>StrutsPrepareAndExecuteFilter</filter-name>
 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
  </filter>
  <filter-mapping>
     <filter-name>StrutsPrepareAndExecuteFilter</filter-name>
     <url-pattern>*.action</url-pattern>
  </filter-mapping>
  <!-- 目的:直接访问页面时,可以解析struts2标签 -->
  <filter-mapping>
     <filter-name>StrutsPrepareAndExecuteFilter</filter-name>
     <url-pattern>*.jsp</url-pattern>
  </filter-mapping>

添加struts配置文件,新建Struts.xml,并在文件中启动动态方法访问,并且定义包,具体内容如下:

<struts>
   <!-- 设置Struts2常量 -->
   <!-- 启用动态方法访问 -->
   <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
   
   <!-- 定义包 -->
   <package namespace="/" name="default" extends="struts-default"> 
   </package>
</struts>


2、Hibernate配置

引入Hibernate的jar包,放大WEB-INF/lib目录下。

   创建Hibernate配置文件,在src下新建TdemoDept.hbm.xml作为hibernate连接数据库的配置文件。具体实现内容如下:

<hibernate-mapping>
   <class name="com.demo.database.data.TDemoUser" table="t_demo_user">
      <id name="userId" type="java.lang.Integer">
         <column name="user_id"></column>
         <!-- ID生成策略      采用数据库本地的自动增长 -->
         <generator class="native"></generator>
      </id>
      <property name="userName" type="java.lang.String">
          <column name="user_name"></column>
      </property>
      <property name="userPassword" type="java.lang.String">
          <column name="user_password"></column>
      </property>
      <property name="userGender" type="java.lang.String">
          <column name="user_gender"></column>
      </property>
      <property name="userRole" type="java.lang.String">
          <column name="user_role"></column>
      </property>
      <property name="userEmail" type="java.lang.String">
          <column name="user_email"></column>
      </property>
      <property name="userTelphone" type="java.lang.String">
          <column name="user_telphone"></column>
      </property>
      <property name="userBirthday" type="java.sql.Date">
          <column name="user_birthday"></column>
      </property>
      <property name="isdel" type="java.lang.String">
          <column name="isdel"></column>
      </property>
      <property name="opertime" type="java.sql.Timestamp">
          <column name="opertime"></column>
      </property>
   </class>
</hibernate-mapping>

3、Spring配置

引入Spring的jar包,放大WEB-INF/lib目录下。

   修改web.xml文件,对Spring进行配置,内容如下:

<!-- 上下文参数 -->
  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
  </context-param>

接着我们在src下创建applicationContext.xml文件,并给这个文件加上Spring的标头:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
       http://www.springframework.org/schema/beans 
       http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
       http://www.springframework.org/schema/tx 
       http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context-4.0.xsd
       http://www.springframework.org/schema/aop 
       http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">


4、整合SSH

Spring和Sturts的整合其实就是吧Struts的Action类交给Spring来管理。配置web.xml,在文件中创建上下文加载监听器,具体实现内容如下:

<!-- 创建上下文加载监听器 -->
  <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

Spring对Hibernate的整合,主要是对Hibernate中的session进行管理,包括Session的创建、提交、关闭整个生命周期。我们在applicationContext.xml中配置如下内容:

<!-- web项目中,接入Hibernate框架 -->
   <!-- 定义数据源Bean -->
   <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource">
   		<!--  驱动 在新建数据库,-->
       <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
       <property name="url" value="jdbc:mysql://localhost:3306/demo"></property>
       <property name="username" value="root"></property>
       <property name="password" value="123"></property>
   </bean>
   <!-- 定义会话工厂Bean -->
   <!-- 查询 新建类,超类 - localsess 查询-->
   <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
       <!-- 注入数据源 -->
       <property name="dataSource" ref="dataSource"></property>
       <!-- 设置映射文件路径 -->
       <!--  <property name="mappingLocations" value="classpath:com/demo/database/idao/*.hbm.xml"></property> s-->
       <!-- 设置Hibernate相关属性 -->
       <property name="hibernateProperties">
          <props>
             <!-- SQL方言,http://blog.csdn.net/tfy1332/article/details/20608489 -->
             <!-- 超类查询MySQLDialect确定 内容 -->
             <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
             <!-- 设置数据库操作时 ,控制台打印SQL -->
             <prop key="hibernate.show_sql">true</prop>
          </props>
      </property>
      <property name="mappingLocations" value="classpath:com/demo/database/idao/*.hbm.xml"></property>
   </bean>
   
   <!-- 定义数据库访问公共Bean -->
   <bean id="idaoService" class="com.demo.database.idao.impl.DaoServiceImpl">
       <!-- 注入会话工厂Bean -->
       <property name="sessionFactory" ref="sessionFactory"></property>
   </bean>
   
   <!-- 定义业务Bean -->
   <bean id="iuserService" class="com.demo.services.impl.UserServiceImpl">
       <!-- 注入数据访问公共Bean -->
       <property name="idaoService" ref="idaoService"></property>
   </bean>

到这里为止SSH框架搭建完成,我们可以启动Tomcat服务器看是否成功启动服务。

控制台反应结果表示我们的SSH框架已经搭建成功,服务器已经成功开启。


5、方法声明和例表展现数据库用户信息。

在实现具体的功能之前,我们首先创建数据库访问公共接口类,该类中声明我们需要实现的全部功能的方法。实现内容如下:

public interface IDaoService {
	/* 查询数据 */
	public List<? extends Object> query(String hql) throws Exception;
	/*保存数据*/
	public void save(Object object) throws Exception;
/*修改数据*/
	public void update(Object object) throws Exception;
/*删除数据*/
	public void delete(Object...objects) throws Exception;
}

接着我们需要创建数据库访问公共具体实现类,并在后面的实验步骤中,对实验 要求实现的功能进行逐个实现。

同时我们还需要创建用户管理的业务接口类,在类中同样声明我们需要实现的全部功能的方法,后面会在业务接口类的具体实现类中逐个实现。具体内容如下:

public interface IUserService {
	/*查询所有用户数据*/
	public List<TDemoUser> query() throws Exception;
/*添加用户信息*/
	public void add(TDemoUser user) throws Exception;
/*删除用户信息*/
	public void delete(int...ids) throws Exception;
/*修改用户信息*/
   public void update(int...ids) throws Exception;
}

在数据库访问公共具体实现类DaoServiceImpl中获取会话Session并创建查询数据的对象等。具体的实现如下:

public List<? extends Object> query(String hql) throws Exception {
		// 获得会话Session
		Session session = getSession();
		// 创建查询数据的对象
		Query query = session.createQuery(hql);
		// 查询返回数据集合
		List<? extends Object> list = query.list();
		// 关闭session
		session.close();
		return list;
	}

接着在用户管理的业务具体实现类UserServiceImpl中,通过数据访问公共接口,查询用户数据。具体内容如下:

public List<TDemoUser> query() throws Exception {
				//通过数据访问公共接口,查询用户数据
		List<TDemoUser> list = (List<TDemoUser>) 
				  idaoService.query("from TDemoUser "
				  		+ "where isdel=0 order by opertime desc"); //from TDemoUser    HQL语句
		return list;
	}

最后在用户管理的业务控制器类UserAction中指明业务逻辑,具体内容如下

public String list() {
		try {
			//查询获得所有用户数据
			List<TDemoUser> list = iuserService.query();
			//数据添加Dao请求范围,数据转发给下一个视图页面
	ActionContext.getContext().getContextMap().put("list", list);
			return SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ERROR;
	}

此时查看navicat中数据库用户信息如下图所示:


我们通过利用刚才实现的功能,通过页面来访问数据库信息。点击“用户管理”便可出现数据库中的用户信息。


6、“用户管理/添加”功能实现

在数据库访问公共具体实现类DaoServiceImpl中实现sava()方法,实现对象与Session的绑定等。具体的实现如下:

public void save(Object object) throws Exception {Session session = getSession();// 开启事务Transaction tx = session.beginTransaction();// 对象与Session绑定session.save(object);// 提交事务tx.commit();// 关闭sessionsession.close();}


接着在用户管理的业务具体实现类UserServiceImpl中,实现add()方法,封装通用字段的数据,并访问数据库,保存新用户数据。具体内容如下:

public void add(TDemoUser user) throws Exception {
		//封装通用字段的数据
		user.setIsdel("0");
		user.setOpertime(new Timestamp(System.currentTimeMillis()));
		//访问数据库,保存新用户数据
		idaoService.save(user);
	}

最后在用户管理的业务控制器类UserAction中指明业务逻辑,通过业务接口,添加新用户。具体内容如下:

public String add() {
		//通过业务接口,添加新用户
		try {
			iuserService.add(user);
			return list();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ERROR;
	}

此时点击“用户管理”页面的“添加”按键。



在出现的“添加用户信息”页面中,输入新用户的信息,具体内容如下:


点击确定之后,页面返回“用户管理”,可以在用户列表中看到我们刚添加的用户,具体信息如下:


同时,我们回到navicat可视化工具,查看数据库的数据存储情况,可以看到数据库中也相应的添加了新建用户的相关信息。具体情况如下:



7、“用户管理/删除”功能实现

在数据库访问公共具体实现类DaoServiceImpl中实现delete()方法,对Id数据进行便利,循环绑定要删除的对象,选择对象之后进行数据的逻辑删除。具体的实现如下:

public void delete(Object... objects) throws Exception {
		Session session = getSession();
		Transaction tx = session.beginTransaction();
		// 遍历id数组,循环绑定要删除的对象
		for (Object object : objects) { 			    session.update(object); // 虚拟删除、逻辑删除
		}
		tx.commit();
		session.close();
	}

接着在用户管理的业务具体实现类UserServiceImpl中,实现delete()方法,遍历数组,查询获得用户的集合,通过修改isdel属性来实现逻辑删除,确保数据库一定的安全性等。具体内容如下:

public void delete(int... ids) throws Exception {
		//定义查询所有选中用户的HQL语句
		String hql = "from TDemoUser where userId in(";
		//遍历数组
		for(int i=0; i<ids.length; i++) {
			hql += ids[i];
			if(i<ids.length-1) {
				hql += ",";
			}
		}
		hql += ")";
		//查询获得用户的集合
		List<TDemoUser> list = (List<TDemoUser>) idaoService.query(hql);
		//遍历集合,修改isdel(是否删除)属性
		for(TDemoUser user: list) {
			user.setIsdel("1");
		}
		//获得用户的数组
		Object[] objects = list.toArray();
		//访问数据库删除用户
		idaoService.delete(objects);
	}

最后在用户管理的业务控制器类UserAction中指明业务逻辑。具体内容如下:

public String delete() {
		try {
			iuserService.delete(ids);
			return list();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ERROR;
	}

此时,我们再回到才优备内部系统的“用户管理”页面中,选中我们刚才新建的用户,点击“删除”按钮。


确认删除之后,页面自动刷新,再次出现的“用户管理”页面中,没有了我们刚才新建的用户信息。


此时,我们再回到navicate可视化工具页面查看数据库中信息的存储情况,可以看到的是,新建用户的信息仍然存在,只是isdel属性被设置为了1,实现了用户数据的逻辑删除。具体情况如下:



8、“用户管理/修改”功能实现

 再WEB-INF/admin/user路径下创建userupdate.jsp文件,具体实现内容和useradd.jsp文件类似不同的是相应路径。具体内容如下:

<div id="content">
			<form id="form1" name="form1" method="get" action="user!update.action">
</form>
</div>
修改userlist.jsp文件如下:

function update() {
		//获得选中记录的数量
		var count = $("input[name=ids]:checked").size();
		//判断是否选中一行记录,修改操作只能选中一行记录
		if (count != 1) {
			alert("请选中一条要修改的记录!");
			return;
		}
		//获得表单对象
		var form = $("#form2").get(0);
		//设置提交路径
		form.action = "admin/user/userupdate.jsp";
		//提交表单
		form.submit();
	}

修改用户管理的业务控制器UserAction类内容如下:

public String update() {
		try {
			iuserService.delete(ids);
			iuserService.add(user);
			return list();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return SUCCESS;
	}

回到“用户管理”页面,选择要进行修改的用户信息,点击确定。



在出现的“修改用户信息”页面中,输入最新的用户信息,具体内容如下:


点击确定保存更改信息,并再次返回用户例表。可以看到修改成功。


查看navicat页面,也可看到相应的修改内容已经得到了保存。





  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_Summer tree

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值