我的第一个ssh整合

经过了一个月的理解,尝试,纠结,痛苦,终于通过自己理解编出我的第一个SSH整合应用。
其实应用很简单,在web页面通过ID查找用户名。
其中比较难理解是Spring的bean注入。其实Struts和Hibernate都是比较死的东西。
Struts处理web的请求和相应,如struts.xml所示

<struts>
	<package name="default" extends="struts-default" namespace="/">
	<!-- extend继承struts一些默认的拦截器,这个不能不写,写错了也不行,我在里调了很久,很是郁闷。namespace命名空间其实也很重要,初学者也要注意 -->
		<action name="searchAction" class="SearchAction">
	<!--这里到了关键地方,此class非彼class。如果不用Spring管理,class可以写成“action.SearchAction”。
		但是现在用Spring管理,此class其实是一个bean的id -->
			<result name="success">categoryinfo.jsp</result>
		</action>
	</package>
</struts>
 

我理解SSH整合框架前前后后用了三个星期,可能买的书不好,学起来很麻烦。

个人觉得,最难理解是spring吧,因为spring不像struts,hibernate那样有具体的功能,它类似一个项目管理工具。我是从spring mvc 开始入手学习的,理解比较容易点。

配完了struts.xml 就要配置 applicationContext.xml

applicationContext.xml配置文件中其实就是一堆的<bean>,每个<bean>都对应一个java类

<bean>下的<property>元素就是java类中的属性,java类会提供set方法,spring正是用这个关系来管理的

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
	</bean>
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    	<property name="sessionFactory" ref="sessionFactory"> </property>
    </bean>   
	<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"></property>
	</bean>
	<!-- 上面三个bean 是spring提供的hibernate管理工具,使用时记住一定要导入spring-orm的包,这个包中提供了对hibernate的支持。 -->
	<!-- property 对应类中的属性,value 相当于在向类中的setter方法注值,注过值后的类就不是一个空的类了,就是一个有属性的类 -->
	<bean id="categoryDAO" class="dao.impl.CategoryDAOImpl">
		<property name="template" ref="hibernateTemplate"></property>
	</bean>
	<!-- 此处bean的被struts.xml中的action调用,调用的同时向action.SearchAction中注入categoryDao注值 -->
	<bean id="SearchAction" class="action.SearchAction" scope="prototype">
		<property name="categoryDAO" ref="categoryDAO"></property>
	</bean>

最核心的依然是web.xml文件,个人觉得配置web.xml文件的方法应该有很多种,作为初学者这种应该比较好理解。

<listener>和<context-param>的作用是什么我也解释不清楚,暂时这样配吧。应该是项目启动自动加载配置文件。

这里用struts配置文件的形式接受请求。符合请求条件的会被指派到指定的action中执行java代码。

 web.xml

<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener	</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>WEB-INF/applicationContext.xml</param-value>
	</context-param>
	
	<filter>
		<filter-name>struts</filter-name>
		<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>struts</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

action类,提供一个搜索功能,即根据ID搜索用户。

public class SearchAction extends ActionSupport {
	private CategoryDAO categoryDAO;
	public void setCategoryDAO(CategoryDAO categoryDAO) {
		this.categoryDAO = categoryDAO;
	}
	@Override
	public String execute() throws Exception {
		Integer id = Integer.valueOf(ServletActionContext.getRequest().getParameter("id"));
		Category category = categoryDAO.getById(id);
		ServletActionContext.getRequest().setAttribute("category", category);
		return SUCCESS;
	}
}
 

hibernate部分我没有对象映射文件,即**.hbm.xml,而是用了注解的方式配置。但是依然用了hibernate.cfg.xml,其实该文件也可以不用写,可以写在applicationConfig.xml中。

因为在applicationConfig.xml做了这样的配置

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
	</bean>

 所以spring配置会自动到classpath下找hibernate配置文件。

猜你喜欢

转载自haojun-du88.iteye.com/blog/1682515