??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲youwu永久无码精品 ,亚洲精品国产啊女成拍色拍,亚洲精品蜜夜内射http://www.tkk7.com/QJames/是你的。。。终I是你的。。。?/description>zh-cnSat, 10 May 2025 19:19:32 GMTSat, 10 May 2025 19:19:32 GMT60Hibernate 之getCurrentSession ?openSession() 的区?/title><link>http://www.tkk7.com/QJames/archive/2011/04/14/348274.html</link><dc:creator>龍ぜD剑</dc:creator><author>龍ぜD剑</author><pubDate>Thu, 14 Apr 2011 02:46:00 GMT</pubDate><guid>http://www.tkk7.com/QJames/archive/2011/04/14/348274.html</guid><wfw:comment>http://www.tkk7.com/QJames/comments/348274.html</wfw:comment><comments>http://www.tkk7.com/QJames/archive/2011/04/14/348274.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/QJames/comments/commentRss/348274.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/QJames/services/trackbacks/348274.html</trackback:ping><description><![CDATA[<span style="color: #99cc00; font-size: 14pt"><br /> <br /> <p><span><span style="color: #003300"><span style="font-size: 8pt">1 getCurrentSession创徏的session?x)和l定到当前线E?而openSession每次创徏新的session?/span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">2 getCurrentSession创徏的线E会(x)在事务回滚或事物提交后自动关?而openSession必须手动关闭</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">q里getCurrentSession本地事务(本地事务:jdbc)?要在配置文g里进行如下设|?/span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">    * 如果使用的是本地事务Qjdbc事务Q?br />  <property name="hibernate.current_session_context_class">thread</property><br />  * 如果使用的是全局事务Qjta事务Q?br />  <property name="hibernate.current_session_context_class">jta</property>  </span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt"> getCurrentSession () 在事务结束之前用当前的session<br /> openSession()         每次重新建立一个新的session </span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">在一个应用程序中Q如果DAO 层用Spring 的hibernate 模板Q通过Spring 来控制session 的生命周期,则首选getCurrentSession ()?/span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">使用Hibernate的大多数应用E序需要某UŞ式的“上下文相关的” sessionQ特定的session在整个特定的上下文范围内始终有效。然而,对不同类型的应用E序而言Q要Z么是l成q种“上下?#8221;下一个定义通常 是困隄Q不同的上下文对“当前”q个概念定义了不同的范围。在3.0版本之前Q用Hibernate的程序要么采用自行编写的Z ThreadLocal的上下文sessionQ要么采用HibernateUtilq样的辅助类Q要么采用第三方框架Q比如Spring或Pico)Q?它们提供了基于代?proxy)或者基于拦截器(interception)的上下文相关session?</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">?.0.1版本开 始,Hibernate增加了SessionFactory.getCurrentSession()Ҏ(gu)。一开始,它假定了采用JTA事务QJTA事务 定义了当前session的范围和上下?scope and context)。Hibernate开发团队坚信,因ؓ(f)有好几个独立的JTA TransactionManager实现E_可用Q不论是否被部vC个J2EE容器中,大多?假若不是所有的Q应用程序都应该采用JTA事务理?Zq一点,采用JTA的上下文相关session可以满你一切需要?</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">更好的是Q从3.1开 始,SessionFactory.getCurrentSession()的后台实现是可拔插的。因此,我们引入了新的扩展接?(org.hibernate.context.CurrentSessionContext)和新的配|参?(hibernate.current_session_context_class)Q以便对什么是“当前session”的范围和上下?scope and context)的定义进行拔插?</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">请参?org.hibernate.context.CurrentSessionContext接口的Javadoc,那里有关于它的契U的详细讨论。它定义 了单一的方法,currentSession()Q特定的实现用它来负责跟t当前的上下文session。Hibernate内置了此接口的两U实现?</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">org.hibernate.context.JTASessionContext - 当前sessionҎ(gu)JTA来跟t和界定。这和以前的仅支持JTA的方法是完全一L(fng)。详情请参阅Javadoc?</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">org.hibernate.context.ThreadLocalSessionContext - 当前session通过当前执行的线E来跟踪和界定。详情也请参阅Javadoc?</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">q?两种实现都提供了“每数据库事务对应一个session”的编E模型,也称作每ơ请求一个session。Hibernate session的v始和l结由数据库事务的生存来控制。假若你采用自行~写代码来管理事务(比如Q在Ua(b)的J2SE,或?JTA/UserTransaction/BMTQ,你用Hibernate Transaction API来把底层事务实现从你的代码中隐藏掉。如果你在支持CMT的EJB容器中执行,事务边界是声明式定义的,你不需要在代码中进行Q何事务或 session理操作。请参阅W?11 ?事务和ƈ发一节来阅读更多的内容和CZ代码?</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">hibernate.current_session_context_class 配置参数定义了应该采用哪个org.hibernate.context.CurrentSessionContext实现。注意,Z向下兼容Q如果未 配置此参敎ͼ但是存在org.hibernate.transaction.TransactionManagerLookup的配 |,Hibernate?x)采用org.hibernate.context.JTASessionContext。一般而言Q此参数的值指明了要用的?现类的全名,但那两个内置的实现可以用简写,?jta"?thread"?/span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">1、getCurrentSession()与openSession()的区别?</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">* 采用getCurrentSession()创徏的session?x)绑定到当前U程中,而采用openSession()<br /> 创徏的session则不?br /> * 采用getCurrentSession()创徏的session在commit或rollback时会(x)自动关闭Q而采用openSession()<br /> 创徏的session必须手动关闭<br /> 2、用getCurrentSession()需要在hibernate.cfg.xml文g中加入如下配|:(x)<br /> * 如果使用的是本地事务Qjdbc事务Q?br /> <property name="hibernate.current_session_context_class">thread</property><br /> * 如果使用的是全局事务Qjta事务Q?br /> <property name="hibernate.current_session_context_class">jta</property></span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">利于ThreadLocal模式理Session<br />    早在Java1.2推出之时QJavaq_中就引入了一个新的支持:(x)java.lang.ThreadLocalQ给我们在编写多U程E序<br />    时提供了一U新的选择。ThreadLocal是什么呢Q其实ThreadLocalq是一个线E的本地实现版本Q它q不是一个ThreadQ?br />    而是thread local variable(U程局部变?。也许把它命名ؓ(f)ThreadLocalVar更加合适。线E局部变?ThreadLocal)<br />    其实的功用非常简单,是为每一个用某变量的线E都提供一个该变量值的副本Q是每一个线E都可以独立地改变自q副本Q?br />    而不?x)和其它U程的副本冲H。从U程的角度看Q就好像每一个线E都完全拥有一个该变量?<br />    ThreadLocal是如何做Cؓ(f)每一个线E维护变量的副本的呢Q其实实现的思\很简单,在ThreadLocalcM有一个MapQ?br />    用于存储每一个线E的变量的副本。比如下面的CZ实现(Z单,没有考虑集合的泛?Q?<br /> public class HibernateUtil {</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">public static final ThreadLocal session =new ThreadLocal();</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">public static final SessionFactory sessionFactory;<br />    static {<br />       try {<br />         sessionFactory = new Configuration().configure().buildSessionFactory();<br />       } catch (Throwable ex) {<br />            throw new ExceptionInInitializerError(ex);<br />       }     <br /> }</span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">     public static Session currentSession() throws HibernateException {<br />         Session s = session.get();<br />         if(s == null) {<br />           s = sessionFactory.openSession();<br />           session.set(s);<br />            }<br />          return s;<br />        } </span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">    public static void closeSession() throws HibernateException {<br />            Session s = session.get();<br />         if(s != null) {<br />             s.close();<br />         }<br />         session.set(null);<br />     }<br /> }<br /> <br /> <br /> 在这里比较了下getCurrentSession()是否是用的是同一个session...............<br /> </span></p> <p><span style="font-size: 8pt">package com.hibernate;</span></p> <p><span style="font-size: 8pt">import java.util.Date;</span></p> <p><span style="font-size: 8pt">import org.hibernate.Session;<br /> import org.hibernate.SessionFactory;<br /> import org.hibernate.cfg.AnnotationConfiguration;<br /> import org.junit.AfterClass;<br /> import org.junit.BeforeClass;<br /> import org.junit.Test;</span></p> <p><span style="font-size: 12pt">public class HibernateIDTest {<br />  private static SessionFactory sessionFactory;<br />  <br />  @BeforeClass<br />  public static void beforeClass() {<br />   try{<br />    sessionFactory = new AnnotationConfiguration().configure().buildSessionFactory();<br />   }catch (Exception e) {<br />    // TODO: handle exception<br />    e.printStackTrace();<br />   }<br />  }<br />  @AfterClass<br />  public static void afterClass() {<br />   sessionFactory.close();<br />  }<br />  <br />  <br />  @Test<br />  public void testTeacherSave() {<br />   System.out.println("------------");<br />   Teacher t = new Teacher();<br />   t.setId(1);<br />   t.setName("t1");<br />   t.setTitle("middle");<br />   t.setBirthDate(new Date());<br />   <br />   Session session = sessionFactory.getCurrentSession();<br />   session.beginTransaction();<br />   session.save(t);<br />   session.getTransaction().commit();<br />   Session session2 = sessionFactory.getCurrentSession();<br />   <br />   System.out.println("比较"+(session.hashCode()==session2.hashCode()));<br />   <br />   <br />  }<br />  <br /> }<br /> 执行之后不的到结果是  session.hashCode()==session2.hashCode()q两个只是false的,也就是说Q在事务l束之后getCuttentSession 也是创徏了新的session。。。。。?/span></p> <p><br /> </span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">openSession() ?getCurrentSession() 有何不同和关联呢Q?<br /> </span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">  </span></span></span></p> <p><span><span style="color: #003300"><span style="font-size: 8pt">?SessionFactory 启动的时候, Hibernate ?x)根据配|创建相应的 CurrentSessionContext Q在 getCurrentSession() 被调用的时候,实际被执行的Ҏ(gu)?CurrentSessionContext.currentSession() 。在 currentSession() 执行Ӟ如果当前 Session 为空Q?currentSession ?x)调?SessionFactory ?openSession 。所?getCurrentSession() 对于 Java EE 来说是更好的获取 Session 的方法?br /> </span></span></span></p> </span> <img src ="http://www.tkk7.com/QJames/aggbug/348274.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/QJames/" target="_blank">龍ぜD剑</a> 2011-04-14 10:46 <a href="http://www.tkk7.com/QJames/archive/2011/04/14/348274.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jFreeCharq解决办法http://www.tkk7.com/QJames/archive/2011/03/06/345846.html龍ぜD剑龍ぜD剑Sun, 06 Mar 2011 14:47:00 GMThttp://www.tkk7.com/QJames/archive/2011/03/06/345846.htmlhttp://www.tkk7.com/QJames/comments/345846.htmlhttp://www.tkk7.com/QJames/archive/2011/03/06/345846.html#Feedback0http://www.tkk7.com/QJames/comments/commentRss/345846.htmlhttp://www.tkk7.com/QJames/services/trackbacks/345846.htmljfreechart主要是用来动态生各U数据图形的Q可最初用的时候大都会(x)到囄中的中文q或是一个小方块的情c?br /> 仔细研究主要有以?U原因:(x)

1Q服务器~少中文字体Q这多发生在Hp{unix操作pȝ上,解决的方法就是下载可用字体库到系l中Q?br /> 有h也提出在Windows上生图片在传回到UnixL上的Ҏ(gu)?br /> 2QY件版本问题,jfreechart-1.0.10有h说没有问题,但jfreechart-1.0.11?3都有问题Q我用的最新的jfreechart-1.0.13不做讄是有问题的?br /> I其原因Q是它代码的内部讄的字体有问题.


其下是具体的解决办法Q?br />

public static void configFont(JFreeChart chart){  
         // 讄字体  
         Font xfont = new Font("宋体",Font.PLAIN,12) ;// X?nbsp; 
         Font yfont = new Font("宋体",Font.PLAIN,12) ;// Y?nbsp; 
         Font kfont = new Font("宋体",Font.PLAIN,12) ;// 底部  
         Font titleFont = new Font("隶书", Font.BOLD , 25) ; // 囄标题  
         CategoryPlot plot = chart.getCategoryPlot();// 囑Ş的绘制结构对?nbsp; 
           
         // 囄标题  
         chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));  
           
         // 底部  
         chart.getLegend().setItemFont(kfont);  
           
         // X ?nbsp; 
         CategoryAxis domainAxis = plot.getDomainAxis();     
         domainAxis.setLabelFont(xfont);// 轴标?nbsp; 
         domainAxis.setTickLabelFont(xfont);// 轴数?nbsp;   
         domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色  
         domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横u上的label斜显C?nbsp;  
           
         // Y ?nbsp; 
         ValueAxis rangeAxis = plot.getRangeAxis();     
         rangeAxis.setLabelFont(yfont);   
         rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色  
         rangeAxis.setTickLabelFont(yfont);    
           
     } 

龍ぜD剑 2011-03-06 22:47 发表评论
]]>
JFreeChart目?/title><link>http://www.tkk7.com/QJames/archive/2011/03/06/345845.html</link><dc:creator>龍ぜD剑</dc:creator><author>龍ぜD剑</author><pubDate>Sun, 06 Mar 2011 14:36:00 GMT</pubDate><guid>http://www.tkk7.com/QJames/archive/2011/03/06/345845.html</guid><wfw:comment>http://www.tkk7.com/QJames/comments/345845.html</wfw:comment><comments>http://www.tkk7.com/QJames/archive/2011/03/06/345845.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/QJames/comments/commentRss/345845.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/QJames/services/trackbacks/345845.html</trackback:ping><description><![CDATA[<a style="color: #ff0000" name="1">JFreeChart目?/a> <p>JFreeChart是开放源代码站点SourceForge.net上的一个JAVA目Q它主要用来各种各样的图表,q些图表包括Q饼图、柱状图(?通柱状图以及(qing)堆栈q?、线图、区域图、分布图、؜合图、甘特图以及(qing)一些A表盘{等。这些不同式L(fng)图表基本上可以满目前的要求。ؓ(f)了减篇q本文主 要介l前面三U类型的图表Q读者可以触cL通去开发其他样式的图表?/p> <br /> <br /> <br /> <span style="color: #ff0000">q里有点W者在开发中遇见的问题需要注意的?/span>Q在使用Eclipse开发的时候会(x)报一个莫名其妙的错误Q错误可能指向某个类文g的第一行。遇到这L(fng)问题一般是因ؓ(f)没有把Jcommon的jar包设|到目的类路径中的~故。具体的原因不祥?br /> <br /> <p><a style="color: #ff0000" name="N10126">1 饼图</a></p> <p>对于饼图而言Q数据集的获取用的不是同一个数据集c,另外饼图不支持同一个类别的目中还有子目q样的数据。我们只l出创徏饼图的代码,至于写图表到一个文件则与柱状图一_(d)无需重复..<br /> <br /> <span style="color: #ff0000">实例代码如下Q?br /> <br /> </p> <p><span style="color: #000000">package com.dr.demo;</span></p> <p><br /> <span style="color: #000000">import java.awt.Color;<br /> import java.awt.Font;<br /> import java.io.FileNotFoundException;<br /> import java.io.FileOutputStream;<br /> import java.io.IOException;</span></p> <p><span style="color: #000000">import org.jfree.chart.ChartFactory;<br /> import org.jfree.chart.ChartUtilities;<br /> import org.jfree.chart.JFreeChart;<br /> import org.jfree.chart.axis.CategoryAxis;<br /> import org.jfree.chart.axis.CategoryLabelPositions;<br /> import org.jfree.chart.axis.ValueAxis;<br /> import org.jfree.chart.plot.CategoryPlot;<br /> import org.jfree.chart.plot.PlotOrientation;<br /> import org.jfree.chart.title.TextTitle;<br /> import org.jfree.data.category.CategoryDataset;<br /> import org.jfree.data.category.DefaultCategoryDataset;</span></p> <p><br /> <span style="color: #00ffff">/**<br />  * <br />  * @author Ҏ(gu)?br />  * @date 2010-2-25<br />  * @ClassName PolyLine.java<br />  * @Email 289153044@qq.com<br />  * @param 饼图<br />  * @param<br />  */</span></p> <p><span style="color: #000000">public class SalesCountServlet  {</span></p> <p><span style="color: #000000"> protected static void doGet() {<br />   System.out.println("图表已经建立Q?);<br />   <br />   CategoryDataset dataset = getDataSet();<br />   String fileName = "SalesCount.jpg";//文g名称<br />   JFreeChart chart = ChartFactory.createBarChart3D("产品销量图", // 图表标题<br />     "产品", // 目录轴的昄标签<br />     "销?, // 数Du的显C标{?br />     dataset, // 数据?br />     PlotOrientation.VERTICAL, // 图表方向Q水q뀁垂?br />     true, // 是否昄图例(对于单的q囑ֿLfalse)<br />     false, // 是否生成工具<br />     false // 是否生成URL链接<br />     );<br />   <br />   configFont(chart);//讄中文格式</span></p> <p><span style="color: #000000">  FileOutputStream fos_jpg = null;<br />   try {<br />    String statImagePath = "d:";//存放文g的\?br />    try {<br />     fos_jpg = new FileOutputStream(statImagePath+ fileName);<br />    } catch (FileNotFoundException e) {<br />     e.printStackTrace();<br />    }<br />    try {<br />     ChartUtilities.writeChartAsJPEG(fos_jpg, 0.5f, chart, 400, 300,null);<br />    } catch (IOException e) {<br />     e.printStackTrace();<br />    }<br />   } finally {<br />    try {<br />     fos_jpg.close();<br />    } catch (Exception e) {<br />     e.printStackTrace();<br />    }<br />   }<br />     <br />  }<br />   public static void configFont(JFreeChart chart){   <br />          // 配置字体   <br />          Font xfont = new Font("宋体",Font.PLAIN,12) ;// X?nbsp;  <br />          Font yfont = new Font("宋体",Font.PLAIN,12) ;// Y?nbsp;  <br />          Font kfont = new Font("宋体",Font.PLAIN,12) ;// 底部   <br />          Font titleFont = new Font("隶书", Font.BOLD , 25) ; // 囄标题   <br />          CategoryPlot plot = chart.getCategoryPlot();// 囑Ş的绘制结构对?nbsp;  <br />             <br />          // 囄标题   <br />          chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));   <br />             <br />          // 底部   <br />          chart.getLegend().setItemFont(kfont);   <br />             <br />          // X ?nbsp;  <br />          CategoryAxis domainAxis = plot.getDomainAxis();      <br />          domainAxis.setLabelFont(xfont);// 轴标?nbsp;  <br />          domainAxis.setTickLabelFont(xfont);// 轴数?nbsp;    <br />          domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色   <br />          domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横u上的label斜显C?nbsp;   <br />             <br />          // Y ?nbsp;  <br />          ValueAxis rangeAxis = plot.getRangeAxis();      <br />          rangeAxis.setLabelFont(yfont);    <br />          rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色   <br />          rangeAxis.setTickLabelFont(yfont);     <br />             <br />      }  </span></p> <p><br /> <span style="color: #000000"> private static CategoryDataset getDataSet() {<br />   DefaultCategoryDataset dataset = new DefaultCategoryDataset();<br />    dataset.addValue(20, "销售图?, "Ҏ(gu)");<br />    dataset.addValue(20, "销售图?, "?);<br />    dataset.addValue(30, "销售图?, "香蕉");<br />    dataset.addValue(40, "销售图?, "葡萄");<br />    dataset.addValue(50, "销售图?, "桔子");<br />   <br />   return dataset;<br />  }<br />  public static void main(String args[]){<br />   <br />   doGet();<br />  }<br /> }</span></p> <p> </p> </span> <img src ="http://www.tkk7.com/QJames/aggbug/345845.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/QJames/" target="_blank">龍ぜD剑</a> 2011-03-06 22:36 <a href="http://www.tkk7.com/QJames/archive/2011/03/06/345845.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSH 框架之简?/title><link>http://www.tkk7.com/QJames/archive/2011/03/06/345829.html</link><dc:creator>龍ぜD剑</dc:creator><author>龍ぜD剑</author><pubDate>Sun, 06 Mar 2011 11:59:00 GMT</pubDate><guid>http://www.tkk7.com/QJames/archive/2011/03/06/345829.html</guid><wfw:comment>http://www.tkk7.com/QJames/comments/345829.html</wfw:comment><comments>http://www.tkk7.com/QJames/archive/2011/03/06/345829.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/QJames/comments/commentRss/345829.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/QJames/services/trackbacks/345829.html</trackback:ping><description><![CDATA[<span style="color: #ff0000">hibernate工作原理<br /> </span>原理Q?br /> 1.dq解析配|文?br /> 2.dq解析映信息,创徏SessionFactory<br /> 3.打开Sesssion<br /> 4.创徏事务Transation<br /> 5.持久化操?br /> 6.提交事务<br /> 7.关闭Session<br /> 8.关闭SesstionFactory<br /> <br /> Z么要用:(x)<br /> 1. 对JDBC讉K数据库的代码做了装Q大大简化了数据讉K层繁琐的重复性代码?br /> <br /> 2. Hibernate是一个基于JDBC的主持久化框架Q是一个优U的ORM实现。他很大E度的简化DAO层的~码工作<br /> <br /> 3. hibernate使用Java反射机制Q而不是字节码增强E序来实现透明性?br /> <br /> 4. hibernate的性能非常好,因ؓ(f)它是个轻量框架。映的灉|性很。它支持各种关系数据库,从一对一到多对多的各U复杂关pR?br /> <br /> 2Q?Hibernate是如何gq加?<br /> 1. Hibernate2延迟加蝲实现Qa)实体对象 b)集合QCollectionQ?br /> <br /> 2. Hibernate3 提供了属性的延迟加蝲功能<br /> <br /> 当Hibernate在查询数据的时候,数据q没有存在与内存中,当程序真正对数据的操作时Q对象才存在与内存中Q就实现了gq加载,他节省了服务器的内存开销Q从而提高了服务器的性能?br /> <br /> 3QHibernate中怎样实现cM间的关系?(如:(x)一对多、多对多的关p?<br /> <br /> cMcM间的关系主要体现在表与表之间的关p进行操作,它们都市对对象进行操作,我们E序中把所有的表与c都映射在一P它们通过配置文g中的many-to-one、one-to-many、many-to-many?br /> <br /> 4Q?说下Hibernate的缓存机?br /> <br /> 1. 内部~存存在Hibernate中又叫一U缓存,属于应用事物U缓?br /> <br /> 2. 二~存Q?br /> a) 应用?qing)缓?br /> b) 分布式缓?br /> 条gQ数据不?x)被W三方修攏V数据大在可接受范围、数据更新频率低、同一数据被系l频J用、非 关键数据<br /> c) W三方缓存的实现<br /> <br /> 5Q?Hibernate的查询方?br /> Sql、Criteria,object comptosition<br /> HqlQ?br /> 1?属性查?br /> 2?参数查询、命名参数查?br /> 3?兌查询<br /> 4?分页查询<br /> 5?l计函数<br /> <br /> 6Q?如何优化HibernateQ?br /> 1.使用双向一对多兌Q不使用单向一对多<br /> 2.灉|使用单向一对多兌<br /> 3.不用一对一Q用多对一取代<br /> 4.配置对象~存Q不使用集合~存<br /> 5.一对多集合使用Bag,多对多集合用Set<br /> 6. l承cM用显式多?br /> 7. 表字D要,表关联不要怕多Q有二~存?br /> <br /> <br /> <br /> <span style="color: #ff0000">spring工作原理</span><br /> 1.spring mvch有的h都提交给DispatcherServlet,它会(x)委托应用pȝ的其他模块负责负责对hq行真正的处理工作?br /> 2.DispatcherServlet查询一个或多个HandlerMapping,扑ֈ处理h的Controller.<br /> 3.DispatcherServlet误求提交到目标Controller<br /> 4.Controllerq行业务逻辑处理后,?x)返回一个ModelAndView<br /> 5.Dispathcher查询一个或多个ViewResolver视图解析?扑ֈModelAndView对象指定的视囑֯?br /> 6.视图对象负责渲染q回l客L(fng)?br /> <br /> Z么用Q?br /> {AOP 让开发h员可以创建非行ؓ(f)性的x点,UCؓ(f)横切x点,q将它们插入到应用程序代码中。?AOP 后,公共服务 Q比如日志、持久性、事务等Q就可以分解成方面ƈ应用到域对象上,同时不会(x)增加域对象的对象模型的复杂性?br /> IOC 允许创徏一个可以构造对象的应用环境Q然后向q些对象传递它们的协作对象。正如单?倒置 所表明的,IOC 像?q来?JNDI。没有用一堆抽象工厂、服务定位器、单元素QsingletonQ和直接构造(straight constructionQ,每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaboratorQ?br /> <span style="color: #00ff00">Spring即一个AOP框架Q也是一IOC容器</span>?Spring 最好的地方是它有助于?zhn)替换对象。有?SpringQ只要用 JavaBean 属性和配置文g加入依赖性(协作对象Q。然后可以很Ҏ(gu)地在需要时替换hcM接口的协作对象。}<br /> <br /> <br /> <br /> <br /> Spring 框架是一个分层架构,?7 个定义良好的模块l成。Spring 模块构徏在核心容器之上,核心容器定义了创建、配|和理 bean 的方式,如图 1 所C?br /> <br /> l成 Spring 框架的每个模块(或组Ӟ都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下Q?br /> <br /> ?核心容器Q核心容器提?Spring 框架的基本功能。核心容器的主要lg?BeanFactoryQ它是工厂模式的实现。BeanFactory 使用控制反{ QIOCQ模式将应用E序的配|和依赖性规范与实际的应用程序代码分开?br /> <br /> ?Spring 上下文:(x)Spring 上下文是一个配|文Ӟ?Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电(sh)子邮件、国际化、校验和调度功能?br /> <br /> ?Spring AOPQ通过配置理Ҏ(gu),Spring AOP 模块直接面向方面的~程功能集成C Spring 框架中。所以,可以很容易地?Spring 框架理的Q何对象支?AOP。Spring AOP 模块为基?Spring 的应用程序中的对象提供了事务理服务。通过使用 Spring AOPQ不用依?EJB lgQ就可以声明性事务管理集成到应用E序中?br /> <br /> ?Spring DAOQJDBC DAO 抽象层提供了有意义的异常层次l构Q可用该l构来管理异常处理和不同数据库供应商抛出的错误消息。异常层ơ结构简化了错误处理Qƈ且极大地降低了需要编写的异常代码数量Q例如打开和关闭连接)。Spring DAO 的面?JDBC 的异帔R从通用?DAO 异常层次l构?br /> <br /> ?Spring ORMQSpring 框架插入了若q个 ORM 框架Q从而提供了 ORM 的对象关pdP其中包括 JDO、Hibernate ?iBatis SQL Map。所有这些都遵从 Spring 的通用事务?DAO 异常层次l构?br /> <br /> ?Spring Web 模块QWeb 上下文模块徏立在应用E序上下文模块之上,为基?Web 的应用程序提供了上下文。所以,Spring 框架支持?Jakarta Struts 的集成。Web 模块q简化了处理多部分请求以?qing)将h参数l定到域对象的工作?br /> <br /> ?Spring MVC 框架QMVC 框架是一个全功能的构?Web 应用E序?MVC 实现。通过{略接口QMVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText ?POI?br /> <br /> Spring 框架的功能可以用在Q?J2EE 服务器中Q大多数功能也适用于不受管理的环境。Spring 的核心要Ҏ(gu)Q支持不l定到特?J2EE 服务的可重用业务和数据访问对象。毫无疑问,q样的对象可以在不同 J2EE 环境 QWeb ?EJBQ、独立应用程序、测试环境之间重用?br /> <br /> IOC ?AOP<br /> <br /> 控制反{模式Q也UC依赖性介入)的基本概忉|Q不创徏对象Q但是描q创建它们的方式。在代码中不直接与对象和服务q接Q但在配|文件中描述哪一个组仉要哪一Ҏ(gu)务。容器(?Spring 框架中是 IOC 容器Q?负责这些联pd一赗?br /> <br /> 在典型的 IOC 场景中,容器创徏了所有对象,q设|必要的属性将它们q接在一P军_什么时间调用方法。下表列Z IOC 的一个实现模式?br /> <br /> <br /> <span style="color: #ff0000">struts工作原理</span><br /> <br /> Struts工作机制Qؓ(f)什么要使用StrutsQ?br /> 工作机制Q?br /> Struts的工作流E?<br /> 在web应用启动时就?x)加载初始化ActionServlet,ActionServlet?br /> struts-config.xml文g中读取配|信?把它们存攑ֈ各种配置对象<br /> 当ActionServlet接收C个客戯求时,执行如下流E?<br /> -(1)索和用户h匚w的ActionMapping实例,如果不存?p回请求\径无效信? <br /> -(2)如果ActionForm实例不存?创Z个ActionForm对象,把客h交的表单数据保存到ActionForm对象? <br /> -(3)Ҏ(gu)配置信息军_是否需要表单验?如果需要验?p用ActionForm的validate()Ҏ(gu); <br /> -(4)如果ActionForm的validate()Ҏ(gu)q回null或返回一个不包含ActionMessage的ActuibErrors对象, pC单验证成? <br /> -(5)ActionServletҎ(gu)ActionMapping所包含的映信息决定将h转发l哪个Action,如果相应?Action实例不存?先创徏q个实例,然后调用Action的execute()Ҏ(gu); <br /> -(6)Action的execute()Ҏ(gu)q回一个ActionForward对象,ActionServlet在把客户h转发l?ActionForward对象指向的JSPlg; <br /> -(7)ActionForward对象指向JSPlg生成动态网?q回l客? <br /> <br /> Z么要用:(x)<br /> JSP、Servlet、JavaBean技术的出现l我们构建强大的企业应用pȝ提供了可能。但用这些技术构建的pȝ非常的繁乱,所以在此之上,我们需要一个规则、一个把q些技术组lv来的规则Q这是框架QStruts便应q而生?br /> <br /> ZStruts开发的应用?cȝ件构成:(x)控制器组件、模型组件、视囄?br /> <br /> 8Q?Struts的validate框架是如何验证的Q?br /> 在struts配置文g中配|具体的错误提示Q再在FormBean中的validate()Ҏ(gu)具体调用?br /> <br /> 9Q?说下Struts的设计模?br /> MVC模式: web应用E序启动时就?x)加载ƈ初始化ActionServler。用h交表单时Q一个配|好的ActionForm对象被创建,q被填入表单相应的数据,ActionServlerҎ(gu)Struts-config.xml文g配置好的讄军_是否需要表单验证,如果需要就调用ActionForm?ValidateQ)验证后选择请求发送到哪个ActionQ如果Action不存在,ActionServlet?x)先创徏q个对象Q然后调?Action的executeQ)Ҏ(gu)。ExecuteQ)从ActionForm对象中获取数据,完成业务逻辑Q返回一个ActionForward对象QActionServlet再把客户h转发lActionForward对象指定的jsplgQActionForward对象指定的jsp生成动态的|页Q返回给客户?br /> <br /> <br /> <img src ="http://www.tkk7.com/QJames/aggbug/345829.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/QJames/" target="_blank">龍ぜD剑</a> 2011-03-06 19:59 <a href="http://www.tkk7.com/QJames/archive/2011/03/06/345829.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开源框? Spring Demohttp://www.tkk7.com/QJames/archive/2011/03/05/345801.html龍ぜD剑龍ぜD剑Sat, 05 Mar 2011 13:49:00 GMThttp://www.tkk7.com/QJames/archive/2011/03/05/345801.htmlhttp://www.tkk7.com/QJames/comments/345801.htmlhttp://www.tkk7.com/QJames/archive/2011/03/05/345801.html#Feedback0http://www.tkk7.com/QJames/comments/commentRss/345801.htmlhttp://www.tkk7.com/QJames/services/trackbacks/345801.html
        ?核心容器Q核心容器提?Spring 框架的基本功能。核心容器的主要lg?BeanFactoryQ它是工厂模式的实现。BeanFactory 使用控制反{ QIOCQ?模式应用程序的配置和依赖性规范与实际的应用程序代码分开?br />
  ?Spring 上下?/strong>QSpring 上下文是一个配|文Ӟ?Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电(sh)子邮件、国际化、校验和调度功能?br />
  ?Spring AOPQ通过配置理Ҏ(gu),Spring AOP 模块直接面向方面的~程功能集成C Spring 框架中。所以,可以很容易地?Spring 框架理的Q何对象支?AOP。Spring AOP 模块为基?Spring 的应用程序中的对象提供了事务理服务。通过使用 Spring AOPQ不用依?EJB lgQ就可以声明性事务管理集成到应用E序中?br />
在此 我做了个demo ZSpring的核心Ioc(inversion of control) 与面向切面编EAOP(Aspect Oriented Programming)。。。。?br />

q个例子主要完成的义务逻辑是对信息的保存,主要代码如下Q?br />

package com.dr.service;

import com.dr.DAO.ProductDAO;
import com.dr.model.Product;

public class ProductService {
 private ProductDAO productDAO;
 public void add(Product product){
  productDAO.save(product);
 }
 public ProductService(ProductDAO productDAO){
  super();
  System.out.println("ProductServic :ProductService");
  this.productDAO = productDAO;
 }
}


DAO层代码如下:(x)


package com.dr.DAO;

import com.dr.model.Product;

 

public interface ProductDAO {
 public void save(Product product);

}





package com.dr.DAO.impl;

import com.dr.DAO.ProductDAO;
import com.dr.model.Product;

 

 

public class ProductDAOImpl implements ProductDAO {
 private String name;
 private int id;
 public String getName() {
  return name;
 }
 public void setName(String name) {
  System.out.println("ProductDAOImple :setName");
  this.name = name;
 }
 public int getId() {
  return id;
 }
 public void setId(int id) {
  System.out.println("ProductDAOImpl :setId");
  this.id = id;
 }
 public void save(Product product) {
  //Hibernate
  //JDBC
  //XML
  //NetWork
  System.out.println("ProductDAOImpl :save :product saved!");
  this.toString();
 }
 public String toString(){
  System.out.println("id:"+id+"|name:"+name);
  return null;
  
 }

}



beans.xml部分代码Q?br />

<?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.5.xsd">

 <bean id="p" class="com.dr.DAO.impl.ProductDAOImpl">
     <!--采用 setter()Ҏ(gu)依赖注入-->
   <property name="name" value="11"></property>
    <property name="id" value="22"></property>
 </bean>
 <bean id="productService" class="com.dr.service.ProductService">
  <constructor-arg>
   <ref bean="p"/>
  </constructor-arg>
 </bean>
 
</beans>



试cȝ代码如下所C:(x)



package com.dr.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.dr.model.Product;
import com.dr.service.ProductService;

 


//Dependency Injection  依赖注入
//Inverse of Control    控制反{
public class ProductServiceTest {

 @Test
 public void testAdd() throws Exception {
   //实例化应用上下文QXmlc\径应用上下文
  ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");
  //getBean() 所得到得对象是Objectcd的,所有在此必d制{换。。?br />   ProductService service = (ProductService) ctx.getBean("productService");
  
  Product product = new Product();
  product.toString();
  product.setId(20);
  product.setName("Ҏ(gu)");
  service.add(product);
  
 }

}




龍ぜD剑 2011-03-05 21:49 发表评论
]]>
计数?/title><link>http://www.tkk7.com/QJames/archive/2011/03/04/345671.html</link><dc:creator>龍ぜD剑</dc:creator><author>龍ぜD剑</author><pubDate>Fri, 04 Mar 2011 01:12:00 GMT</pubDate><guid>http://www.tkk7.com/QJames/archive/2011/03/04/345671.html</guid><wfw:comment>http://www.tkk7.com/QJames/comments/345671.html</wfw:comment><comments>http://www.tkk7.com/QJames/archive/2011/03/04/345671.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/QJames/comments/commentRss/345671.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/QJames/services/trackbacks/345671.html</trackback:ping><description><![CDATA[<span style="color: #00ff00">用JavaE序</span>   <br />      现在许多|站都必ȝ计浏览量Q在此ؓ(f)了记录当前在Uh敎ͼ我设计了一个计数器。其功能是:(x)计数器就自动加一Q离开时就自动减一。?br /> q里做了个很小?span style="color: #00ff00">demo:</span><br /> Java 代码如下Q?br /> <br /> <br /> <p>package com.dr.demo2.servlet;</p> <p>import java.io.IOException;<br /> import java.sql.Timestamp;<br /> import java.util.ArrayList;</p> <p>import javax.servlet.ServletException;<br /> import javax.servlet.ServletRequestEvent;<br /> import javax.servlet.ServletRequestListener;<br /> import javax.servlet.http.HttpServletRequest;<br /> import javax.servlet.http.HttpServletResponse;<br /> import javax.servlet.http.HttpSession;<br /> import javax.servlet.http.HttpSessionEvent;<br /> import javax.servlet.http.HttpSessionListener;</p> <p>import org.apache.log4j.Logger;</p> <p>public class SessionCounter implements HttpSessionListener,<br />   ServletRequestListener {<br />  private static Logger log = Logger.getLogger(SessionCounter.class);<br />  private static final String CONTENT_TYPE = "text/html; charset=GBK";<br />  private static int activeSessions = 0;// 当前zd的h?br />  private HttpServletRequest request;<br />  private static ArrayList list = new ArrayList();// 用来存放不同ip的地址</p> <p> public void init() throws ServletException {<br />   log.info("SessionCounter init!");</p> <p> }</p> <p> public void doGet(HttpServletRequest request, HttpServletResponse response)<br />    throws ServletException, IOException {<br />   log.info("SessionCounter doGet!");<br />   response.setContentType(CONTENT_TYPE);<br />   HttpSession session = request.getSession();<br />  }</p> <p> public void destroy() {<br />   log.info("SessionCounter destroy!");<br />  }</p> <p> public void requestDestroyed(ServletRequestEvent event) {<br />   // To change body of implemented methods use File | Settings | File<br />   // Templates.<br />   log.info("SessionCounter requestDestroyed!");<br />  }</p> <p> public void requestInitialized(ServletRequestEvent sre) {<br />   request = (HttpServletRequest) sre.getServletRequest();<br />   log.info("SessionCounter requestInitialized!");<br />  }</p> <p> public void sessionCreated(HttpSessionEvent httpSessionEvent) {<br />   log.info("SessionCounter sessionCreater!");<br />   String sessionId = httpSessionEvent.getSession().getId();<br />   Timestamp createTime = new Timestamp(System.currentTimeMillis());<br />   String loginIp = request.getRemoteAddr();<br />   boolean rs = true;<br />   if (list.size() > 0) {<br />    for (int i = 0; i < list.size(); i++) {<br />     if (loginIp.equals(list.get(i))) {<br />      rs = false;<br />     }<br />    }<br />   }<br />   if (rs) { // 如果队列中存在相同的IP 则SESSION不增?br />    list.add(loginIp);<br />    log.info("ipList队列新增ip: " + loginIp);<br />    activeSessions++;<br />    log.info("新增SESSION,sessionId = " + sessionId + "; createTime = "<br />      + createTime + "; loginIp = " + loginIp + "; 当前总SESSIONgؓ(f) "<br />      + activeSessions);<br />   }<br />  }</p> <p> public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {<br />   log.info("SessionCounter sessionDestroyed!");<br />   String sessionId = httpSessionEvent.getSession().getId();<br />   Timestamp overTime = new Timestamp(System.currentTimeMillis());<br />   String loginIp = request.getRemoteAddr();<br />   if (activeSessions > 0) {<br />    if (list.size() > 0) {<br />     for (int i = 0; i < list.size(); i++) {<br />      if (loginIp.equals(list.get(i))) {<br />       list.remove(i);<br />       log.info("ipList队列U除ip: " + loginIp);<br />      }<br />     }<br />    }<br />    activeSessions--; // 在用户销毁的时?从队列中t出q个IP<br />    log.info("销毁SESSION,sessionId = " + sessionId + "; overTime = "<br />      + overTime + "; loginIp = " + loginIp + "; 当前总SESSIONgؓ(f) "<br />      + activeSessions);<br />   }<br />  }</p> <p> public static int getActiveSessions() {<br />   log.info("SessionCounter getActiveSessions!");<br />   return activeSessions;<br />  }</p> <p> public void setActiveSessions(int i) {<br />   log.info("SessionCounter setActiveSessions!");<br />   activeSessions = i;<br />  }<br /> </p> <p>}<br /> <br /> <span style="color: #ff0000">jsp  部分代码</span><br /> <br /> <br /> </p> <p><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%><br /> <%<br /> String path = request.getContextPath();<br /> String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";<br /> %></p> <p><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /> <html><br />   <head><br />     <base href="<%=basePath%>"><br />     <br />     <title>My JSP 'online.jsp' starting page</title><br />     <br />  <meta http-equiv="pragma" content="no-cache"><br />  <meta http-equiv="cache-control" content="no-cache"><br />  <meta http-equiv="expires" content="0">    <br />  <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><br />  <meta http-equiv="description" content="This is my page"><br />  <!--<br />  <link rel="stylesheet" type="text/css" href="styles.css"><br />  --></p> <p>  </head><br />   <br />   <body><br />     <%@   page   import= "com.dr.demo2.servlet.SessionCounter"   %>   <br />  在线Q?<%=  SessionCounter.getActiveSessions()   %>?nbsp; <br />   </body><br /> </html><br /> <br /> 启动tomcat ,在浏览器中输入:(x)http://127.0.0.1:8080/OnlineCount/online.jsp<br /> <br /> 执行效果如下Q?br /> <br />  <img src="file:///C:\DOCUME~1\James\LOCALS~1\Temp\)MV$A1J$3RZUUK5$BH$7N46.jpg" alt="" /> </p> <img src ="http://www.tkk7.com/QJames/aggbug/345671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/QJames/" target="_blank">龍ぜD剑</a> 2011-03-04 09:12 <a href="http://www.tkk7.com/QJames/archive/2011/03/04/345671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java Mail处理http://www.tkk7.com/QJames/archive/2011/03/03/345591.html龍ぜD剑龍ぜD剑Thu, 03 Mar 2011 05:47:00 GMThttp://www.tkk7.com/QJames/archive/2011/03/03/345591.htmlhttp://www.tkk7.com/QJames/comments/345591.htmlhttp://www.tkk7.com/QJames/archive/2011/03/03/345591.html#Feedback0http://www.tkk7.com/QJames/comments/commentRss/345591.htmlhttp://www.tkk7.com/QJames/services/trackbacks/345591.html Java 代码Q?br />

 import org.springframework.context.ApplicationContext;  
    import org.springframework.context.support.ClassPathXmlApplicationContext;  
    import org.springframework.mail.SimpleMailMessage;  
    import org.springframework.mail.javamail.JavaMailSender;  
    
    public class Main {  
     
        /** 
        * @param args 
       */ 
        public static void main(String[] args) {  
         // TODO Auto-generated method stub   
           ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");  
          JavaMailSender mailSender= (JavaMailSender) context.getBean("mailSender");  
            SimpleMailMessage mail = new SimpleMailMessage();  
          mail.setFrom("avasd@126.com");  
            mail.setTo("abcd@gmail.com");  
          mail.setSubject(" 试Mail E序");  
          mail.setText("q里是发送的内容");  
           mailSender.send(mail);   
        }  
     
    } 


配置文g中的主要代码如下Q?br /> Spring-Mail.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
   
     <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
        <property name="host" value="smtp.126.com" /> 
        <property name="port" value="25" /> 
        <property name="username" value="avasd@126.com" /> 
        <property name="password" value="你的密码" /> 
        <property name="javaMailProperties"> 
            <props> 
                <prop key="mail.smtp.auth">true</prop> 
            </props> 
        </property> 
    </bean>
 

 
</beans>

在此用纯Java代码做了个小demo来发送电(sh)子邮Ӟ(x)

package com.cmcc.mail;
/**  
* 发送邮仉要用的基本信息  
*/   
import java.util.Properties;   
public class MailSenderInfo {   
    // 发送邮件的服务器的IP和端?nbsp;  
    private String mailServerHost;   
    private String mailServerPort = "25";   
    // 邮g发送者的地址   
    private String fromAddress;   
    // 邮g接收者的地址   
    private String toAddress;   
    // 登陆邮g发送服务器的用户名和密?nbsp;  
    private String userName;   
    private String password;   
    // 是否需要n份验?nbsp;  
    private boolean validate = false;   
    // 邮g主题   
    private String subject;   
    // 邮g的文本内?nbsp;  
    private String content;   
    // 邮g附g的文件名   
    private String[] attachFileNames;     
    /**  
      * 获得邮g?x)话属?nbsp; 
      */   
    public Properties getProperties(){   
      Properties p = new Properties();   
      p.put("mail.smtp.host", this.mailServerHost);   
      p.put("mail.smtp.port", this.mailServerPort);   
      p.put("mail.smtp.auth", validate ? "true" : "false");   
      return p;   
    }   
    public String getMailServerHost() {   
      return mailServerHost;   
    }   
    public void setMailServerHost(String mailServerHost) {   
      this.mailServerHost = mailServerHost;   
    }  
    public String getMailServerPort() {   
      return mailServerPort;   
    }  
    public void setMailServerPort(String mailServerPort) {   
      this.mailServerPort = mailServerPort;   
    }  
    public boolean isValidate() {   
      return validate;   
    }  
    public void setValidate(boolean validate) {   
      this.validate = validate;   
    }  
    public String[] getAttachFileNames() {   
      return attachFileNames;   
    }  
    public void setAttachFileNames(String[] fileNames) {   
      this.attachFileNames = fileNames;   
    }  
    public String getFromAddress() {   
      return fromAddress;   
    }   
    public void setFromAddress(String fromAddress) {   
      this.fromAddress = fromAddress;   
    }  
    public String getPassword() {   
      return password;   
    }  
    public void setPassword(String password) {   
      this.password = password;   
    }  
    public String getToAddress() {   
      return toAddress;   
    }   
    public void setToAddress(String toAddress) {   
      this.toAddress = toAddress;   
    }   
    public String getUserName() {   
      return userName;   
    }  
    public void setUserName(String userName) {   
      this.userName = userName;   
    }  
    public String getSubject() {   
      return subject;   
    }  
    public void setSubject(String subject) {   
      this.subject = subject;   
    }  
    public String getContent() {   
      return content;   
    }  
    public void setContent(String textContent) {   
      this.content = textContent;   
    }   
}  

 

package com.cmcc.mail;
import java.util.Date;   
import java.util.Properties;  
import javax.mail.Address;   
import javax.mail.BodyPart;   
import javax.mail.Message;   
import javax.mail.MessagingException;   
import javax.mail.Multipart;   
import javax.mail.Session;   
import javax.mail.Transport;   
import javax.mail.internet.InternetAddress;   
import javax.mail.internet.MimeBodyPart;   
import javax.mail.internet.MimeMessage;   
import javax.mail.internet.MimeMultipart;   
 
/**  
* 单邮Ӟ不带附g的邮Ӟ发送器  
*/   
public class SimpleMailSender  {   
/**  
  * 以文本格式发送邮?nbsp; 
  * @param mailInfo 待发送的邮g的信?nbsp; 
  */   
    public boolean sendTextMail(MailSenderInfo mailInfo) {   
      // 判断是否需要n份认?nbsp;  
      MyAuthenticator authenticator = null;   
      Properties pro = mailInfo.getProperties();  
      if (mailInfo.isValidate()) {   
      // 如果需要n份认证,则创Z个密码验证器   
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());   
      }  
      // Ҏ(gu)邮g?x)话属性和密码验证器构造一个发送邮件的session   
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);   
      try {   
      // Ҏ(gu)session创徏一个邮件消?nbsp;  
      Message mailMessage = new MimeMessage(sendMailSession);   
      // 创徏邮g发送者地址   
      Address from = new InternetAddress(mailInfo.getFromAddress());   
      // 讄邮g消息的发送?nbsp;  
      mailMessage.setFrom(from);   
      // 创徏邮g的接收者地址Qƈ讄到邮件消息中   
      Address to = new InternetAddress(mailInfo.getToAddress());   
      mailMessage.setRecipient(Message.RecipientType.TO,to);   
      // 讄邮g消息的主?nbsp;  
      mailMessage.setSubject(mailInfo.getSubject());   
      // 讄邮g消息发送的旉   
      mailMessage.setSentDate(new Date());   
      // 讄邮g消息的主要内?nbsp;  
      String mailContent = mailInfo.getContent();   
      mailMessage.setText(mailContent);   
      // 发送邮?nbsp;  
      Transport.send(mailMessage);  
      return true;   
      } catch (MessagingException ex) {   
          ex.printStackTrace();   
      }   
      return false;   
    }   
      
    /**  
      * 以HTML格式发送邮?nbsp; 
      * @param mailInfo 待发送的邮g信息  
      */   
    public static boolean sendHtmlMail(MailSenderInfo mailInfo){   
      // 判断是否需要n份认?nbsp;  
      MyAuthenticator authenticator = null;  
      Properties pro = mailInfo.getProperties();  
      //如果需要n份认证,则创Z个密码验证器    
      if (mailInfo.isValidate()) {   
        authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());  
      }   
      // Ҏ(gu)邮g?x)话属性和密码验证器构造一个发送邮件的session   
      Session sendMailSession = Session.getDefaultInstance(pro,authenticator);   
      try {   
      // Ҏ(gu)session创徏一个邮件消?nbsp;  
      Message mailMessage = new MimeMessage(sendMailSession);   
      // 创徏邮g发送者地址   
      Address from = new InternetAddress(mailInfo.getFromAddress());   
      // 讄邮g消息的发送?nbsp;  
      mailMessage.setFrom(from);   
      // 创徏邮g的接收者地址Qƈ讄到邮件消息中   
      Address to = new InternetAddress(mailInfo.getToAddress());   
      // Message.RecipientType.TO属性表C接收者的cd为TO   
      mailMessage.setRecipient(Message.RecipientType.TO,to);   
      // 讄邮g消息的主?nbsp;  
      mailMessage.setSubject(mailInfo.getSubject());   
      // 讄邮g消息发送的旉   
      mailMessage.setSentDate(new Date());   
      // MiniMultipartcL一个容器类Q包含MimeBodyPartcd的对?nbsp;  
      Multipart mainPart = new MimeMultipart();   
      // 创徏一个包含HTML内容的MimeBodyPart   
      BodyPart html = new MimeBodyPart();   
      // 讄HTML内容   
      html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");   
      mainPart.addBodyPart(html);   
      // MiniMultipart对象讄为邮件内?nbsp;  
      mailMessage.setContent(mainPart);   
      // 发送邮?nbsp;  
      Transport.send(mailMessage);   
      return true;   
      } catch (MessagingException ex) {   
          ex.printStackTrace();   
      }   
      return false;   
    }   
}  

 


试E序如下Q?br />

package com.cmcc.mail;
/*****************************************************
 *
 * @author Ҏ(gu)?nbsp;*
 * @since 2011-3-3 *
 *****************************************************/
public class TestMail {

 public static void main(String[] args){  
        //q个cM要是讄邮g  
       MailSenderInfo mailInfo = new MailSenderInfo();   
       mailInfo.setMailServerHost("smtp.126.com");   
       mailInfo.setMailServerPort("25");   
       mailInfo.setValidate(true);   
       mailInfo.setUserName("邮箱号@126.com");   
       mailInfo.setPassword("邮箱密码");//(zhn)的邮箱密码   
       mailInfo.setFromAddress("good_hans@126.com");   
       mailInfo.setToAddress("656426515@qq.com");  
       mailInfo.setSubject("计算中心北调N知?);
        
       String content = "";
       String header = "敬?+"aa 老师:\n"+
         "(zhn)好Q\n"+
         "q是一计中心(北)排课q_自动l?zhn)发送的机房评通知单,h按照下表的相应的旉通知学生到相应的机房上课\n"+
         "谢谢(zhn)的支持Q?zhn)的满意是我们计算中心最大的快乐Q\n"+
         "如果(zhn)对课表有Q何疑问,h拨打0315-2792027\n";
        
        
         content += "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n"+
         
                 "<html xmlns=\"http://www.w3.org/1999/xhtml\">\n" +
           "<head>\n" +
           "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n" +
//           "<!--[if IE]><link href='/css/fkie.css' rel='stylesheet' type='text/css' media='all' /><![endif]-->\n" +
           "<style type=\"text/css\">\n" +
           "<!--\n"+  
           "html{border:0;height:100%;border:0;}\n" +
           "body{margin:0;padding:0;height:100%;font:12px/120% Arial, Helvetica, sans-serif; text-align:left;}\n" +
           "#main{ padding:15px 25px 15px 10px;}\n" +
           ".tables{ background:#b2bac5; width:100%; margin:1px 0;}\n"+     
           ".tables caption{background:#e5e8ed; padding:1px 0 0 0; _border-bottom:solid 3px #fff; height:26px;}\n"+
           ".tables th{text-align:center;background:#eef7e2; color:#016bb7; font-weight: normal; line-height:22px;}\n"+
           ".tables tr{ background:#fff;}\n"+
           ".tables tr td{line-height:22px;}\n"+
           ".area-contrl{background:#e5e8ed; padding:1px 0 0 0; _border-bottom:solid 3px #fff; height:26px;}\n" +
           "-->\n"+ 
           "</style>\n" +
           "</head>\n" +
           "<body>\n" +
           "<div id=\"main\">\n" +
           "<div class=\"area-contrl\">\n" +
           "<table class='tables' border='0' cellpadding='3' cellspacing='1'><tr><th width='35'>周次</th><th width='35'>星期</th><th width='35'>讲次</th><th width='180'>机房</th><th width='50'>人数</th><th width='100'>任课教师</th><th width='200'>班</th><th width='300'>评名称</th></tr>\n"
                      
                    +"<tr><td align='center'>aaa</td><td align='center'>bbb</td><td align='center'>ccc</td><td align='center'>ddd</td><td align='center'>ccc</td><td align='center'>ddd</td><td align='center'>eee</td><td align='center'>fff</td></tr>\n"
         +"<tr><td align='center'>aaa</td><td align='center'>bbb</td><td align='center'>ccc</td><td align='center'>ddd</td><td align='center'>ccc</td><td align='center'>ddd</td><td align='center'>eee</td><td align='center'>fff</td></tr>\n"
         +"<tr><td align='center'>aaa</td><td align='center'>bbb</td><td align='center'>ccc</td><td align='center'>ddd</td><td align='center'>ccc</td><td align='center'>ddd</td><td align='center'>eee</td><td align='center'>fff</td></tr>\n"
         +"<tr><td align='center'>aaa</td><td align='center'>bbb</td><td align='center'>ccc</td><td align='center'>ddd</td><td align='center'>ccc</td><td align='center'>ddd</td><td align='center'>eee</td><td align='center'>fff</td></tr>";
        
         content += "</table></div></div></body></html>";
         System.out.println(content);

        
         mailInfo.setContent(content);
         //q个cM要来发送邮?nbsp; 
         SimpleMailSender sms = new SimpleMailSender();  
//         sms.sendTextMail(mailInfo);//发送文体格?nbsp;  
         sms.sendHtmlMail(mailInfo);//发送html格式  
   } 
}


 



龍ぜD剑 2011-03-03 13:47 发表评论
]]>
jQuery Ajax~程http://www.tkk7.com/QJames/archive/2011/03/02/345487.html龍ぜD剑龍ぜD剑Wed, 02 Mar 2011 07:11:00 GMThttp://www.tkk7.com/QJames/archive/2011/03/02/345487.htmlhttp://www.tkk7.com/QJames/comments/345487.htmlhttp://www.tkk7.com/QJames/archive/2011/03/02/345487.html#Feedback0http://www.tkk7.com/QJames/comments/commentRss/345487.htmlhttp://www.tkk7.com/QJames/services/trackbacks/345487.htmljQuery实是一个挺好的轻量U的JS框架Q能帮助我们快速的开发JS应用Qƈ在一定程度上改变了我们写JavaScript代码的习(fn)惯?/p>

废话说Q直接进入正题,我们先来看一些简单的Ҏ(gu)Q这些方法都是对jQuery.ajax()q行装以方便我们用的Ҏ(gu)Q当Ӟ如果要处理复杂的逻辑Q还是需要用到jQuery.ajax()?q个后面?x)说?.

1. load( url, [data], [callback] ) Q蝲入远E?HTML 文g代码q插入至 DOM 中?/span>

url (String) : h的HTML늚URL地址?

data (Map) : (可选参? 发送至服务器的 key/value 数据?

callback (Callback) : (可选参? h完成?不需要是success?/span>)的回调函数?

q个Ҏ(gu)默认使用 GET 方式来传递的Q如果[data]参数有传递数据进去,׃(x)自动转换为POST方式的。jQuery 1.2 中,可以指定选择W,来筛选蝲入的 HTML 文档QDOM 中将仅插入筛选出?HTML 代码。语法Ş?"url #some > selector"?/p>

q个Ҏ(gu)可以很方便的动态加载一些HTML文gQ例如表单?br />

2. jQuery.get( url, [data], [callback] )Q用GET方式来进行异步请?/span>

参数Q?

url (String) :  发送请求的URL地址.

data (Map) : (可? 要发送给服务器的数据Q以 Key/value 的键值对形式表示Q会(x)做ؓ(f)QueryString附加到请求URL中?

callback (Function) : (可? 载入成功时回调函?只有当Response的返回状态是success才是调用该方??/p>

 

 

 

q是一个简单的 GET h功能以取代复?$.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函敎ͼ请?$.ajax。示例代码:(x)

		$.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){
//q回?data 可以?xmlDoc, jsonObj, html, text, {等.
this; // 在这里this指向的是Ajaxh的选项配置信息Q请参考下?/span>
alert(data);
//alert(textStatus);//h状态:(x)successQerror{等?br />
当然q里捕捉不到errorQ因为error的时候根本不?x)运行该回调函?/span>
//alert(this);
});
CZ代码Q?/pre>

$.getJSON("servlet/TableServlet?flag=query", "", function(response){
        $.each(response,function(i){
         sel.src.add({id: response[i].id, name: response[i].name, address: response[i].address});
        })
       sel.render();
      });
    });

下面我做了一?利用jQuery Ajax 做了以小的Demo;

其中java 部分主要代码Q?br />

package com.bx.web.action;

 

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONArray;

import com.bx.dao.impl.HibernateUserDAO;
import com.bx.hibernate.User;

public class TableServlet extends HttpServlet {

 
 /**
  *
  */
 private static final long serialVersionUID = 5469871499359894890L;

 User user=new User();
 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  
  this.doPost(request, response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  String flag=request.getParameter("flag");
  if(flag!=null&&"flag".equals("flag")){
   query(request,response);
  }
 }

 public void query(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException {
  HibernateUserDAO test=new HibernateUserDAO();
  List<User> list = test.getUserList();
  
  for(User userlist:list){
   System.out.println("Table UserName+++"+userlist.getName()+
   "......Hibernate Dbconfig....User.Address"+userlist.getAddress());
  }
  
  JSONArray jr=JSONArray.fromObject(list);
  String jsonUser=jr.toString();
  PrintWriter out = response.getWriter();
  out.print(jsonUser);
  out.flush();
  out.close();
 }
}

jsp中的代码如下Q?br />

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>tabledemo</title>
    <link href="css/style.css" type="text/css" rel="stylesheet"/>
    <script src="scripts/jquery.js" type="text/javascript"></script>
    <script src="scripts/PagerView.js" type="text/javascript"></script>
    <script src="scripts/SelectorView.js" type="text/javascript"></script>
    <script src="scripts/SortView.js" type="text/javascript"></script>
    <script src="scripts/TableView.js" type="text/javascript"></script>
 
  <script type="text/javascript">
  $ (document).ready (function() {
   var sel = new SelectorView('sel_div');
    sel.src.header = {
     id   : '~号',
     name  : '姓名',
     address: '地址'
     
    };
    sel.dst.header = {
     id : '~号',
     name: '姓名',
     address: '地址'
    };
    sel.src.dataKey = 'id';
    sel.src.title = '可?;
    
    sel.dst.dataKey = 'id';
    sel.dst.title = '已?;
    sel.render();
    $.getJSON("servlet/TableServlet?flag=query", "", function(response){
        $.each(response,function(i){
         sel.src.add({id: response[i].id, name: response[i].name, address: response[i].address});
        })
       sel.render();
      });
    });
  </script>
  </head>
 
   
  <body>
   
 <div id="sel_div"></div>

 


  </body>
</html>



最后在览器URL中输入:(x)http://localhost:8080/TableWebProject/pagerList.jspq行l果

   

一些资?/span>

一个jQuery的Ajax Form表单插gQ?a style="background-color: rgb(255,255,216)" >http://www.malsup.com/jquery/form/

一个专门生成Loading囄的站点:(x)http://ajaxload.info/   大家觉得那些Loading比较炫的可以在这里跟帖晒一下,方便大家取用Q嘎?



 



龍ぜD剑 2011-03-02 15:11 发表评论
]]>ZServlet Ajax~程http://www.tkk7.com/QJames/archive/2011/01/01/342113.html龍ぜD剑龍ぜD剑Sat, 01 Jan 2011 04:36:00 GMThttp://www.tkk7.com/QJames/archive/2011/01/01/342113.htmlhttp://www.tkk7.com/QJames/comments/342113.htmlhttp://www.tkk7.com/QJames/archive/2011/01/01/342113.html#Feedback0http://www.tkk7.com/QJames/comments/commentRss/342113.htmlhttp://www.tkk7.com/QJames/services/trackbacks/342113.html AJAX全称?#8220;Asynchronous JavaScript and XML”Q异步JavaScript和XMLQ,是指一U创Z互式|页应用的网开发技术?

传统的web应用允许用户填写表单(form)Q当提交表单时就向web服务器发送一个请求。服务器接收q处理传来的表单Q然后返回一个新的网c这个做法浪费了许多带宽Q因为在前后两个面中的大部分HTML代码往往是相同的。由于每ơ应用的交互都需要向服务器发送请求,应用的响应时间就依赖于服务器的响应时间。这D了用L(fng)面的响应比本地应用慢得多?

与此不同QAJAX应用可以仅向服务器发送ƈ取回必需的数据,它用SOAP或其它一些基于XML的web service接口Qƈ在客L(fng)采用JavaScript处理来自服务器的响应。因为在服务器和览器之间交换的数据大量减少Q结果我们就能看到响应更快的应用。同时很多的处理工作可以在发求的客户端机器上完成Q所以Web服务器的处理旉也减了?

Ajax应用E序的优势在于:(x)

1. 通过异步模式Q提升了用户体验

2. 优化了浏览器和服务器之间的传输,减少不必要的数据往q,减少了带宽占?

3. Ajax引擎在客L(fng)q行Q承担了一部分本来由服务器承担的工作,从而减了大用户量下的服务器负载?br />  

XMLHttpRequest 对象

通过使用 XMLHttpRequest 对象Q?/font>web 开发者可以做到在面已加载后从服务器更新面Q?/font>



Ajax属性:(x)

1. onreadystatechange 属?/font>

onreadystatechange 属性存有处理服务器响应的函数。下面的代码定义一个空的函敎ͼ可同时对 onreadystatechange 属性进行设|:(x)


例如Q?br />  function getResult(username,password){
      
         createXmlHttp();                                //创徏XMLHttpRequest对象
         xmlHttp.open("POST", "UserServlet?flag=add&username="+username+"&password="+password);

2. readyState 属?/font>

readyState 属性存有服务器响应的状态信息。每?nbsp;readyState 改变Ӟonreadystatechange 函数׃(x)被执行?br />


状?/span> 描述
 0
h未初始化Q在调用 open() 之前Q?br />   1 h已提出(调用 send() 之前Q?/span>
 2 h已发送(q里通常可以从响应得到内容头部)
  3
h处理中(响应中通常有部分数据可用,但是服务器还没有完成响应Q?br />   4 h已完成(可以讉K服务器响应ƈ使用它)
       
其中send()Ҏ(gu)需要包含有三个参数Q第一个是发送请求所使用的(Get()和Post()Ҏ(gu)Q,W二个参数是规定服务器端脚本的UrlQ三个参数规定是讄对请求进行异步处理?br />
׃不再q里费口舌了Q来个Servlet Ajax的小例子吧:(x)
 首先 我们来配|Web.xml。在里面配置一个servlet,跟往怸P(x)

<servlet>
      <servlet-name>selectcity</servlet-name>
      <servlet-class>com.bx.servlet.SelectCityServlet</servlet-class>
   </servlet>
   <servlet-mapping>
      <servlet-name>selectcity</servlet-name>
      <url-pattern>/selectCityServlet</url-pattern>
   </servlet-mapping>

现在看我们的.jsp 文gQ?br />

<html>
<head>
<title>select city</title>

</head>
<script type="text/javascript">

function getResult(stateVal) {
    alert(stateVal);
   var url = "selectCityServlet?state="+stateVal;
   if (window.XMLHttpRequest) {
         req = new XMLHttpRequest();
   }else if (window.ActiveXObject) {
         req = new ActiveXObject("Microsoft.XMLHTTP");
   }
   if(req){
    req.open("GET",url, true);
    req.onreadystatechange = complete;
    req.send(null);
      }
}

function complete(){
   if (req.readyState == 4) {
      if (req.status == 200) {
    var city = req.responseXML.getElementsByTagName("city");
    var str=new Array();
    for(var i=0;i<city.length;i++){
       str[i]=city[i].firstChild.data;
             }
  
         buildSelect(str,document.getElementById("city"));
     }
   }
}
function buildSelect(str,sel) {
      
   for(var i=0;i<str.length;i++) {
       sel.options[sel.options.length]=new Option(str[i],str[i]);
   }
}
</script>
<body>
<select name="state" onChange="getResult(this.value)">
   <option value="">Select</option>
    <option value="zj">江</option>
    <option value="zs">江苏</option>
</select>

<select id="city">
   <option value="">CITY</option>
</select>
</body>
</html>


最后我们来看看servlet文g吧:(x)

public class SelectCityServlet extends HttpServlet {

 
  public SelectCityServlet() {
    super();
  }

  public void destroy() {
    super.destroy();
  }

  public void doGet(HttpServletRequest request, HttpServletResponse response)
  throws ServletException, IOException {
   
  
     try {
   Thread.sleep(1000*3);
  } catch (InterruptedException e) {
   e.printStackTrace();
  }
  System.out.println("Hello | " + request.getParameter("state"));
  response.setContentType("text/xml");
  response.setCharacterEncoding("utf-8");
     response.setHeader("Cache-Control", "no-cache");
     String state = request.getParameter("state");
  StringBuffer sb=new StringBuffer("<state>");
     if ("zj".equals(state)){
    sb.append("<city>hangzhou</city><city>huzhou</city>");
  } else if("zs".equals(state)){
    sb.append("<city>nanjing</city><city>yangzhou</city><city>suzhou</city>");
     } else if("hb".equals(state)){
       sb.append("<city>tangshan</city><city>handan</city>");
      
     }
  sb.append("</state>");
  System.out.println(sb);
  PrintWriter out=response.getWriter();
  out.write(sb.toString());
  out.close();
  
   }
   }


q里是不是挺单的呢,首先是通过request取得state参数Q然后通过state参数生成相应的xml文gQ最后在讲xml中的数据从printWriter输出。。目前ؓ(f)止,q个例子已经l束了,是不是挺单的呢?Q?br />
q行l果如下Q?br />  




龍ぜD剑 2011-01-01 12:36 发表评论
]]>
MVChttp://www.tkk7.com/QJames/archive/2010/12/11/340352.html龍ぜD剑龍ぜD剑Sat, 11 Dec 2010 09:45:00 GMThttp://www.tkk7.com/QJames/archive/2010/12/11/340352.htmlhttp://www.tkk7.com/QJames/comments/340352.htmlhttp://www.tkk7.com/QJames/archive/2010/12/11/340352.html#Feedback2http://www.tkk7.com/QJames/comments/commentRss/340352.htmlhttp://www.tkk7.com/QJames/services/trackbacks/340352.html
MVC (Model View Controler) 本来是存在于DesktopE序中的QM是指的是数据模型QV是指的是用户界面QC则是控制器。用MVC的目的是M和V的实C码分,从而同一个程序可以用不同的表现形式。比如说一批统计数据你可以分别用柱状图Q饼状图来表C。C存在的目的是保M和V的同步,一旦M改变了,V应该同步更新?br />

MVC构架?
      

  
说明Q?br />  




模型——视䏀—控制器(MVC)是Xerox PARC在很在代为编E的语言Smalltalk--80发明的一UY件设计模式,至今q用仍ؓ(f)q泛。最q几q被推荐为Sun公司J2EEq_设计模式Qƈ且受到越来越多的使用 ColdFusion ?PHP 的开发者的Ƣ迎。模型-视图Q控制器模式是一个有用的工具,它有很多好处Q但也有一些缺炏V?br />
 MVC如何工作

  MVC是一个设计模式,他是强制的用程序的输入Q处理和输出分开。用MVC应用E序分成了三个核心部Ӟ(x)模型Q视图,控制器。他们各自处理自qd?br />


模型

模型表示企业数据和业务规则。在MVC的三个部件中Q模型拥有最多的处理d。例如它可能用象EJBs和ColdFusion Componentsq样的构件对象来处理数据库。被模型q回的数据是中立的,是说模型与数据格式无关Q这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一ơ就可以被多个视N用,所以减了代码的重复性?br />

视图

    视图是用L(fng)到ƈ与之交互的界面。如何处理应用程序界面变得越来越有挑战性。MVC一个大的好处是他能Z的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生Q不这些数据是联机存储的还是一个雇员列表,作ؓ(f)视图来讲Q它只是作ؓ(f)一U输出数据ƈ允许用户操纵的方式?br />
 
控制?

控制器接受用L(fng)输入q调用模型和视图d成用L(fng)需求。所以当单击Web面中的链接和发送HTML表单Ӟ控制器本w不输出M东西和做M处理。它只是接收hq决定调用哪个模型构件去处理hQ然后用定用哪个视图来昄模型处理q回的数据?


MVCq不适合型甚至中等规模的应用程序,p大量旉MVC应用到规模ƈ不是很大的应用程序通常?x)得不偿失。但是MVC设计模式是一个很好创Y件的途径Q它所提倡的一些原则,像内容和昄互相分离可能比较好理解。但是如果你要隔L型、视囑֒控制器的构gQ你可能需要重新思考你的应用程序,其是应用程序的构架斚w。如果你肯接受MVCQƈ且有能力应付它所带来的额外的工作和复杂性,MVC会(x)使你的Y件在健壮性,代码重用和结构方面上一个新的台阶?br />

q里我做了个比较单的E序其中使用了MVC思想Q?br /> 在这里创Z一个实体的c,也就是M(model),即Userc:(x)

package com.bx.jstl;

public class User {
 private int id;  //声明了两l属性;
 private String name;
 
 public int getId() {
  return id;
 }
 public void setId(int id) {
  this.id = id;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 

}


然后在此~写了一个类JSTLServlet 是承了cHttpServletcȝQ?br />

package com.bx.JSServlet;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bx.jstl.User;

public class JSTLServlet extends HttpServlet{
 public void doGet(HttpServletRequest request , HttpServletResponse response)
  throws IOException , ServletException
 {
  List<User> list = new ArrayList<User>();
     for(int i = 0 ; i < 8 ; i++)
     {
      User u = new User();
    u.setId(i);
    u.setName("name"+i);
    list.add(u);
     }
     request.setAttribute("UserList", list);
     request.getRequestDispatcher("/c_forEach.jsp").forward(request, response);
 }
}
现在我们应该来配|WEB.xml了,q是每个Web目都做的一步,如下所C:(x)

<servlet>
 <servlet-name>JSTLServlet</servlet-name>
 <servlet-class>com.bx.JSServlet.JSTLServlet</servlet-class>
</servlet>

<servlet-mapping>
 <servlet-name>JSTLServlet</servlet-name>
 <url-pattern>/jstl</url-pattern>
</servlet-mapping>

下面我们建立一个c_forEach.jspQ在其body中的~写代码如下Q?br />
<table>
     <tr><th>ID</th><th>index</th><th>count</th><th>isFirst?</th><th>isLast</th></tr>
     
     <c:forEach var="user" items="${UserList}" varStatus="status">
       <tr>
    <td>
     ${user.id}
    </td>
    <td>
     ${user.name}
    </td>
    <td>
     ${status.index}
    </td>
    <td>
     ${status.count}
    </td>
    <td>
     ${status.first}
    </td>
    <td>
     ${status.last}
    </td>
        </tr>
     </c:forEach>
    </table>

现在我们开启comcat q行此项目,在浏览器中输入:(x)

http://localhost:8080/JSP_JSTL_Project/jstl

得到|页为:(x)
 











龍ぜD剑 2010-12-11 17:45 发表评论
]]>
վ֩ģ壺 ѹ˸Ƶվ| ձһҹ| ɫWW47| avרۿƷ| ɫͼ.com| ഺɫƷ| һavҩ߳| ˳ѵӰ| avavav| ޾ƷľþĻ| ٶ100%ڵѹۿ| ˬˬƬav| һƵۿ| һƵ| ŮƵۿ| ҹ׾糡| ߿vַ| Ұ¾þø| ޳777777Ʒ| AVרAVֻ鶹| ޹Ƭ߹ۿ| ޾ѡ߹ۿ| Ľղ2020| avһĦ| պƵ| aѹۿƵ| պƷһƵ| ȫһëƬ߲| Ƭһһ߹ۿ | Ƶ| þþþѹۿ| Ļþ2017| ԴƵ| AVۺ뾫Ʒ| þþþӰԺŮ| ѾƷһ35| 69˳Ƶý | 97ɫ׳Ƶ| ޹Ʒַ| | ޹Ʒþ98|