您的位置:首页 > 编程语言 > Java开发

webwork+spring+ibatis MVC实践

2008-11-03 16:37 405 查看
Webwork,spring,ibatis MVC实践
现在MVC的web架构模式,已经得到了开发人员和架构师的认可.无论是在可扩展性,可维护性都能在项目中充分体现其优越性。
原理图如下所示:



我们这里的视图使用JSP
控制器由webwork承担
模型由ibatis承担
Spring 完成ibatis注入到manager,managr注入到webwork的action的工作。
基本需求是这样的,在页面上发送一封简单的邮件。
1. 首先编写一个JSP发送邮件的页面,如图所示:



sendMail.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'sendMail.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<style type="text/css">
@import url(css/content.css);
</style>
</head>
<body>
<table cellpadding="0" cellspacing="0" class="links">
<tr>
<td><a href="#">首页导读</a><a href="#">在线用户</a><a href="#">查询网友</a><a href="#">在线好友</a><a href="#">好友名单</a><a href="#">查看讯息</a><a href="#">发送讯息</a></td>
</tr>
</table>
<hr/>
<form name="" action="member/mailAction.action" method="post">
<table>
<tr>
<td>收件人:</td>
<td>
<input type="text" name="reviever" id="reviever"/>
</td>
</tr>
<tr>
<td>主 题:</td>
<td>
<input type="text" name="subject" id="subject"/>
</td>
</tr>
<tr>
<td>内 容:</td>
<td>
<input type="text" name="content" id="content"/>
</td>
</tr>
<tr>
<td>
<input type="submit" name="sendMail" value="发邮件"/>
</td>
<td>
<input type="reset" name="cancel" value="取 消"/>
</td>
</tr>
</table>
</form>
</body>
</html>

2.编写控制层 webwork MailAction.java

package com.alisoft.facepay.member.action;
import javax.servlet.http.HttpServletRequest;
import org.apache.log4j.Logger;
import com.alisoft.facepay.framework.bean.OrderInfo;
import com.alisoft.facepay.framework.bean.OrderService;
import com.opensymphony.webwork.interceptor.ServletRequestAware;
import com.opensymphony.xwork.ActionSupport;
public class MailAction extends ActionSupport implements ServletRequestAware{
private final static Logger log = Logger.getLogger(MailAction.class);
private HttpServletRequest request;
private OrderService orderService;
public String execute() throws Exception {
String reviever=this.request.getParameter("reviever");
log.info(reviever);
String subject=this.request.getParameter("subject");
log.info(subject);
String content=this.request.getParameter("content");
log.info(content);
OrderInfo orderInfo=new OrderInfo();
orderInfo.setToAddress(reviever);
orderInfo.setContent(content);
orderService.sendOrderMail(orderInfo);
log.info("send mail finshed!");
return this.SUCCESS;
}

public String pageInit()throws Exception{
return "input";
}
public void setServletRequest(HttpServletRequest arg0) {
// TODO Auto-generated method stub
this.request=arg0;
}
public static Logger getLog() {
return log;
}
public OrderService getOrderService() {
return orderService;
}
public void setOrderService(OrderService orderService) {
this.orderService = orderService;
}
}

想让webwork能工作正常,要配置两个文件,内容如下:
Webwork.properties
resource.loader = classpath, webapp
classpath.resource.loader.description = Classpath Template Loader
classpath.resource.loader.class = com.opensymphony.webwork.views.velocity.WebWorkResourceLoader
classpath.resource.loader.cache = false
classpath.resource.loader.modificationCheckInterval = 10
webapp.resource.loader.description = Webapp Template Loader
webapp.resource.loader.class = org.apache.velocity.tools.view.servlet.WebappLoader
webapp.resource.loader.path = /
webapp.resource.loader.cache = false
webapp.resource.loader.modificationCheckInterval = 10
velocimacro.library = /macros.vm
velocimacro.library.autoreload = true
runtime.log.logsystem.class = org.apache.velocity.runtime.log.SimpleLog4JLogSystem
input.encoding = GBK
output.encoding = GBK

xwork.xml
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<xwork>
<!-- 用户注册与邮件处理模块 -->
<include file="conf/webwork/webwork-mail.xml"/>
</xwork>

关于邮件发送模块的配置文件 webwork-mail.xml

<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.1.1//EN" "http://www.opensymphony.com/xwork/xwork-1.1.1.dtd">
<!--
-->
<xwork>
<include file="webwork-default.xml"/>
<package name="member" namespace="/member" extends="webwork-default" >
<interceptors>
<!-- Basic stack -->
<interceptor-stack name="memberStack">
<interceptor-ref name="basicStack"/>
<interceptor-ref name="autowiring"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="memberStack"/>

<action name="mailAction" class="com.alisoft.facepay.member.action.MailAction">
<result name="input">/sendMail.jsp</result>
<result name="success">/index.jsp</result>
</action>
</package>
</xwork>
3.服务层和持久层的编写。
3.1 邮件服务层接口
package com.alisoft.facepay.framework.bean;
public interface OrderService {
public void sendOrderMail(OrderInfo orderInfo);
}
3.2 邮件服务层实现
package com.alisoft.facepay.framework.bean;
import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
public class OrderServiceImpl implements OrderService {
private MailSender mailSender;
private SimpleMailMessage message;
public void sendOrderMail(OrderInfo orderInfo) {
SimpleMailMessage msg = new SimpleMailMessage(this.message);
msg.setTo(orderInfo.getToAddress());
msg.setText(orderInfo.getContent());

try {
mailSender.send(msg);
} catch (MailException e) {
// TODO Auto-generated catch block
System.out.println(e.getMessage());
}
}
public MailSender getMailSender() {
return mailSender;
}
public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}
public SimpleMailMessage getMessage() {
return message;
}
public void setMessage(SimpleMailMessage message) {
this.message = message;
}
}

3.3 spring 配置文件
数据源配置文件 spring-datasource.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jjdbc:oracle:thin:@127.0.0.1:1521:ALISOFT"/>
<property name="username" value="SCOTT"/>
<property name="password" value="TIGER"/>
</bean>
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:conf/ibatis/SqlMapConfig.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
</beans>
邮件模块配置文件spring-mail.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.163.com" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
</props>
</property>
<property name="username">
<value>yema@163.com</value>
</property>
<property name="password">
<value>yema</value>
</property>
</bean>
<bean id="mailMessage"
class="org.springframework.mail.SimpleMailMessage">
<property name="from" value="demo@163.com" />
<property name="subject" value="Your order" />
</bean>
<bean id="orderService"
class="com.alisoft.facepay.framework.bean.OrderServiceImpl">
<property name="mailSender" ref="mailSender" />
<property name="message" ref="mailMessage" />
</bean>
</beans>

基本可以实现MVC架构的邮件发送,要想把上面的程序跑起来,需要参考webwork,spring,ibatis的配置文件。
有问题可以给我发邮件:ddviplinux@163.com。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: