引言
SSH网上商城完成了,现在回头通过一条线再理理。
SSH旅游路线
下边就从jsp开始,看SSH。
JSP站
jsp就是整个SSH的前台显示部分,跟.net的html页面一样。
jsp页面调用Action方法的两种方式:
1、在form表单里直接调用:
<form id="loginForm" action="${ pageContext.request.contextPath }/user_login.action" method="post" novalidate="novalidate">
在提交表单的时候就直接转到UserAction下调用login方法了。
2、有条件查询
<a href="${ pageContext.request.contextPath }/order_findByOid.action?oid=<s:property value="#order.oid" />">付款</a>
根据订单的id进行查询订单,将order的id传入OrderAction下的findByOid方法里。
另外,jsp还需要获取从Action传回来的值,一般是Action将值放进值栈里,然后在jsp页面直接从值栈里取就行了。
<s:property value="#order.total" />
Action站
Action一般首先得集成ActionSupport,并且实现ModelDriven,并使用ModelDriven
public class UserAction extends ActionSupport implements ModelDriven<User> {
// 模型驱动使用的对象
private User user = new User();
public User getModel() {
return user;
}
}
还需要注入Service
// 注入UserService
private UserService userService;
public void setUserService(UserService userService) {
this.userService = userService;
}
然后就可以开始写方法,调用Service层的方法
public String regist() {
// 判断验证码程序:
// 从session中获得验证码的随机值:
String checkcode1 = (String) ServletActionContext.getRequest()
.getSession().getAttribute("checkcode");
if(!checkcode.equalsIgnoreCase(checkcode1)){
this.addActionError("验证码输入错误!");
return "checkcodeFail";
}
userService.save(user);
this.addActionMessage("注册成功!请去邮箱激活!");
return "msg";
}
Service站
Service需要注意的两点是:
1、加事务:@Transactional
2、注入Dao然后就直接写调用Dao层的方法就行了。
// 用户登录的方法
public User login(User user) {
return userDao.login(user);
}
Dao站
Dao层主要用到hibernate进行增删改查操作,其中增删改都很简单
this.getHibernateTemplate().add(entity);//增加实体
this.getHibernateTemplate().update(entity);//修改实体
this.getHibernateTemplate().delete(entity);//删除实体
稍微难点的就是查询操作:
查询有三种,有参查询,无参查询和分页查询
//无参查询
String hql = "from User where code = ?";
List<User> list = this.getHibernateTemplate().find(hql,code);
//有参查询
String hql = "from User where username = ? and password = ? and state = ?";
List<User> list = this.getHibernateTemplate().find(hql, user.getUsername(),user.getPassword(),1);
//分页查询
String hql="from Order order by ordertime desc";
List<Order> list = this.getHibernateTemplate().execute(new PageHibernateCallback<Order>(hql, null, begin, limit));
Vo站
根据上边的旅游路线可以看出来Vo层就是.net里的model实体层,起到的作用就是传递数据。
Vo层里主要有两个部分:
1、实体
2、实体映射文件(hbm.xml)
Spring配置注入
Action和Service都涉及到了注入的问题,所以我们需要在spring进行配置。
在实现注入之前,需要先在spring里配置连接池以及hibernate的相关配置:
<!-- 引入外部属性文件 -->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 配置C3P0连接池: -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driver}"/>
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="user" value="${jdbc.user}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!-- Hibernate的相关信息 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 注入连接池 -->
<property name="dataSource" ref="dataSource"/>
<!-- 配置Hibernate的其他的属性 -->
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.connection.autocommit">false</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
</props>
</property>
<!-- 配置Hibernate的映射文件 -->
<property name="mappingResources">
<list>
<value>cn/itcast/shop/user/vo/User.hbm.xml</value>
<value>cn/itcast/shop/category/vo/Category.hbm.xml</value>
<value>cn/itcast/shop/product/vo/Product.hbm.xml</value>
<value>cn/itcast/shop/categorysecond/vo/CategorySecond.hbm.xml</value>
<value>cn/itcast/shop/order/vo/Order.hbm.xml</value>
<value>cn/itcast/shop/order/vo/OrderItem.hbm.xml</value>
<value>cn/itcast/shop/adminuser/vo/AdminUser.hbm.xml</value>
</list>
</property>
</bean>
配置hibernate的映射文件,将Vo层里的实体映射文件都放在这里。
然后开始注入的配置:
<!-- Action的配置 -->
<bean id="indexAction" class="cn.itcast.shop.index.action.IndexAction" scope="prototype">
<property name="categoryService" ref="categoryService"/>
</bean>
<!-- Service的配置 ===========================-->
<bean id="userService" class="cn.itcast.shop.user.service.UserService">
<property name="userDao" ref="userDao"/>
</bean>
<!-- Dao的配置 ===========================-->
<bean id="userDao" class="cn.itcast.shop.user.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
Bingo!
struct配置
在Action进行页面跳转的时候,都需要进行struct的配置。页面跳转分为两种:
1、直接跳转:
<action name="user_*" class="userAction" method="{1}">
<result name="registPage">/WEB-INF/jsp/regist.jsp</result>
</action>
2、重定向跳转页面:
<result name="loginSuccess" type="redirectAction">index</result>
总结
这样SSH的一条线就完成了!其实很简单嘛~~~继续其他知识点的总结咯!