`

三个JAVA文件完成你的MVC应用

阅读更多
只需要你三个JAVA类和两个配置文件,就可以完成你的MVC应用,我们就做一个示例吧。
非常报歉,因为老板在,所以前几天落下了这个BLOG,对不起了。

本文以一个登录为例。

第一个JAVA文件
/**============================================================
 * 版权: Antbee 版权所有 (c) 2002 - 2006
 * 文件: com.antbee.sysmanage.login.action.UserAction
 * 所含类: UserAction
 * 修改记录:
 * 日期                作者                内容
 * =============================================================
 * 2006-8-28            和巍雅             建立文件
 * ============================================================*/

package com.antbee.sysmanage.login.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.validator.DynaValidatorForm;
import com.antbee.hibernate.model.AirlineUserInformation;
import com.antbee.sysmanage.login.dao.UserDAO;

/**
 * <p>
 * </p>
 * 
 * <p>
 * Copyright: 版权所有 (c) 2002 - 2006
 * </p>
 * <p>
 * Company: antbee
 * </p>
 * 
 * @author @家军
 * @version 1.0
 */

public class UserAction extends DispatchAction {
	// 依赖注入
	private UserDAO userDAO;

	public UserDAO getUserDAO() {
		return userDAO;
	}

	public void setUserDAO(UserDAO userDAO) {
		this.userDAO = userDAO;
	}		

	/**
	 * 
	 * 用户登录
	 * 
	 * @param
	 * @return
	 * @throws
	 */
	public ActionForward Login(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		HttpSession session = request.getSession();
		DynaValidatorForm LoginActionForm = (DynaValidatorForm) form;
		AirlineUserInformation User = (AirlineUserInformation) LoginActionForm
				.get("User");
		if (User != null) {
			String MDpwd = CommonTools.encrypt(User.getPassword());
			if (userDAO.Login(User.getLoginName(), MDpwd)) {
				// 成功登录
				// 加载一些session
				AirlineUserInformation LegalUser = userDAO.GetUser(User
						.getLoginName());
				String LoginName = LegalUser.getLoginName();
				String UserName = LegalUser.getUserName();
				String UserId = LegalUser.getUserId().toString();
				String UserType = LegalUser.getUserType().toString();
				String DeptId = LegalUser.getAirlineDepartmentInformation()
						.getDepartmentId().toString();
				String DeptName = LegalUser.getAirlineDepartmentInformation().getDepartmentName();
				String RoleId = LegalUser.getSysRoleInfo().getRoleId()
						.toString();
				session.setAttribute("LoginName", LoginName);// 登录名
				session.setAttribute("UserName", UserName);// 用户姓名
				session.setAttribute("UserId", UserId);// 用户ID
				session.setAttribute("DeptId", DeptId);// 部门ID
				session.setAttribute("DeptName", DeptName);// 部门DeptName
				session.setAttribute("UserType", UserType);// 用户类别
				session.setAttribute("RoleId", RoleId);// 角色ID
				return mapping.findForward("Comein");
			}
		}
		request.setAttribute("UserMsg", "User.LawLess");
		return mapping.findForward("Fail");
	}

	/**
	 * 
	 * 用户退出
	 * 
	 * @param
	 * @return
	 * @throws
	 */
	public ActionForward LogOut(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		HttpSession session = request.getSession();
		session.removeAttribute("LoginName");// 登录名
		session.removeAttribute("UserName");// 用户姓名
		session.removeAttribute("UserId");// 用户ID
		session.removeAttribute("DeptId");// 部门ID
		session.removeAttribute("UserType");// 用户类别
		session.removeAttribute("RoleId");// 角色ID
		session.invalidate();// 控件无效
		return mapping.findForward("LogOut");
	}


第二个JAVA文件:
/**============================================================
 * 版权: antbee 版权所有 (c) 2002 - 2006
 * 文件: com.antbee.kams.sysmanage.login.dao.UserDAO
 * 所含类: IUserDAO
 * 修改记录:
 * 日期                作者                内容
 * =============================================================
 * 2006-8-28           @家军             建立文件
 * ============================================================*/

package com.antbee.sysmanage.login.dao;

import java.util.List;

import com.antbee.hibernate.model.AirlineUserInformation;

/**
 * <p></p>
 *
 * <p>Copyright: 版权所有 (c) 2002 - 2006</p>
 * <p>Company: antbee</p>
 *
 * @author @家军
 * @version 1.0
 */

public interface UserDAO {
	//用户登录 如果是正确的用户名/密码,则返回true,否则返回false
	public boolean Login(String UserName,String PassWord);
	//取得用户信息
	public AirlineUserInformation GetUser(String LoginName);
}



第三个JAVA文件;
/**============================================================
 * 版权: antbee 版权所有 (c) 2002 - 2006
 * 文件: com.antbee.sysmanage.login.dao.hibernate.UserDAOImpl
 * 所含类: UserDAOImpl
 * 修改记录:
 * 日期                作者                内容
 * =============================================================
 * 2006-8-28            @家军             建立文件
 * ============================================================*/

package com.antbee.sysmanage.login.dao.hibernate;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.springframework.orm.ObjectRetrievalFailureException;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;


import com.antbee.hibernate.model.AirlineUserInformation;
import com.travelsky.kams.sysmanage.login.dao.UserDAO;

/**
 * <p>
 * </p>
 * 
 * <p>
 * Copyright: 版权所有 (c) 2002 - 2006
 * </p>
 * <p>
 * Company: antbee
 * </p>
 * 
 * @author Administrator
 * @version 1.0
 */

public class UserDAOImpl extends HibernateDaoSupport implements UserDAO {

	/*
	 * (非 Javadoc)
	 * 
	 * @see com.travelsky.kams.sysmanage.login.dao.IUserDAO#Login(java.lang.String,
	 *      java.lang.String) 用户登录 如果是正确的用户名/密码,则返回true,否则返回false
	 */
	public boolean Login(String UserName, String PassWord) {
		// TODO Auto-generated method stub
		String finduser = "from AirlineUserInformation as user where user.loginName='"
				+ UserName + "' and user.password='" + PassWord + "'";
		List Lfinduser = this.getHibernateTemplate().find(finduser);
		if (Lfinduser.size() >= 1) {
			return true;
		}
		return false;
	}

	/*
	 * (非 Javadoc)
	 * 
	 * @see com.travelsky.kams.sysmanage.login.dao.IUserDAO#Login(java.lang.String,
	 *      java.lang.String) 取得用户信息
	 */
	public AirlineUserInformation GetUser(String LoginName) {
		// TODO Auto-generated method stub
		AirlineUserInformation user = null;
		String finduser = "from AirlineUserInformation as user where user.loginName='"
				+ LoginName + "'";
		List Lfinduser = this.getHibernateTemplate().find(finduser);
		if (Lfinduser.size() >= 1) {
			user = (AirlineUserInformation) Lfinduser.get(0);
		} else {
			throw new ObjectRetrievalFailureException(
					AirlineUserInformation.class, LoginName);
		}
		return user;
	}
}



两个配置文件,
第一个struts-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
	<data-sources />
	<!-- 动态验证FORM  -->
	<form-beans>
		<form-bean name="LoginActionForm"
			type="org.apache.struts.validator.DynaValidatorForm">
			<form-property name="User"
				type="com.antbee.hibernate.model.AirlineUserInformation" />
		</form-bean>
	</form-beans>
	<!-- 全局异常 -->
	<global-exceptions>
		<exception key="error.required"
			type="org.springframework.dao.DataAccessException"
			path="/dataAccessFailure.jsp" />
	</global-exceptions>
	<!-- 全局转向 -->
	<global-forwards>
		<!-- 所有非法用户返回登录页面  -->
		<forward name="LoginGo" path="/User.do?method=LogOut"></forward>
		<!-- 业务规则出错信息提示  -->
		<forward name="Fail" path="/jsp/common/failed.jsp"></forward>
	</global-forwards>
	<!-- 分发控制 -->
	<action-mappings>
		<action path="/User"
			type="org.springframework.web.struts.DelegatingActionProxy"
			name="LoginActionForm" scope="request" parameter="method"
			validate="false">
			<forward name="UserMenu" path="/jsp/leftMenu.jsp" />
			<forward name="Comein" path="/jsp/index.jsp" />
			<forward name="LogOut" path="/login.jsp" />
		</action>		
	</action-mappings>
	<!-- 资源文件 -->
	<message-resources parameter="resources.ApplicationResources" />
	<!-- 使用Spring控制事务 -->
	<plug-in
		className="org.springframework.web.struts.ContextLoaderPlugIn">
		<set-property property="contextConfigLocation"
			value="classpath:applicationContext.xml" />
	</plug-in>
	<!-- 使用表单验证共同类validator -->
	<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
		<set-property property="pathnames"
			value="/WEB-INF/validator-rules.xml, /WEB-INF/validation.xml" />
	</plug-in>
</struts-config>


第二个XML文件:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<!--Start of Session Factory -->
	<bean id="SessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="configLocation">
			<value>classpath:hibernate.cfg.xml</value>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="connection.provider_class">
					org.hibernate.connection.ProxoolConnectionProvider
				</prop>
				<prop key="hibernate.dialect">
					org.hibernate.dialect.Oracle9Dialect
				</prop>
			</props>
		</property>
	</bean>
	<!--End of SessionFactory -->

	<!--Start of TransactionManager -->
	<bean id="TransactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager"
		abstract="false" singleton="true" lazy-init="default"
		autowire="default" dependency-check="default">
		<property name="sessionFactory">
			<ref bean="SessionFactory" />
		</property>
	</bean>
	<!--End of TransactionManager -->
	<!-- 基本的DAO BEGIN-->
	<bean id="BaseTransactionProxy"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
		abstract="true">
		<property name="transactionManager">
			<ref bean="TransactionManager" />
		</property>
		<property name="proxyTargetClass">
			<value>true</value>
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="save*">PROPAGATION_REQUIRED</prop>
				<prop key="remove*">PROPAGATION_REQUIRED</prop>
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>
	<!-- 基本的DAO END -->

	<!--Start of userDAO -->
	<bean id="userDAO"
		class="com.antbee.sysmanage.login.dao.hibernate.UserDAOImpl">
		<property name="sessionFactory">
			<ref local="SessionFactory" />
		</property>
	</bean>
	<bean id="userDAOProxy" parent="BaseTransactionProxy"
		class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="target">
			<ref local="userDAO" />
		</property>
	</bean>
	<!--End of userDAO -->
				

	<!--Start of UserAction -->
	<bean name="/User"
		class="com.antbee.sysmanage.login.action.UserAction" singleton="false">
		<property name="userDAO">
			<ref bean="userDAOProxy" />
		</property>
	</bean>
	<!--End of AddUserAction -->

</beans>




其它的POJO使用myeclise插件就会自动生成。

呵呵是不是开发很简单呢,能够节省你多少的工作量呀,如果有兴趣的同志可以共同探讨。
分享到:
评论
9 楼 jzx19770812 2006-12-02  
不错的文章,很适合我这样的初学者,目前在写个bookstore的例子,正在做事务的配置呢,作者的文章对我很有帮助,谢谢。
:D

其实作者的这三个文件两个配置已经把struts+spring+hibernate应用的关键部分都写出来了,也用不着完整的例子了
8 楼 ouspec 2006-10-10  
恩,这个帖子,请等待申诉
7 楼 heweiya 2006-10-09  
呵呵,居然被评为垃圾贴,心里倒是不明白了,这个我没有照抄谁家的代码,只是在不断实践中去掉了反复COPY代码而且对实际编码又哆嗦的service层。也就是以前要用的至少5个JAVA文件,还有比较哆嗦的配置文件等。三个JAVA文件好象工作量会减少很多吧。
为什么又有人反对呢?想不明白。
N,可能是标题让人反感吧。
我现在开发就是使用这个结构组织自己的程序的,开发量比较小,正在研究使用ANT来生成尤如rails一样的东东呢。希望ANT出一个scaffold,使用 antbee script/generate controller LoginAction Login LoginOut。
6 楼 jigsaw 2006-09-29  
楼主真的很强。。。看标题还以为是自己写了个超简单的框架呢。。。

哪怕你把这里的内容拷贝过来也好得多啊
http://csis.pace.edu/~bergin/mvc/mvcgui.html
5 楼 java虫 2006-09-29  
少了service层,其他的没看出来哪有什么简单之处

建议改一下帖子的标题
4 楼 BirdGu 2006-09-29  
这是在干嘛?普及Spring?
3 楼 jichongchong 2006-09-27  

没东西啊
2 楼 ouspec 2006-09-25  
例子呢?
1 楼 毛冬 2006-09-25  
例子! 例子!!

相关推荐

    利用MVC模式开发Java应用程序

    (1) 设计Java的对象类,分别扮演模型(M)、视图(V)和控制器(C)的角色。 (2) 编写JavaApplication或Applet程序,实现上述的三个角色。 (3) 观察三个角色相互间的影响关系。

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    精通Struts基于MVC的Java Web设计与开发 孙卫琴 光盘

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。第8章到第9...

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java微信公众号MVC开发框架

    我们在com.telecomjs.yc.controller包下建一个java类WeixinController,如下: package com.telecomjs.yc.controller; import com.github.jweixin.jwx.context.Weixin; import ...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    该案例采用目前最流行、最规范的java ee架构,整个应用分为jpa实体层、eao层、业务逻辑层、mvc层和视图层,各层之间分层清晰,层与层之间以松耦合的方法组织在一起。该案例既提供了ide无关的、基于ant管理的项目源码...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程...

    精通Struts_基于MVC的Java Web设计与开发

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。第8章到第9...

    AspMvc框架 v1.1

    AspMvc是一个快速、简单的面向对象的轻量级Asp开发框架,是为了简化企业级应用开发和敏捷WEB应用开发而诞生的。 借鉴了国内外很多优秀的(Java Ssh/Net NetMvc3.5 ThinkPhp)框架和模式,使用面向对象的开发结构和MVC...

    基于MVC的java Web设计与开发

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。第8章到第9...

    Spring MVC 入门实例

    如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用...

    精通 Struts:基于 MVC 的 JavaWeb 设计与开发(PDF)

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。第8章到第9...

    精通struts:基于mvc的java web设计与开发part3

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。...

    精通struts:基于mvc的java web设计与开发part2

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。...

    精通struts:基于mvc的java web设计与开发part1

    第4章到第7章深入探讨了Struts框架的核心组件ActionServlet和 RequestProcessor的实现原理,详细介绍了开发Struts应用的模型、视图和控制器的各种技术,细致的描述了Struts配置文件的每个元素的使用方法。...

Global site tag (gtag.js) - Google Analytics