Chinaunix首页 | 论坛 | 博客
  • 博客访问: 30465585
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2008-10-23 14:20:19

第二部分:

1.DWR的配置:

DWR是Java一个比较常用的Ajax框架,与Spring集成更是得心应手,可以非常方便的操作注册在Spring配置文件中的Bean。这我们导入DWR包后,就可以在web.xml里面配置它了。

 

web.xml关于DWR配置。

xml 代码
  1. <servlet>  
  2.         <servlet-name>dwr-invokerservlet-name>  
  3.         <servlet-class>  
  4.             org.directwebremoting.servlet.DwrServlet   
  5.         servlet-class>  
  6.         <init-param>  
  7.             <param-name>debugparam-name>  
  8.             <param-value>infoparam-value>  
  9.         init-param>  
  10.         <init-param>  
  11.             <param-name>maxWaitAfterWriteparam-name>  
  12.             <param-value>500param-value>  
  13.         init-param>  
  14.         <load-on-startup>1load-on-startup>  
  15.     servlet>  
  16.   
  17.     <servlet-mapping>  
  18.         <servlet-name>dwr-invokerservlet-name>  
  19.         <url-pattern>/dwr/*url-pattern>  
  20.     servlet-mapping>  

 

DWR还有一个叫dwr.xml文件,放在WEB-INF下,里面都是配置DWR与JS交互使用的Bean或Entity。 当然DWR也支持Anotation,可以在web.xml配置。但我们这个例子使用的是xml配置。

以下是dwr.xml代码:

xml 代码
  1. xml version="1.0" encoding="UTF-8"?>  
  2.     "-//GetAhead Limited//DTD Direct Web Remoting 2.0//EN"   
  3.     "">  
  4. <dwr>  
  5.     <allow>  
  6.         <create creator="spring" javascript="ArticleService">  
  7.             <param name="beanName" value="articleService" />  
  8.         create>  
  9.   
  10.   
  11.     allow>  
  12. dwr>  

这个ArticleService就是我们要通过JS调用Spring注册的Bean。

现在可以看看这个源文件:

java 代码
  1. /**  
  2.  * 用户Service  
  3.  */  
  4. package com.leo.service.impl;   
  5.   
  6. import java.util.Date;   
  7. import java.util.List;   
  8.   
  9. import org.apache.log4j.Logger;   
  10.   
  11. import com.leo.po.Article;   
  12. import com.leo.po.Log;   
  13. import com.leo.po.Mail;   
  14. import com.leo.service.IArticleService;   
  15. import com.leo.service.ILogService;   
  16. import com.leo.service.IMailService;   
  17. import com.leo.util.JavaMailSenderUtil;   
  18. import com.leo.util.RegEx;   
  19.   
  20. /**  
  21.  * @author superleo  
  22.  *   
  23.  */  
  24. public class ArticleServiceImpl extends GenericServiceImpl   
  25.         implements IArticleService {   
  26.   
  27.     private static Logger logger = Logger.getLogger(ArticleServiceImpl.class);   
  28.   
  29.     private IMailService mailService;   
  30.   
  31.     private ILogService logService;   
  32.   
  33.     private JavaMailSenderUtil javaMailSenderUtil;   
  34.   
  35.     public JavaMailSenderUtil getJavaMailSenderUtil() {   
  36.         return javaMailSenderUtil;   
  37.     }   
  38.   
  39.     public void setJavaMailSenderUtil(JavaMailSenderUtil javaMailSenderUtil) {   
  40.         this.javaMailSenderUtil = javaMailSenderUtil;   
  41.     }   
  42.   
  43.     public ILogService getLogService() {   
  44.         return logService;   
  45.     }   
  46.   
  47.     public void setLogService(ILogService logService) {   
  48.         this.logService = logService;   
  49.     }   
  50.   
  51.     public IMailService getMailService() {   
  52.         return mailService;   
  53.     }   
  54.   
  55.     public void setMailService(IMailService mailService) {   
  56.         this.mailService = mailService;   
  57.     }   
  58.   
  59.     public ArticleServiceImpl(Class 也能实现,但本人对DWR更熟悉点,所以这里使用的是DWR版本了。

    这个时候,相应的页面为:

    xml 代码
    1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
    2. <%@ include file="include/includes.jsp" %>  
    3. <html>  
    4.     <head>  
    5.         <s:head/>  
    6.   
    7.   
    8.         <title>欢迎进入后台系统title>  
    9.   
    10.         <meta http-equiv="pragma" content="no-cache">  
    11.         <meta http-equiv="cache-control" content="no-cache">  
    12.         <meta http-equiv="expires" content="0">  
    13.         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
    14.   
    15.         <style type="text/css">  
    16.   
    17. body,td,th {   
    18.     font-size: 12px;   
    19. }   
    20.   
    21. a {   
    22.     font-size: 12px;   
    23. }   
    24.   
    25. a:link {   
    26.     text-decoration: none;   
    27. }   
    28.   
    29. a:visited {   
    30.     text-decoration: none;   
    31. }   
    32.   
    33. a:hover {   
    34.     text-decoration: underline;   
    35. }   
    36.   
    37. a:active {   
    38.     text-decoration: none;   
    39. }   
    40.   
    41. style>  
    42.   
    43.         <script type='text/javascript' src='dwr/engine.js'>script>  
    44.         <script type='text/javascript' src='dwr/util.js'>script>  
    45.         <script type='text/javascript' src='dwr/interface/ArticleService.js'>script>  
    46.         <script>  
    47.             /**  初始化*/   
    48.             function init(){   
    49.                 dwr.util.useLoadingMessage("正在加载....");   
    50.             }   
    51.                
    52.             /**  发信函数*/   
    53.             function doWork(){   
    54.                 ArticleService.storeByURL(showResult);   
    55.             }   
    56.                
    57.             /**  每5分钟回调发信函数*/   
    58.             function showResult(count){   
    59.                 alert("这一次取得的结果为:" + count + " " + new Date());   
    60.                 $("result").innerHTML = "这一次取得的结果为:" + count + " " + new Date();   
    61.                 setTimeout("doWork()",1000 * 60 * 5);   
    62.             }   
    63.            
    64.         script>  
    65.   
    66.     head>  
    67.   
    68.     <body onLoad="init();">  
    69.   
    70.   
    71.         <div style="float: left; width: 1000px; height: 600px; margin: 0px">  
    72.             <div style="float: left; width: 300px; height: 600px">  
    73.                 <ul>  
    74.                     <li>  
    75.                         欢迎进入后台系统.   
    76.                     li>  
    77.                     <li>  
    78.                         <a href="#" onClick="doWork();">运行程序.a>  
    79.                     li>  
    80.                 ul>  
    81.             div>  
    82.           <div style="float: left; width: 700px; height: 600px">  
    83.                 说明:每5分钟遍历一下页面<br />  
    84.                 (z=0&ct=318767104&lm=11&sc=0&rn=50&tn=baiduKeywordSearch&rs3=0&rs4=0&word=%D2%EC%C8%CB%B0%C1%CA%C0%C2%BC&pn=50), <br />  
    85. 请统计页面中"《"和"》"之间有多少个"异人"这两个字,<br />  
    86. 将这数值弹出一个alert并且发信给指定的邮件地址 获取页面内所有地方的以"<< >>"为标示的这个符号代表书名号,   
    87. 获取之中的内容 <<使用正则表达式>> 功能点: <br />  
    88. 1)URL抓取页面 <br />  
    89. 2)正则表达式匹配 <br />  
    90. 3)邮件系统调用 请注意设计思路和代码规范 <br />  
    91.   
    92. <p>p>  
    93. <div id="result">这里显示每次抓取的结果......div>  
    94.   
    95.             div>  
    96.         div>  
    97.     body>  
    98. html>  

    非常简单的页面。 通过JS函数的setTimeout("doWork()",1000 * 60 * 5) 很容易每5分钟来重发一次请求。

     

    2.JavaMail的配置:

    一旦使用了Spring似乎感觉不到JavaMail需要做更多事了。确实,Spring已经简化了很多JavaMail的配置。

     

    xml 代码
    1. <bean id="mailSender"  
    2.         class="org.springframework.mail.javamail.JavaMailSenderImpl">  
    3.         <property name="host" value="${mail.smtp}" />  
    4.         <property name="username" value="${mail.username}" />  
    5.         <property name="password" value="${mail.password}" />  
    6.         <property name="javaMailProperties">  
    7.             <props>  
    8.                 <prop key="mail.smtp.auth">trueprop>  
    9.             props>  
    10.         property>  
    11.     bean>  

     

    使用的话,只需要简单注入一下,就OK了。我把这个写在util包下了。

    java 代码
    1. package com.leo.util;   
    2.   
    3. import org.apache.log4j.Logger;   
    4. import org.springframework.mail.MailException;   
    5. import org.springframework.mail.MailSender;   
    6. import org.springframework.mail.SimpleMailMessage;   
    7.   
    8. import com.leo.po.Mail;   
    9.   
    10. public class JavaMailSenderUtil {   
    11.   
    12.     private static Logger logger = Logger.getLogger(JavaMailSenderUtil.class);   
    13.   
    14.     private static final String MAIL_FROM = "kyo100900@163.com";   
    15.   
    16.     private MailSender mailSender;   
    17.   
    18.     /**  
    19.      * 发送邮件  
    20.      *   
    21.      * @param mail  
    22.      *            要发送的邮件实体  
    23.      * @param count  
    24.      *            告诉接收人所感要的记录总数  
    25.      */  
    26.     public void sendMail(Mail mail, int count) {   
    27.   
    28.         logger.info("-----------发送邮件!---------");   
    29.         SimpleMailMessage msg = new SimpleMailMessage();   
    30.         String subject = "亲爱的:" + mail.getName() + " ,我将告诉你《异人傲世录》的情况。";   
    31.         String text = "帖子中,包括《*异人*》的共有:" + count + " 个";   
    32.   
    33.         String email = mail.getEmail();   
    34.         logger.info(subject);   
    35.         logger.info(text);   
    36.         logger.info("发送给:" + email);   
    37.   
    38.         msg.setSubject(subject);   
    39.         msg.setText(text);   
    40.         msg.setTo(email);   
    41.         msg.setFrom(MAIL_FROM);   
    42.   
    43.         try {   
    44.             logger.info("mailSender为空:" + mailSender == null);   
    45.             mailSender.send(msg);   
    46.         } catch (MailException e) {   
    47.             e.printStackTrace();   
    48.         }   
    49.         logger.info("-----------发送成功!---------");   
    50.     }   
    51.   
    52.     public MailSender getMailSender() {   
    53.         return mailSender;   
    54.     }   
    55.   
    56.     public void setMailSender(MailSender mailSender) {   
    57.         this.mailSender = mailSender;   
    58.     }   
    59.   
    60. }   

     

    这个例子远远不够,还有很多可以完善与改进的地方,这个例子只是想让那些初学者如何比较全面的了解SSH之间的相互工作。零散的学习后,还需要系统的整合在一起。

     

阅读(1967) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~