﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-yxhxj2006-随笔分类-J2EE</title><link>http://www.blogjava.net/yxhxj2006/category/52368.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 12 Apr 2015 06:48:50 GMT</lastBuildDate><pubDate>Sun, 12 Apr 2015 06:48:50 GMT</pubDate><ttl>60</ttl><item><title>从程序员到CTO的Java技术路线图</title><link>http://www.blogjava.net/yxhxj2006/archive/2015/04/11/424308.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Sat, 11 Apr 2015 05:41:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2015/04/11/424308.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/424308.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2015/04/11/424308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/424308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/424308.html</trackback:ping><description><![CDATA[<h4>&nbsp; 在技术方面无论我们怎么学习，总感觉需要提升自已不知道自己处于什么水平了。但如果有清晰的指示图供参考还是非常不错的，这样我们清楚的知道我们大概处于那个阶段和水平。&nbsp;</h4><h4><a href="http://pan.baidu.com/share/home?uk=4076915866&amp;view=share" target="_blank" style="color: #108ac6;"><img alt="" src="http://dl.iteye.com/upload/attachment/0082/7802/3a0ef496-b1c8-365c-853b-310fec44b836.jpg" style="border: 0px;" /></a></h4><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><h4><span style="color: #0000ff;">Java程序员</span></h4><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">高级特性</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;反射、泛型、注释符、自动装箱和拆箱、枚举类、可变</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;参数、可变返回类型、增强循环、静态导入</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;核心编程</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IO、多线程、实体类、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;集合类、正则表达式、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XML和属性文件</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;图形编程</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AWT（Java2D/JavaSound/JMF）、Swing、SWT、JFace</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网路编程</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Applet、Socket/TCP/UDP、NIO、RMI、CORBA</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java语法基础</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;类、抽象类、接口、最终类、静态类、匿名类、内部类、异常类、编码规范</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java开发环境</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JDK、JVM、Eclipse、Linux</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">Java核心编程技术</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">Java，设计而又非常精巧的语言。学习Java，须从Java开发环境开始，到Java语法，再到Java的核心API。</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1.Java开发入门：Java开发环境的安装与使用，包括JDK命令、EclipseIDE、Linux下Java程序的开发和部署等。</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2.Java语法基础：基于JDK和Eclipse环境，进行Java核心功能开发，掌握Java面向对象的语法构成，包括类、抽象类、接口、最终类、静态类、匿名类、内部类、异常的编写。</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3.Java核心API：基于JDK提供的类库，掌握三大核心功能：</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A。Java核心编程:包括Java编程的两大核心功能&#8212;&#8212;Java输入/输出流和多线程，以及常用的辅助类库&#8212;&#8212;实体类、集合类、正则表达式、XML和属性文件。</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;B。Java图形编程：包括Sun的GUI库AWT（Java2D、JavaSound、JMF）和Swing，IBM和GUI库SWT和Jface;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;C. Java网路编程：Applet组件编程，Socket编程，NIO非阻塞Socket编程、RMI和CORBA分布式开发。</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;4.Java高级特性：掌握JDK1.4、JDK5.0、JDK6.0中的Java高级特性，包括反射、泛型、注释，以及java高级特性&#8212;&#8212;自动装箱和拆箱、枚举类、可变参数、可变返回类型、增强循环、静态导入等。</p><h4><span style="color: #0000ff;">JavaEE初级软件工程师</span></h4><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">JSF框架开发技术</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;配置文件（页面导航、后台Bean）、JSF组件库（JSF EL语言、HTML标签、事件处理、）、JSF核心库（格式转换、输入验证、国际化）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">Javaweb核心开发技术&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;开发环境（Eclipse、Linux）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;三大组件（JSP、JavaBean、Servlet）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;扩展技术（EL、JSTL、Taglib）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">网页开发技术</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTML、XML、CSS、JavaScript、AJAX</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;数据库设计技术</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL、MySql、Oracle、SQLServer、JDBC</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">Web服务器（Tomcat/Jetty/Resin/JBossWeb）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">JavaWeb核心技术：</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaWeb项目开发的全过程可以分解为：</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;网页开发+数据库设计&#8212;&#8212;&gt;JavaWeb项目开发，其中，javaWeb由6项基本技术组成：JSP+JavaBean+Servlet+EL+JSTL+Taglib，而JSF正是将这6种技术进行有机结合的技术框架：</p><h4><span style="color: #0000ff;">JavaEE中级软件工程师</span></h4><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">四种经典架构SSH1、SSI1、SSH2、SSI2</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Struts1表现层框架</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;入门配置、核心组件、标签库、国际化、数据检验、数据库开发、Sitemesh集成、集成Hibernate/iBATIS</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Struts2表现层框架</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;入门配置、核心组件、标签库、国际化、数据校验、Sitemesh集成转换器、拦截器、集成Hibernate/iBATIS</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Spring业务层框架</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;入门配置、IoC容器、MVC、标签库、国际化、数据校验、数据库开发</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hibernate持久层框架</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySQL、Oracle、SQLServer iBATIS持久层框架</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MySQL、Oracle、SQLServer</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">Web服务器（Tomcat/Jetty/Resin/JBossWeb）</p><h4><span style="color: #0000ff;">Java高级软件工程师</span></h4><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">javaWeb开源技术与框架</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;工作流、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">规则引擎</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">搜索引擎、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">缓存引擎 、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;任务调度、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">身份认证</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;报表服务、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">系统测试、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;集群、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">负载平衡、</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">故障转移</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">JavaWeb分布式开发技术</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">JTA（Java事物管理）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JAAS（Java验证和授权服务）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNDI（Java命名和目录服务）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JavaMail（Java邮件服务）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">JMS（java信息服务）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">WebService(web服务)</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">JCA（java连接体系）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">JMS（java管理体系）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">应用服务器（JBossAS/WebLogic/WebSphere）</p><h4><span style="color: #0000ff;">JavaEE系统架构师</span></h4><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面向云架构（COA）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;COA、SaaS、网格计算、集群计算、分布式计算、云计算</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面向资源架构（ROA）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ROA、RESI</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;面向web服务架构（SOA）</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WebService、SOA、SCA、ESB、OSGI、EAI</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java设计模式</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;创建式模式：抽象工厂/建造者/工厂方法/原型/单例</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;构造型模式：适配器/桥接/组合/装饰/外观/享元/代理</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;行为型模式：责任链/命令/解释器/迭代子/中介者/备忘录/观察者/状态/策略/模板方法/访问者</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Java与UML建模</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;对象图、用例图、组件图、部署图、序列图、交互图、活动图、正向工程与逆向工程</p><h4><span style="color: #0000ff;">CTO首席技术官</span></h4><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;发展战略</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;技术总监</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;团队提升</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;团队建设</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;项目管理</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;产品管理</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;"><span style="line-height: 25px;"><strong>企业级项目实战(带源码)地址</strong></span><span style="line-height: 25px; color: #ff0000;"><strong>：</strong></span><a href="http://zz563143188.iteye.com/blog/1825168" target="_blank" style="color: #108ac6; line-height: 25px;">http://zz563143188.iteye.com/blog/1825168</a></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;"><br /><span style="font-size: 20px;"><span style="color: #ff0000;"><strong>收集五年的开发资料下载地址<span style="color: #000000;">：&nbsp;</span></strong>&nbsp;</span><a href="http://pan.baidu.com/share/home?uk=4076915866&amp;view=share" title="http://pan.baidu.com/share/home?uk=4076915866&amp;view=share" target="_blank" style="color: #108ac6;"><span style="color: #0000ff;">http://pan.baidu.com/share/home?uk=4076915866&amp;view=share</span></a></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;"><span style="color: #993300;"><strong>&nbsp;<span style="color: #0000ff;">下面的更深入的有兴趣可以了解一下，我的目的不是要大家掌握下面的知识，只是希望扩展自己的思维，摘自牛人的技术博客。</span></strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;"><span style="color: #993300;"><strong><span style="color: #0000ff;">/**************************************************牛人必看*****************************************************************/</span></strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">系统后台框架：</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;"><img alt="" src="http://dl2.iteye.com/upload/attachment/0085/0609/5771086d-7cd4-349c-a89f-025825bc3e66.jpg" title="点击查看原始大小图片" width="700" height="1322" style="border: 0px; cursor: url(http://www.iteye.com/images/magplus.gif), pointer;" /></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;"><span style="line-height: 25px;"><strong>前端工程师技能：</strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;"><span style="line-height: 25px;"><strong><img alt="" src="http://dl2.iteye.com/upload/attachment/0085/0607/cbc54b80-ffe1-36e6-8939-15db79356469.jpg" title="点击查看原始大小图片" width="700" height="629" style="border: 0px; cursor: url(http://www.iteye.com/images/magplus.gif), pointer;" /></strong></span></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">B2C电子商务基础系统架构解析<br />运营B2C日 久，越来越深刻的意识到IT系统对确保规范化业务流转，支撑消费者端的均一服务有着决定性的作用。于是，一直想好好整理下相关的系统架构，怎奈俗务缠身， 一直拖到今日，猛然发现下周娃很可能就要出生，拖无可拖，快马加笔，居然整出来了。本文的重点是理清系统的逻辑关系，详细的功能模块请参见结尾附上的系统 架构图。<br />首先，聊下对系统逻辑架构的看法；我个人始终坚持认为，系统的开发与演化，前台严格follow消费者的购买流程，后台则盯牢订单流转，牢牢抓住这两条主线，才能高屋建瓴的看清B2C的逻辑链和数据流，更深刻的规划功能模块，从而更有效支撑实际业务的流转。<br />前台系统包括：商品展示，内容展示，订单确认，支付系统，用户中心四大模块<br />一，商品展示<br />按照Ebay的内部分类，任何将商品以单个或批量的方式展示给消费者的功能均应归入此系统。因此，该系统至少包括：<br />A，站内搜索（搜索提示，搜索规则，搜索成功页，搜索不成功页，相似推荐）<br />B，导航（频道导航，其他导航如销售排行，广告位，推荐位，文字链，Also buy等）<br />C，商品分类（品牌分类，品类分类，属性分类如剪裁形式）<br />D， 登陆页（商品列表页，商品详细页，商品活动页）<br />这里的访问逻辑是：A /B/C分流消费者去往相对个性化的页面，由登陆页体现商家的核心诉求和价值传递，完成call-to-action的第一步。<br />二，内容展示<br />内容展示较为简单，对纯购物品牌而言包括：<br />A，公告区<br />B，帮助中心<br />C，论坛（如需商城与论坛发生交互，则需自行开发，否则可集成discuz做同步登陆即可）<br />大家都知道，就不多说了。<br />三，订单确认<br />订单确认，就是帮助消费者正确提交订单信息的环节，看似简单，实则非常复杂，需要对很多信息逻辑判断和处理，一般由2个部分组成：<br />A，购物车（购物车浮层，购物车页面，无注册购买）<br />无注册购买是需要慎用的功能，除非刻意追求用户的短平快下单，如团购/换购，一般不推荐使用，会造成系统异常复杂，开发量也很大。<br />B，订单提交（返回购物车，收货地址&amp;地址薄，支付方式判断，配送方式，发票，订单标记，实付金额计算等等）<br />值得一提的是，几乎大多数的促销逻辑运算在这个环节完成，充分考虑各种促销方式之间的互斥与重叠是系统设计的核心，需要充分考虑各种情况，避免出现逻辑漏洞。<br />四，支付系统<br />与一般的想象不同，支付系统其实并不简单等于第三方支付工具接入：<br />A，外部支付系统（支付宝将接口，财付通接口，网银直联端口，信用ka分期端口）<br />B，内部支付系统（账户余额，积分，礼品卡，优惠券）<br />支付系统的逻辑设计不但需要考虑到各种极端情况的发生（如一张订单先用礼品卡，再用积分，最后网银支付），还要预留财务做账所需的相关字段，并充分考虑订单取消之后如何回滚各类内部账户。<br />五，用户中心<br />用户中心的实质是用户自助功能的dashboard，一般4个部分组成：<br />A，注册&amp;登陆（快速注册，完整注册，注册有礼，推荐注册，密码找回，主站id登陆，open-id登陆如QQ，新浪微博等）<br />B，订单中心（历史订单状态，中间状态订单修改，物流追踪）<br />C，服务中心（各类自助服务如退款申请，退换货申请，建议与投诉等）<br />D， 信息管理（用户基本信息管理和账户信息管理）<br />用户中心的价值在于：尽可能引导用户自行获取所需的信息并提交所需的服务，在提升服务准确率，及时性的同时降低对人工成本。<br />后台系统包括：商品&amp;促销，CRM，订单处理，WMS，采购管理，财务管理，报表管理，系统设置，WA系统9大模块<br />一， 商品&amp;促销<br />商品&amp;促销模块的核心在于确保消费者下单之前，前台内容所见即所得<br />A， 商品管理（品类管理，品牌管理，单品管理）<br />B， 促销管理（活动管理和自定义活动模板管理）<br />在上述模块中，最重要的是2个部分：单品管理中的批量产品生成的自动程序和活动管理中&#8220;共享与互斥&#8221;管理。前者用于大幅提升上新速度，后者避免促销活动失控。<br />二， CRM<br />CRM是对B2C核心资源&#8212;会员的管理，服务与再营销系统，包括如下部分：<br />A，会员管理（会员信息的增删改查和到其他系统的链接）<br />B，用户关怀（条件触发和人工触发相关EDM &amp; 短信 &amp; OB）<br />C，定向营销（会员分组和营销活动管理）<br />D， 客服管理（内容非常多，集成所有需前台与后台交互的功能，详情还是看图吧）<br />E， 呼叫中心（IVR，坐席管理，统计报表，参数传递与窗口嵌入）<br />值得注意的，EDM和短信通道市面上已经有成熟的外包服务商，一般都会外包；呼叫中心和在线客服自行开发成本太高，特别是呼叫中心系统，业务初期也都是外包的。<br />三， 订单处理<br />订单处理是在订单未正式进入仓储部门处理之前，对订单的前置性处理环节。<br />A，订单录入（电话订购，网上下单，外部团购订单，无金额订单录入如礼品单）<br />B，订单审核（自动审核和人工审核）<br />C，RMA处理（RMA申请单和RMA处理单）<br />RMA的逻辑也异常复杂，需要在效率和成本之间找平衡，确保在不拖垮仓储部门的正常出入库的前提下对消费者端快速有效close工单；对内部则需要控制成本，货损不能超过预算上限。<br />四， WMS（Warehouse Management system仓库管理系统）<br />WMS的流程很长，功能模块也很多，大致分为入库管理，库存管理，出库管理和票据管理4个模块四个模块，细细道来就是另外一篇文章了，各位可以参考 我这篇文章：庖丁解牛&#8212;B2C仓储内部运作解密（上，中，下）<a href="http://blog.sina.com.cn/wangxida0855" style="color: #108ac6;"><span style="color: #0000ff;">http://blog.sina.com.cn/wangxida0855</span></a><br />五， 采购管理<br />采购管理的核心是有效跟进采购合同/发票的状态，大货的采购入库/退库，财务结算和在仓库存查询和处理。<br />A，供应商管理（供应商信息管理，合同发票管理）<br />B，采购单管理（PO单管理，负PO单管理）<br />C，库存管理（库存查询，库存占用单，库存变动log）<br />六， 财务管理<br />B2C的财务管理，主要是对供应商，渠道和内部费用支出的成本控制。<br />A，供应商结算<br />B，渠道结算<br />C，配送结算<br />D， 内部结算<br />说实在的，哥对财务这块也不算很了解，大家将就看看，图片上有明细。<br />七， 报表管理<br />报表是B2C业务的宏观表现，理论上说，每个部门的KPI都应该从中找到。<br />A，搜索报表（站内搜索量查询）<br />B，销售报表（多个维度销量查询，优惠券使用情况，报表导出）<br />C，财务报表<br />D， 客服报表（客服日报和坐席报表）<br />前者反映与消费者发生的日常交互（包括正常与异常），后者考核客服的工作绩效<br />E， 仓储物流报表<br />这几块报表，是业务运作的核心，涉及到公司机密，就不能写的太细了，见谅。<br />八， 系统设置<br />这块大家都知道是干嘛的，也就不多说了，分成三块。<br />A，基础设置（和业务有关的一些字段值）<br />B，权限设置（不同账号的操作权限和操作记录）<br />C，其他设置<br />九， WA系统（Web Analytcis）<br />网站分析系 统，几乎全是外购，很少有能够自建的，即使自建，最多做几个简单的模块。用于实战的，要么是免费的GA（Google Analytics），要么是昂贵的Omniture。这块的知识，细细说来也是另外一篇文章了，有兴趣的同学可以看我这篇科普文章：揭秘&#8212;我所知道的网 站分析（上，下）&nbsp;<a href="http://blog.sina.com.cn/wangxida0855" style="color: #108ac6;"><span style="color: #0000ff;">http://blog.sina.com.cn/wangxida0855</span></a><br />最后，上全系统大图，再感慨一句，B2C系统，真是一个大工程啊。</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">&nbsp;</p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;"><img alt="" src="http://dl2.iteye.com/upload/attachment/0085/0611/eaf82edc-f85d-337d-ac45-fe357cc15a01.jpg" title="点击查看原始大小图片" width="700" height="3383" style="border: 0px; cursor: url(http://www.iteye.com/images/magplus.gif), pointer;" /></p><p style="margin: 0px; padding: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; line-height: 25.200000762939453px;">fr&nbsp;&nbsp;<a href="http://blog.sina.com.cn/s/blog_59d6717c0100syh3.html" style="color: #108ac6;"><span style="color: #0000ff;">http://blog.sina.com.cn/s/blog_59d6717c0100syh3.html</span></a></p><img src ="http://www.blogjava.net/yxhxj2006/aggbug/424308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2015-04-11 13:41 <a href="http://www.blogjava.net/yxhxj2006/archive/2015/04/11/424308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>基于注解的 Spring MVC 简单入门</title><link>http://www.blogjava.net/yxhxj2006/archive/2013/11/04/405982.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Mon, 04 Nov 2013 15:23:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2013/11/04/405982.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/405982.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2013/11/04/405982.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/405982.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/405982.html</trackback:ping><description><![CDATA[<p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">以下内容是经过自己整理资料、官方文档所得：</p><hr style="padding: 0px; margin: 0px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; " /><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: Arial; line-height: normal; font-size: 19px; "><span style="padding: 0px; margin: 0px; font-family: Calibri; ">web.xml</span>&nbsp;<span style="padding: 0px; margin: 0px; font-family: SimSun; ">配置：</span></span></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: Arial; line-height: normal; font-size: 19px; ">&nbsp;</span></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">&lt;servlet&gt; 	&lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt; 	&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt; 	&lt;init-param&gt; 		&lt;description&gt;加载/WEB-INF/spring-mvc/目录下的所有XML作为Spring MVC的配置文件&lt;/description&gt; 		&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt; 		&lt;param-value&gt;/WEB-INF/spring-mvc/*.xml&lt;/param-value&gt; 	&lt;/init-param&gt; 	&lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; 	&lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt; 	&lt;url-pattern&gt;*.htm&lt;/url-pattern&gt; &lt;/servlet-mapping&gt;</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">这样，所有的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">.htm</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">的请求，都会被</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">DispatcherServlet</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">处理；</span></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">初始化 DispatcherServlet 时，该框架在 web 应用程序WEB-INF 目录中寻找一个名为[servlet-名称]</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">-</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">servlet.xml的文件，并在那里定义相关的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Beans</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">，重写在全局中定义的任何</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Beans</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">，像上面的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">web.xml</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">中的代码，对应的是dispatcher</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">-servlet.xml</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">；当然也可以使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">&lt;init-param&gt;</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">元素，手动指定配置文件的路径；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; ">dispatcher</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">-servlet.xml</span>&nbsp;<span style="padding: 0px; margin: 0px; ">配置：</span></strong></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">&lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;beans xmlns="http://www.springframework.org/schema/beans"        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"        xmlns:mvc="http://www.springframework.org/schema/mvc"        xmlns:p="http://www.springframework.org/schema/p"        xmlns:context="http://www.springframework.org/schema/context"        xmlns:aop="http://www.springframework.org/schema/aop"        xmlns:tx="http://www.springframework.org/schema/tx"        xsi:schemaLocation="http://www.springframework.org/schema/beans 			http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 			http://www.springframework.org/schema/context  			http://www.springframework.org/schema/context/spring-context-3.0.xsd 			http://www.springframework.org/schema/aop  			http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 			http://www.springframework.org/schema/tx  			http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 			http://www.springframework.org/schema/mvc  			http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 			http://www.springframework.org/schema/context  			http://www.springframework.org/schema/context/spring-context-3.0.xsd"&gt;     &lt;!--         使Spring支持自动检测组件，如注解的Controller     --&gt;     &lt;context:component-scan base-package="com.minx.crm.web.controller"/&gt;         &lt;bean id="viewResolver"           class="org.springframework.web.servlet.view.InternalResourceViewResolver"           p:prefix="/WEB-INF/jsp/"           p:suffix=".jsp" /&gt; &lt;/beans&gt;</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-weight: bold; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">第一个</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Controller</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">：</span></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">package com.minx.crm.web.controller;  import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class IndexController {     @RequestMapping("/index")     public String index() {         return "index";     } }</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@Controller</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">注解标识一个控制器，</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@RequestMapping</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">注解标记一个访问的路径（</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">/index.htm</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">），</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">return "index"</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">标记返回视图（</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">index.jsp</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">）；</span></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">注：如果</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@RequestMapping</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">注解在类级别上，则表示一相对路径，在方法级别上，则标记访问的路径；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; ">从</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@RequestMapping</span><span style="padding: 0px; margin: 0px; ">注解标记的访问路径中获取参数：</span></strong></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Spring MVC</span>&nbsp;<span style="padding: 0px; margin: 0px; font-family: SimSun; ">支持</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">RESTful</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">风格的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">URL</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">参数，如：</span></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">@Controller public class IndexController {      @RequestMapping("/index/{username}")     public String index(@PathVariable("username") String username) {         System.out.print(username);         return "index";     } }</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">在</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@RequestMapping</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">中定义访问页面的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">URL</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">模版，使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">{}</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">传入页面参数，使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@PathVariable</span>&nbsp;<span style="padding: 0px; margin: 0px; font-family: SimSun; ">获取传入参数，即可通过地址：</span><a href="http://localhost:8080/crm/index/tanqimin.htm" style="padding: 0px; margin: 0px; color: #3e62a6; outline: 0px; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">http://localhost:8080/crm/index/tanqimin.htm</span></a>&nbsp;<span style="padding: 0px; margin: 0px; font-family: SimSun; ">访问；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; ">根据不同的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Web</span><span style="padding: 0px; margin: 0px; ">请求方法，映射到不同的处理方法：</span></strong></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">使用登陆页面作示例，定义两个方法分辨对使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">GET</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">请求和使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">POST</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">请求访问</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">login.htm</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">时的响应。</span><span style="padding: 0px; margin: 0px; font-weight: bold; font-family: SimSun; ">可以使用处理</span><span style="padding: 0px; margin: 0px; font-weight: bold; font-family: Calibri; ">GET</span><span style="padding: 0px; margin: 0px; font-weight: bold; font-family: SimSun; ">请求的方法显示视图，使用</span><span style="padding: 0px; margin: 0px; font-weight: bold; font-family: Calibri; ">POST</span><span style="padding: 0px; margin: 0px; font-weight: bold; font-family: SimSun; ">请求的方法处理业务逻辑</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">；</span></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">@Controller public class LoginController {     @RequestMapping(value = "/login", method = RequestMethod.GET)     public String login() {         return "login";     }     @RequestMapping(value = "/login", method = RequestMethod.POST)     public String login2(HttpServletRequest request) {             String username = request.getParameter("username").trim();             System.out.println(username);         return "login2";     } }</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">在视图页面，通过地址栏访问</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">login.htm</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">，是通过</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">GET</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">请求访问页面，因此，返回登陆表单视图</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">login.jsp</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">；当在登陆表单中使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">POST</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">请求提交数据时，则访问</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">login2</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">方法，处理登陆业务逻辑；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; ">防止重复提交数据，可以使用<span style="padding: 0px; margin: 0px; font-weight: bold; ">重定向视图：</span></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">return "redirect:/login2"</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; ">可以传入方法的参数类型：</strong></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; "></strong></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; "></strong></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; "><strong style="padding: 0px; margin: 0px; ">@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session) { 	String username = request.getParameter("username"); 	System.out.println(username); 	return null; }</strong></pre><strong style="padding: 0px; margin: 0px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><br style="padding: 0px; margin: 0px; " /></strong><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">可以传入</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">HttpServletRequest</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">、</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">HttpServletResponse</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">、</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">HttpSession</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">，值得注意的是，如果第一次访问页面，</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">HttpSession</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">没被创建，可能会出错；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; ">其中，<span style="padding: 0px; margin: 0px; color: blue; ">String username = request.getParameter("username");</span>可以转换为传入的参数：</p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; ">&nbsp;</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(HttpServletRequest request, HttpServletResponse response, HttpSession session,@RequestParam("username") String username) { 	String username = request.getParameter("username"); 	System.out.println(username); 	return null; }</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@RequestParam</span>&nbsp;<span style="padding: 0px; margin: 0px; font-family: 新宋体; ">注解获取</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">GET</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">请求或</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">POST</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">请求提交的参数；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; ">获取</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Cookie</span><span style="padding: 0px; margin: 0px; ">的值：使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@CookieValue</span>&nbsp;<span style="padding: 0px; margin: 0px; ">：</span></strong></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-weight: bold; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">获取</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">PrintWriter</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">：</span></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">可以直接在</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Controller</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">的方法中传入</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">PrintWriter</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">对象，就可以在方法中使用：</span></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(PrintWriter out, @RequestParam("username") String username) { 	out.println(username); 	return null; }</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">获取表单中提交的值，并封装到</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">POJO</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">中，传入</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Controller</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">的方法里：</span></strong></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: Calibri; ">POJO</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">如下（</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">User.java</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">）：</span></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">public class User{ 	private long id; 	private String username; 	private String password;  	&#8230;此处省略getter,setter... }</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">通过表单提交，直接可以把表单值封装到</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">User</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">对象中：</span></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(PrintWriter out, User user) { 	out.println(user.getUsername()); 	return null; }</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">可以把对象，</span><span style="padding: 0px; margin: 0px; font-family: SimSun-ExtB; ">put</span>&nbsp;<span style="padding: 0px; margin: 0px; font-family: SimSun; ">入获取的</span><span style="padding: 0px; margin: 0px; font-family: SimSun-ExtB; ">Map</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">对象中，传到对应的视图：</span></strong></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; "></strong></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; "></strong></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; "><strong style="padding: 0px; margin: 0px; ">@RequestMapping(value = "login", method = RequestMethod.POST) public String testParam(User user, Map model) { 	model.put("user",user); 	return "view"; }</strong></pre><strong style="padding: 0px; margin: 0px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></strong><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">在返回的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">view.jsp</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">中，就可以根据</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">key</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">来获取</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">user</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">的值（通过</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">EL</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">表达式，</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">${user }</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">即可）；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Controller</span><span style="padding: 0px; margin: 0px; ">中方法的返回值：</span></strong></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 'Lucida Grande', Calibri, Arial, sans-serif; "><span style="padding: 0px; margin: 0px; font-family: Calibri; ">void</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">：多数用于使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">PrintWriter</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">输出响应数据；</span></span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 'Lucida Grande', Calibri, Arial, sans-serif; "><span style="padding: 0px; margin: 0px; font-family: Calibri; ">String</span>&nbsp;<span style="padding: 0px; margin: 0px; font-family: 新宋体; ">类型</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">：返回该</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">String</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">对应的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">View Name</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">；</span></span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; ">任意类型对象：</p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 'Lucida Grande', Calibri, Arial, sans-serif; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">返回</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">ModelAndView</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">：</span></span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; ">自定义视图（</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">JstlView</span><span style="padding: 0px; margin: 0px; ">，</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">ExcelView</span><span style="padding: 0px; margin: 0px; ">）：</span></strong></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><strong style="padding: 0px; margin: 0px; "><span style="padding: 0px; margin: 0px; ">拦截器（</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Inteceptors</span><span style="padding: 0px; margin: 0px; ">）：</span></strong></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; "><strong style="padding: 0px; margin: 0px; "></strong></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; "></strong></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; "><strong style="padding: 0px; margin: 0px; ">public class MyInteceptor implements HandlerInterceptor { 	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o)  		throws Exception { 		return false; 	} 	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object o, ModelAndView mav)  		throws Exception { 	} 	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception excptn)  		throws Exception { 	} }</strong></pre><strong style="padding: 0px; margin: 0px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></strong><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">拦截器需要实现</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">HandleInterceptor</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">接口，并实现其三个方法：</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; "><span style="padding: 0px; margin: 0px; ">preHandle：拦截器的前端，执行控制器之前所要处理的方法，通常用于权限控制、日志，其中，</span><span style="padding: 0px; margin: 0px; ">Object o</span><span style="padding: 0px; margin: 0px; ">表示下一个拦截器；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; "><span style="padding: 0px; margin: 0px; ">postHandle</span><span style="padding: 0px; margin: 0px; ">：控制器的方法已经执行完毕，转换成视图之前的处理；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; "><span style="padding: 0px; margin: 0px; ">afterCompletion</span><span style="padding: 0px; margin: 0px; ">：视图已处理完后执行的方法，通常用于释放资源；</span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 'Lucida Grande', Calibri, Arial, sans-serif; "><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">在</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">MVC</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">的配置文件中，配置拦截器与需要拦截的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">URL</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">：</span></span></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">&lt;mvc:interceptors&gt; 	&lt;mvc:interceptor&gt; 		&lt;mvc:mapping path="/index.htm" /&gt; 		&lt;bean class="com.minx.crm.web.interceptor.MyInterceptor" /&gt; 	&lt;/mvc:interceptor&gt; &lt;/mvc:interceptors&gt;</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; ">国际化：</strong></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 'Lucida Grande', Calibri, Arial, sans-serif; "><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">在</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">MVC</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">配置文件中，配置国际化属性文件：</span></span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 'Lucida Grande', Calibri, Arial, sans-serif; "></span></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">&lt;bean id="messageSource" 	class="org.springframework.context.support.ResourceBundleMessageSource" 	p:basename="message"&gt; &lt;/bean&gt;</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">&nbsp;</p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微软雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: 新宋体; "><span style="padding: 0px; margin: 0px; ">那么，</span><span style="padding: 0px; margin: 0px; ">Spring</span><span style="padding: 0px; margin: 0px; ">就会在项目中搜索相关的国际化属性文件，如：</span><span style="padding: 0px; margin: 0px; ">message.properties</span><span style="padding: 0px; margin: 0px; ">、</span><span style="padding: 0px; margin: 0px; ">message_zh_CN.properties</span></span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋体; font-size: 10pt; "><span style="padding: 0px; margin: 0px; ">在</span><span style="padding: 0px; margin: 0px; ">VIEW</span><span style="padding: 0px; margin: 0px; ">中，引入</span><span style="padding: 0px; margin: 0px; ">Spring</span><span style="padding: 0px; margin: 0px; ">标签：&lt;%@taglib uri="</span><a href="http://www.springframework.org/tags" style="padding: 0px; margin: 0px; color: #3e62a6; outline: 0px; "><span style="padding: 0px; margin: 0px; ">http://www.springframework.org/tags</span></a><span style="padding: 0px; margin: 0px; ">" prefix="spring" %&gt;，使用</span><span style="padding: 0px; margin: 0px; ">&lt;spring:message code="key" /&gt;</span><span style="padding: 0px; margin: 0px; ">调用，即可；</span></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">如果一种语言，有多个语言文件，可以更改</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">MVC</span><span style="padding: 0px; margin: 0px; font-family: 新宋体; ">配置文件为：</span></p><p style="padding: 0px; margin: 0in; font-family: 微软雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "></p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6; line-height: 22px; ">&lt;bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"&gt; 	&lt;property name="basenames"&gt; 		&lt;list&gt; 			&lt;value&gt;message01&lt;/value&gt; 			&lt;value&gt;message02&lt;/value&gt; 			&lt;value&gt;message03&lt;/value&gt; 		&lt;/list&gt; 	&lt;/property&gt; &lt;/bean&gt;</pre><img src ="http://www.blogjava.net/yxhxj2006/aggbug/405982.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2013-11-04 23:23 <a href="http://www.blogjava.net/yxhxj2006/archive/2013/11/04/405982.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2拦截器的使用</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388129.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 17:10:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388129.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388129.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388129.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388129.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388129.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 如何使用struts2拦截器，或者自定义拦截器。特别注意，在使用拦截器的时候，在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器)：&nbsp;源码复制打印?&lt;interceptor-ref name="checkbox"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&lt;...&nbsp;&nbsp;<a href='http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388129.html'>阅读全文</a><img src ="http://www.blogjava.net/yxhxj2006/aggbug/388129.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 01:10 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388129.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2原理(转)</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388130.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 17:10:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388130.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388130.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388130.html</trackback:ping><description><![CDATA[<span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">1.Struts 2的基本流程&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">Struts 2框架由3个部分组成：核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。在这3个部分里，Struts 2框架提供了核心控制器FilterDispatcher，而用户需要实现业务控制器和业务逻辑组件。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">2.核心控制器：FilterDispatcher&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">FilterDispatcher是Struts 2框架的核心控制器，该控制器作为一个Filter运行在Web应用中，它负责拦截所有的用户请求，当用户请求到达时，该Filter会过滤用户请求。如果用户请求以action结尾，该请求将被转入Struts 2框架处理。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">Struts 2框架获得了*.action请求后，将根据*.action请求的前面部分决定调用哪个业务逻辑组件，例如，对于login.action请求，Struts 2调用名为login的Action来处理该请求。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">Struts 2应用中的Action都被定义在struts.xml文件中，在该文件中定义Action时，定义了该Action的name属性和class属性，其中name属性决定了该Action处理哪个用户请求，而class属性决定了该Action的实现类。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">Struts 2用于处理用户请求的Action实例，并不是用户实现的业务控制器，而是Action代理&#8212;&#8212;因为用户实现的业务控制器并没有与Servlet API耦合，显然无法处理用户请求。而Struts 2框架提供了系列拦截器，该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来，传入到Action中，并回调Action 的execute方法来处理用户请求。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">显然，上面的处理过程是典型的AOP（面向切面编程）处理方式。图3.19显示了这种处理模型。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">图3.19 Struts 2的拦截器和Action&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">从图3.19中可以看出，用户实现的Action类仅仅是Struts 2的Action代理的代理目标。用户实现的业务控制器（Action）则包含了对用户请求的处理。用户的请求数据包含在 HttpServletRequest对象里，而用户的Action类无需访问HttpServletRequest对象。拦截器负责将 HttpServletRequest里的请求数据解析出来，并传给业务逻辑组件Action实例。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">3.业务控制器&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">正如从图3.19所看到的，业务控制器组件就是用户实现Action类的实例，Action类里通常包含了一个execute方法，该方法返回一个字符串&#8212;&#8212;该字符串就是一个逻辑视图名，当业务控制器处理完用户请求后，根据处理结果不同，execute方法返回不同字符串 &#8212;&#8212;每个字符串对应一个视图名。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">程序员开发出系统所需要的业务控制器后，还需要配置Struts 2的Action，即需要配置Action的如下三个部分定义：&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&#8212; Action所处理的URL。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&#8212; Action组件所对应的实现类。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&#8212; Action里包含的逻辑视图和物理资源之间的对应关系。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">每个Action都要处理一个用户请求，而用户请求总是包含了指定URL。当Filter Dispatcher拦截到用户请求后，根据请求的URL和Action处理URL之间的对应关系来处理转发。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">4.Struts 2的模型组件&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">实际上，模型组件已经超出了MVC框架的覆盖范围。对于Struts 2框架而言，通常没有为模型组件的实现提供太多的帮助。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">文本框: 图3.20 控制器调用模型组件Java EE应用里的模型组件，通常指系统的业务逻辑组件。而隐藏在系统的业务逻辑组件下面的，可能还包含了DAO、领域对象等组件。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">通常，MVC框架里的业务控制器会调用模型组件的方法来处理用户请求。也就是说，业务逻辑控制器不会对用户请求进行任何实际处理，用户请求最终由模型组件负责处理。业务控制器只是中间负责调度的调度器，这也是称Action为控制器的原因。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">图3.20显示了这种处理流程。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">提示 在图3.20中看到Action调用业务逻辑组件的方法。当控制器需要获得业务逻辑组件实例时，通常并不会直接获取业务逻辑组件实例，而是通过工厂模式来获得业务逻辑组件的实例；或者利用其他IoC容器（如Spring容器）来管理业务逻辑组件的实例。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">5.Struts 2的视图组件&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">Struts 2已经改变了Struts 1只能使用JSP作为视图技术的现状，Struts 2允许使用其他的模板技术，如FreeMarker、Velocity作为视图技术。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">当Struts 2的控制器返回逻辑视图名时，逻辑视图并未与任何的视图技术关联，仅仅是返回一个字符串，该字符串作为逻辑视图名。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">当我们在struts.xml文件中配置 Action时，不仅需要指定Action的name属性和class属性，还要为Action元素指定系列result子元素，每个result子元素定义一个逻辑视图和物理视图之间的映射。前面所介绍的应用都使用了JSP技术作为视图，故配置result子元素时没有指定type属性，默认使用JSP 作为视图资源。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">如果需要在Struts 2中使用其他视图技术，则可以在配置result子元素时，指定相应的type属性即可。例如，如果需要使用FreeMarker，则为result指定值为freemarker的type属性；如果想使用Velocity模板技术作为视图资源，则为result指定值为velocity的type属性&#8230;&#8230;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">6.Struts 2的运行流程&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">经过上面介绍，我们发现Struts 2框架的运行流程非常类似于WebWork框架的流程。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">提示 在Struts 2的官方站点，我们可以找到如下说法：Essentially，Struts 2.0 is the technical equivalent of WebWork 2.3。Aside from the package and property renaming，it isn't much different than，say，migrating from WebWork 2.1 to 2.2&#8212;&#8212;意思是说：Struts 2.0技术等同于WebWork 2.3框架，除了包和属性被改名外。从WebWork 2.2迁移到Struts 2不会比从WebWork 2.1迁移到WebWork 2.2更复杂。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">这里我们可以看到，Struts 2其实就是WebWork 2.2的升级版，这也就不难理解：为什么WebWork和Struts 2如此相似！&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">因此，Struts 2的运行流程与WebWork的运行流程完全相同，读者可以参看图1.8来了解Struts 2的运行流程。</span>&nbsp;<img src ="http://www.blogjava.net/yxhxj2006/aggbug/388130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 01:10 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2 的基石--拦截器</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388128.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 17:09:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388128.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388128.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388128.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388128.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: struts2 的基石--拦截器(Interceptor)(转载自http://www.blogjava.net/max/archive/2006/12/06/85925.html)&nbsp;许多朋友可能对于Struts 2.0与WebWork关系还搞不清楚。下面是Apache的Struts官网中的一段话：&nbsp;Apache Struts 2 was originally known as...&nbsp;&nbsp;<a href='http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388128.html'>阅读全文</a><img src ="http://www.blogjava.net/yxhxj2006/aggbug/388128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 01:09 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的注解功能</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388127.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 17:08:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388127.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388127.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388127.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388127.html</trackback:ping><description><![CDATA[<p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">我们知道通常情况下，</span><span style="font-family: 'Courier New'; ">Struts2</span><span style="font-family: 宋体; ">是通过</span><span style="font-family: 'Courier New'; ">struts.xml</span><span style="font-family: 宋体; ">配置的。但是随着系统规模的加大我们需要配置的文件会比较大，虽然我们可以根据不同的系统功能将不同模块的配置文件单独书写，然后通过</span><span style="font-family: 'Courier New'; ">&lt;include&gt;</span><span style="font-family: 宋体; ">节点将不同的配置文件引入到最终的</span><span style="font-family: 'Courier New'; ">struts.xml</span><span style="font-family: 宋体; ">文件中，但是毕竟还是要维护和管理这些文件，因此也会给维护工作带来很大的困扰。为了解决这个问题，可以考虑使用</span><span style="font-family: 'Courier New'; ">struts2</span><span style="font-family: 宋体; ">的注解。实际上</span><span style="font-family: 'Courier New'; ">struts2</span><span style="font-family: 宋体; ">中最主要的概念就是</span><span style="font-family: 'Courier New'; ">package</span><span style="font-family: 宋体; ">、</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">以及</span><span style="font-family: 'Courier New'; ">Interceptor</span><span style="font-family: 宋体; ">等等概念，所以只要明白这些注解就可以了。</span></p><p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">如果希望使用</span><span style="font-family: 'Courier New'; ">struts2</span><span style="font-family: 宋体; ">的注解功能，必须使用一个包</span><span style="font-family: 'Courier New'; ">struts2-convention-plugin-2.1.8.1.jar</span><span style="font-family: 宋体; ">，我使用的环境是</span><span style="font-family: 'Courier New'; ">struts2.1.8.1</span><span style="font-family: 宋体; ">。如果你使用了不同的版本，找名字就行。</span></p><p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">在以上所述的</span><span style="font-family: 'Courier New'; ">jar</span><span style="font-family: 宋体; ">文件中定义了一系列的注解，其中比较主要的是：</span></p><ul style="margin-left: 45px; font-family: Arial; line-height: 25px; background-color: #ffffff; "><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">@ParentPackage</span><span style="font-family: 宋体; ">，这个注解对应了</span><span style="font-family: 'Courier New'; ">xml</span><span style="font-family: 宋体; ">文件中的</span><span style="font-family: 'Courier New'; ">package</span><span style="font-family: 宋体; ">节点，它只有一个属性叫</span><span style="font-family: 'Courier New'; ">value</span><span style="font-family: 宋体; ">，其实就是</span><span style="font-family: 'Courier New'; ">package</span><span style="font-family: 宋体; ">的</span><span style="font-family: 'Courier New'; ">name</span><span style="font-family: 宋体; ">属性；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">@Namespace</span><span style="font-family: 宋体; ">，命名空间，也就是</span><span style="font-family: 'Courier New'; ">xml</span><span style="font-family: 宋体; ">文件中</span><span style="font-family: 'Courier New'; ">&lt;package&gt;</span><span style="font-family: 宋体; ">的</span><span style="font-family: 'Courier New'; ">namespace</span><span style="font-family: 宋体; ">属性；</span></li><li style="list-style: inherit; "><div><span style="font-family: 'Courier New'; ">@Action</span><span style="font-family: 宋体; ">，这个注解对应</span><span style="font-family: 'Courier New'; ">&lt;action&gt;</span><span style="font-family: 宋体; ">节点。这个注解可以应用于</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">类上，也可以应用于方法上。这个注解中有几个属性：</span></div><ul style="list-style-type: disc; margin-left: 45px; "><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">value()</span><span style="font-family: 宋体; ">，表示</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">的</span><span style="font-family: 'Courier New'; ">URL</span><span style="font-family: 宋体; ">，也就是</span><span style="font-family: 'Courier New'; ">&lt;action&gt;</span><span style="font-family: 宋体; ">节点中的</span><span style="font-family: 'Courier New'; ">name</span><span style="font-family: 宋体; ">属性；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">results()</span><span style="font-family: 宋体; ">，表示</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">的多个</span><span style="font-family: 'Courier New'; ">result</span><span style="font-family: 宋体; ">；这个属性是一个数组属性，因此可以定义多个</span><span style="font-family: 'Courier New'; ">Result</span><span style="font-family: 宋体; ">；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">interceptorRefs()</span><span style="font-family: 宋体; ">，表示</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">的多个拦截器。这个属性也是一个数组属性，因此可以定义多个拦截器；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">params()</span><span style="font-family: 宋体; ">，这是一个</span><span style="font-family: 'Courier New'; ">String</span><span style="font-family: 宋体; ">类型的数组，它按照</span><span style="font-family: 'Courier New'; ">name/value</span><span style="font-family: 宋体; ">的形式组织，是传给</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">的参数；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">exceptionMappings()</span><span style="font-family: 宋体; ">，这是异常属性，它是一个</span><span style="font-family: 'Courier New'; ">ExceptionMapping</span><span style="font-family: 宋体; ">的数组属性，表示</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">的异常，在使用时必须引用相应的拦截器；</span></li></ul></li><li style="list-style: inherit; "><div><span style="font-family: 'Courier New'; ">@Result</span><span style="font-family: 宋体; ">，这个注解对应了</span><span style="font-family: 'Courier New'; ">&lt;result&gt;</span><span style="font-family: 宋体; ">节点。这个注解只能应用于</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">类上。这个注解中也有几个属性：</span></div><ul style="list-style-type: disc; margin-left: 45px; "><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">name()</span><span style="font-family: 宋体; ">，表示</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">方法的返回值，也就是</span><span style="font-family: 'Courier New'; ">&lt;result&gt;</span><span style="font-family: 宋体; ">节点的</span><span style="font-family: 'Courier New'; ">name</span><span style="font-family: 宋体; ">属性，默认情况下是【</span><span style="font-family: 'Courier New'; ">success</span><span style="font-family: 宋体; ">】；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">location()</span><span style="font-family: 宋体; ">，表示</span><span style="font-family: 'Courier New'; ">view</span><span style="font-family: 宋体; ">层文件的位置，可以是相对路径，也可以是绝对路径；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">type()</span><span style="font-family: 宋体; ">，是</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">的类型，比如</span><span style="font-family: 'Courier New'; ">redirect</span><span style="font-family: 宋体; ">；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">params()</span><span style="font-family: 宋体; ">，是一个</span><span style="font-family: 'Courier New'; ">String</span><span style="font-family: 宋体; ">数组。也是以</span><span style="font-family: 'Courier New'; ">name/value</span><span style="font-family: 宋体; ">形式传送给</span><span style="font-family: 'Courier New'; ">result</span><span style="font-family: 宋体; ">的参数；</span></li></ul></li></ul><p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">实际上，</span><span style="font-family: 'Courier New'; ">struts2</span><span style="font-family: 宋体; ">中的主要注解就是这些，当然了，还有上面提到的</span><span style="font-family: 'Courier New'; ">@interceptorRef</span><span style="font-family: 宋体; ">和</span><span style="font-family: 'Courier New'; ">@exceptionMapping</span><span style="font-family: 宋体; ">；基本上，掌握了这些注解就可以了。</span></p><p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">但是如果想让这些注解真正工作，必须在配置文件增加几个常量的定义：</span></p><ul style="margin-left: 45px; font-family: Arial; line-height: 25px; background-color: #ffffff; "><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">struts.convention.default.parent.package</span><span style="font-family: 宋体; ">：这个常量表示缺省的包名是什么，因为在实际应用中，我们常常定义一个缺省的包，这个包中定义了一大堆的拦截器等等，然后其他的包继承自这个包。这个常量可以配也可以不配；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">struts.convention.package.locators</span><span style="font-family: 宋体; ">：这个常量表示你的</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">类的</span><span style="font-family: 'Courier New'; ">java</span><span style="font-family: 宋体; ">包的包名的后缀是啥：比如</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">。这个常量也可以不配；</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">struts.convention.package.locators.basePackage</span><span style="font-family: 宋体; ">：这个常量表示你的</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">类的</span><span style="font-family: 'Courier New'; ">java</span><span style="font-family: 宋体; ">包</span><span style="font-family: 'Courier New'; ">package</span><span style="font-family: 宋体; ">的名字是啥；这个常量也可以不配；</span></li></ul><p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">以上三个常量都是辅助作用的，为了让注解真正的工作，必须在配置文件中增加</span><span style="font-family: 'Courier New'; ">&lt;package&gt;</span><span style="font-family: 宋体; ">节点的配置，至少是</span><span style="font-family: 'Courier New'; ">&lt;package name="myPackage" extends="struts-default" /&gt;</span><span style="font-family: 宋体; ">，这样注解就可以使用了。</span></p><img src ="http://www.blogjava.net/yxhxj2006/aggbug/388127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 01:08 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis 开发指南 3</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388123.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 16:56:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388123.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388123.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388123.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388123.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388123.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 接 ibatis 开发指南 2&nbsp;Cache&nbsp;在特定硬件基础上（同时假设系统不存在设计上的缺漏和糟糕低效的 SQL 语句）&nbsp;Cache往往是提升系统性能的最关键因素）。&nbsp;相对 Hibernate 等封装较为严密的 ORM 实现而言（因为对数据对象的操作实现&nbsp;了较为严密的封装，可以保证其作用范围内的缓存同步，而 ibatis 提供的是半封闭&nbsp;...&nbsp;&nbsp;<a href='http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388123.html'>阅读全文</a><img src ="http://www.blogjava.net/yxhxj2006/aggbug/388123.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 00:56 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388123.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis 开发指南 3</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388122.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 16:55:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388122.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388122.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388122.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388122.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388122.html</trackback:ping><description><![CDATA[<span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">ibatis的调试相对困难,出错的时候主要依据是log4生成的log文件和.net的出错提示,这方面要能比较熟练的看懂.&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">下面这个配置基本上包含了最复杂的功能:分页\搜索\排序\缓存\传值Hash表\返回hash表\动态sql&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">如果对下面这段配置能信手粘来的话,那开发速度将会大大的提升.&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;statement id="XinxiTable_SelectAll" listClass="ArrayList" &gt;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">resultMap="SimpleXinxi" parameterClass="Hashtable" cacheModel="xinxi-cache" &gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">SELECT&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;dynamic prepend="top"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isNotEqual prepend="top" property="TopNum" compareValue = "0"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">$TopNum$&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isNotEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/dynamic&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">*&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">FROM&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">(select a.[iXinxiID],a.[sXinxiTitle],a.[iXinxiClassId],b.[sClassName],&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">a.[dXinxiDate],a.[dXinxiYxq],a.[iXinxiHits],a.[sXinxiUser],a.[sRedirectUrl],&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">ROW_NUMBER() OVER(&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;dynamic prepend="order by"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isEqual prepend="order by" property="Sort" compareValue = "0"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">a.iXinxiID desc&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isEqual prepend="order by" property="Sort" compareValue = "1"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">a.iXinxiID asc&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isEqual prepend="order by" property="Sort" compareValue = "2"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">a.iXinxiHits desc&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isEqual prepend="order by" property="Sort" compareValue = "3"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">a.iXinxiHits asc&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/dynamic&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">) as row&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">FROM&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">[dbo].[XinxiTable] as a,[dbo].[XinxiClass] as b&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;dynamic prepend="where"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isParameterPresent&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isNotEmpty prepend="and" property="XinxiType" &gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">a.[iXinxiState]= $XinxiType$&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isNotEmpty&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isNotEqual prepend="and" property="XinxiClass" compareValue = "0"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">a.[iXinxiClassID]= $XinxiClass$&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isNotEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isEqual prepend="and" property="SearchType" compareValue = "1"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">a.[sXinxiTitle] LIKE '%$Keyword$%'&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isEqual prepend="and" property="SearchType" compareValue = "2"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">(a.[sXinxiTitle] LIKE '%$Keyword$%' or a.[sXinxiContent] LIKE '%$Keyword$%')&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isParameterPresent&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/dynamic&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">and a.iXinxiClassId=b.iClassId&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">)a&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;dynamic prepend="where"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isParameterPresent&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;isEqual prepend="and" property="IsPage" compareValue = "1"&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">row between $PageLower$ and $PageUpper$&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isEqual&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/isParameterPresent&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/dynamic&gt;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">&lt;/statement&gt;</span>&nbsp;<img src ="http://www.blogjava.net/yxhxj2006/aggbug/388122.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 00:55 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388122.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSTL 学习、应用记录</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388120.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 16:53:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388120.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388120.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388120.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388120.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JSP 标准标记库（ Standard Tag Library ， JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。&nbsp;JSP 技术的优势之一在于其定制标记库工具。除了核心 JSP 标记，如 jsp:include 之外，定制标记库工具使您能够创建唯一的标记来描述以站点或应用程序为导向的操作。一旦您创建了定制标记库 ( 简称 taglib) ，当您扩展项目或转向另...&nbsp;&nbsp;<a href='http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388120.html'>阅读全文</a><img src ="http://www.blogjava.net/yxhxj2006/aggbug/388120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 00:53 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发dao模型</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388116.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 16:48:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388116.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388116.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388116.html</trackback:ping><description><![CDATA[<span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">开发dao模型:&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">接口是用来定义操作的，在这里应该定义：添、删、改、查（ID查、查询全部、模糊查询）等操作。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">import java.util.* ;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 规定出了操作person表在此项目里的全部方法&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public interface PersonDAO&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">{&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 增加操作&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public void insert(Person person) throws Exception;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 修改操作&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public void update(Person person) throws Exception;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 删除操作&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public void delete(String id) throws Exception;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 按ID查询操作&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public Person queryById(String id) throws Exception;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 查询全部&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public List queryAll() throws Exception;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 模糊查询&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public List queryByLike(String cond) throws Exception;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">}&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">另创建一个类&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">import java.util.*;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public class PersonDAOImpl implements PersonDAO&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">{&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 增加操作&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public void insert(Person person) throws Exception&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">{&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">}&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 修改操作&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public void update(Person person) throws Exception&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">{&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">}&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 删除操作&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public void delete(String id) throws Exception&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">{&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">}&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 按ID查询操作&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public Person queryById(String id) throws Exception&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">{&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">}&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 查询全部&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public List queryAll() throws Exception&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">{&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">}&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">// 模糊查询&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">public List queryByLike(String cond) throws Exception&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">{&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">}&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">}&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">接下来我们按方法一个一个的实现功能：&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">（1）添加操作，传入参数是Person person，同学们要理解为什么传入Person，因为Person是数据bean，是用来存放数据的不管从前台到后台数据库还是从后台数据库到前台，Person的角色都是用来传送数据的。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">sql = "INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)" ;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">（2）修改操作与添加操作类似传入参数也为person对象，只是SQL的执行语句不同，当然修改要有条件，即修改谁，这里是以id作为修改条件的。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">sql = "UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?" ;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">（3）删除操作，为什么这里没有以Person做参数呢，原因是使用的过程中删除操作都是通过id来标志一行记录的，为了使用方便所以传一个id就可以实现删除操作。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">sql = "DELETE FROM person WHERE id=?" ;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">（4）查询操作一般分为三种：按ID查询、查询全部、模糊查询。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">第一种：按ID查询操作，传入一个id号返回一条记录，也就是一个person对象，person对应着数据库里的一行记录，所以返回值应该为Person类型。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">sql = "SELECT id,name,password,age,email FROM person WHERE id=?" ;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">第二种：查询全部，也就是查询整张表的全部数据，因为整张表有多条记录，所以对应就应该有多个person对象，查询的时候我们可以用list存放多个person对象，查询之后将该list返回。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">sql = "SELECT id,name,password,age,email FROM person" ;&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">第三种：模糊查询，所谓模糊查询是指在数据表中查找与指定字符串部分相匹配的字段的行，如我们可以在一个用户的数据库中查找姓名中含有&#8220;静&#8221;字的所有记录，可以用like语句来实现。由于结果可能有多条记录，所以返回值好是存放Person对象的List。&nbsp;</span><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><br style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; " /><span style="font-family: verdana, 宋体, arial, Tahoma, helvetica, sans-serif; font-size: 13px; line-height: normal; background-color: #ebf5f5; ">sql = "SELECT id,name,password,age,email FROM person "+"WHERE name LIKE ? or email LIKE ?" ;</span>&nbsp;<img src ="http://www.blogjava.net/yxhxj2006/aggbug/388116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 00:48 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>全注解SSH</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388114.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 19 Sep 2012 16:43:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388114.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/388114.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388114.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/388114.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/388114.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 全注解SSH&nbsp;一，hibernate annotation&nbsp;Class注解：&nbsp;1.	@Entity：表明当前类是一个持久化类&nbsp;2.	@Table(name="team",catalog="NBA")：映射一个表team，所对应的数据库是NBA，可以省略&nbsp;字段属性注解：&nbsp;1.	@GenericGenerator(name = "genera...&nbsp;&nbsp;<a href='http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388114.html'>阅读全文</a><img src ="http://www.blogjava.net/yxhxj2006/aggbug/388114.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-09-20 00:43 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/09/20/388114.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2表单传值</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/08/30/386642.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Thu, 30 Aug 2012 14:49:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/08/30/386642.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/386642.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/08/30/386642.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/386642.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/386642.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; ">&nbsp; &nbsp; struts2表单传值类似栈,然后在action中把表单的各个名称用类属性表示就可以了。然后只需要加上get和set方法</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp;（1）： 文本框：&lt;</span><span style="font-size: 10pt; ">s:textfield /&gt;</span><br /><font size="2"><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 提交： &lt;s:textfield name="paramname"/&gt;&nbsp;</span></font><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Ation处理：用String或者int类型的</span><span style="font-size: 10pt; ">paramname</span><span style="font-size: 10pt; ">&nbsp;表示</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 接收：（1）：</span><span style="font-size: 10pt; ">&lt;s:textfield name="</span><span style="font-size: 10pt; ">paramname&nbsp;</span><span style="font-size: 10pt; ">" &nbsp;value="%{</span><span style="font-size: 10pt; ">paramname&nbsp;</span><span style="font-size: 10pt; ">}"/&gt;</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; （2）：</span><span style="background-color: #eeeeee; font-size: 10pt; ">&lt;</span><span style="background-color: #eeeeee; font-size: 10pt; ">s:property&nbsp;value</span><span style="background-color: #eeeeee; font-size: 10pt; ">=</span><span style="background-color: #eeeeee; font-size: 10pt; ">"</span><span style="font-size: 10pt; ">paramname</span><span style="background-color: #eeeeee; font-size: 10pt; ">" / "#</span>&nbsp;<span style="font-size: 10pt; ">paramname"</span><span style="background-color: #eeeeee; font-size: 10pt; ">&gt;<br /></span><span style="font-size: 10pt; ">&nbsp; &nbsp;（2）：单选框：&lt;s:radio /&gt;<br /></span><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 提交和接受:</span><span style="font-size: 10pt; ">&lt;s:radio list="{'男','女'}" name="sex" label="性别"/&gt;&nbsp;</span><span style="font-size: 10pt; "><br /></span>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<br /><span style="font-size: 10pt; ">&nbsp; &nbsp;（3）：多选框：</span><span style="font-size: 10pt; ">&lt;s:select /&gt;</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;提交和接收：</span><span style="font-size: 10pt; ">&lt;s:checkboxlist name="hobby" listKey="key" listValue="value" list="#{'1':'篮球', '2':'足球', '3':'乒乓球'}" &nbsp;label="爱好"/&gt;</span><span style="font-size: 10pt; ">其中key表示值，而value指显示的文字。</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Action处理：用一个list集合表示</span><span style="font-size: 10pt; color: red; ">（注意：千万不要用String[] 数组表示，否则，值无法传回）</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp;（4）：下拉框：</span><span style="font-size: 10pt; ">&lt;s:select /&gt;</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;提交和接受：</span><span style="font-size: 10pt; ">&lt;s:select list="#{1:'北京',2:'上海',3:'广东'}" &nbsp;label="abc" listKey="key"&nbsp;</span><span style="white-space: pre; ">	</span><span style="font-size: 10pt; ">listValue="value" &nbsp;name="address"/&gt;</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Action处理：</span><span style="font-size: 10pt; color: red; ">可以用一个list数组或者String 字符串表示都可以。</span><br /><span style="color: #339966; ">=====================================================================================</span><br /><span style="font-size: 10pt; ">其中：一般的表单都有三种方式传值：</span><br /><span style="font-size: 10pt; ">（1）：类似于set集合，只显示值，其中里面就是值</span><br /><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; color: #000000; font-size: 10pt; ">&lt;s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00" headerValue="00"&gt;&lt;/s:select&gt;</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; ">&nbsp;<span style="color: #000000; font-size: 10pt; ">(2)：类似于map，list前面是value值，后面是显示的值</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; ">&nbsp;<span style="color: #000000; font-size: 10pt; ">&lt;s:select list="#{1:'aa',2:'bb',3:'cc'}"&nbsp; label="abc" listKey="key" listValue="value"&nbsp; headerKey="0" headerValue="aabb"&gt;</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; ">&nbsp;<span style="color: #000000; font-size: 10pt; ">3.从action--&gt;jsp页面：</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; ">&nbsp;<span style="color: #000000; font-size: 10pt; ">&lt;%</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; ">&nbsp;<span style="color: #000000; font-size: 10pt; ">HashMap map = new LinkedHashMap();</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; color: #000000; font-size: 10pt; ">map.put(1,"aaa");map.put(2,"bbb");</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; color: #000000; font-size: 10pt; ">map.put(3,"ccc");</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; color: #000000; font-size: 10pt; ">request.setAttribute("map",map);</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; color: #000000; font-size: 10pt; ">request.setAttribute("aa","2");</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="color: #000000; font-size: 10pt; ">%&gt;<br /></span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微软雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="font-size: 10pt; ">JSP页面：</span><br />&nbsp;<span style="color: #000000; font-size: 10pt; ">&lt;s:select list="#request.map"&nbsp; label="abc" listKey="key" listValue="value" value="#request.aa"&nbsp; headerKey="0" headerValue="aabb"&gt;&lt;/s:select&gt;</span></p><img src ="http://www.blogjava.net/yxhxj2006/aggbug/386642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-08-30 22:49 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/08/30/386642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iBatis2之SqlMap配置总结（18条）</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/08/28/386392.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Mon, 27 Aug 2012 16:42:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/08/28/386392.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/386392.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/08/28/386392.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/386392.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/386392.html</trackback:ping><description><![CDATA[<div style="color: #333333; font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 12px; line-height: normal; background-color: #ccced0; "><h3><span style="font-size: 20px; font-family: 微软雅黑, 黑体, Arial, Helvetica, sans-serif; ">iBatis2之SqlMap配置总结（18条）</span>&nbsp;&nbsp;</h3><p clearfix="" nbw-act=""  fc06"="" style="zoom: 1; margin: 0px 0px 20px; padding: 0px; color: #bbbbbb; line-height: 20px; "><span style="float: left; "><span id="$_blogTagInfo" style="color: #103901; ">&nbsp;</span></span><span pnt=""  fc03"="" id="$_blog_subscribe" style="cursor: pointer; float: right; color: #103901; ">&nbsp;<a style="cursor: pointer; ">订阅</a></span></p></div><div style="color: #333333; font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 12px; line-height: normal; background-color: #ccced0; "></div><div style="color: #333333; font-family: Arial, Helvetica, simsun, u5b8bu4f53; font-size: 12px; line-height: normal; background-color: #ccced0; "></div><div fc05="" fc11="" nbw-blog="" ztag=""  js-fs2"="" style="line-height: 25px; word-wrap: break-word; color: #333333; margin: 15px 0px; padding-top: 5px; padding-bottom: 5px; overflow: hidden; font-family: Arial, Helvetica, simsun, u5b8bu4f53; background-color: #ccced0; "><div>SqlMap的配置是iBatis中应用的核心。这部分任务占据了iBatis开发的70的工作量。<br />1、命名空间：</div><div>&nbsp; &lt;sqlMap namespace="Account"&gt;，在此空间外要引用此空间的元素，则需要加上命名空间名。</div><div>&nbsp;</div><div>2、实体的别名：</div><div>&nbsp; &lt;typeAlias alias="Account" type="com.lavasoft.ibatissut.simple.domain.entity.Account"/&gt;</div><div>&nbsp; 如果有用到的全名的地方，可以用别名代替，受命名空间约束。</div><div>&nbsp;</div><div>3、插入操作</div><div>&nbsp;&nbsp;&nbsp; 对于自增主键的表，插入可以不配置插入的主键列。否则是必须的。</div><div>&nbsp;</div><div>4、获取主键</div><div>&nbsp;&nbsp;&nbsp;&nbsp; 插入语句之前配置：主要是针对Sequence主键而言，插入前必须指定一个主键值给要插入的记录。Oracle、DB2亦如此，方法是在插入语句标签&lt;insert....&gt;之前配置上：</div><div>&nbsp;&nbsp;&nbsp; &lt;insert id="insertAccount" parameterClass="Account"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;selectKey resultClass="long" keyProperty="sctId"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT SEQ_TEST.NEXTVAL&nbsp;FROM DUAL<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/selectKey&gt;&nbsp;&nbsp;&nbsp;</div><div></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert into .... ........</div><div>&nbsp;&nbsp;&nbsp; &lt;/insert&gt;</div><div>&nbsp;&nbsp;</div><div>&nbsp;&nbsp;&nbsp; 插入语句之后配置：蛀牙是针对自增主键的表而言，这类表在插入时不需要主键，而是在插入过程自动获取一个自增的主键。比如MySQL</div><div><div>&nbsp;&nbsp;&nbsp; &lt;insert id="insertAccount" parameterClass="Account"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;selectKey resultClass="long" keyProperty="sctId"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; SELECT LAST_INSERT_ID()&nbsp;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/selectKey&gt;&nbsp;&nbsp;&nbsp;</div><div></div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert into .... ........</div><div>&nbsp;&nbsp;&nbsp; &lt;/insert&gt;</div></div><div>&nbsp;</div><div>&nbsp;&nbsp;&nbsp;当然，是否需要配置&lt;selectKey&gt;根据情况，只要能保证记录有主键即可。一旦配置了&lt;selectKey&gt;，就可以在执行插入操作时获取到新增记录的主键。&nbsp;</div><div>&nbsp;</div><div>6、SQL入参parameterClass</div><div>&nbsp;&nbsp;插入语句入参：parameterClass="类别名"&nbsp;&nbsp;来设定。</div><div>&nbsp; 查询语句入参：可以设定类别名，也可以设定为map，也可以设定为iBatis支持的原生类型（比如string、int、long等），当只有一个原生类型入参时，则在SQL中用value关键字来引用。比如：</div><div>&nbsp;&nbsp;&nbsp; &lt;select id="getById"&nbsp; parameterClass="long" resultMap="result_base"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from customer where id =&nbsp;#value#<br />&nbsp;&nbsp;&nbsp; &lt;/select&gt;</div><div>&nbsp;&nbsp;&nbsp;&nbsp;map是最强大的入参方式，任何入参方式都可以转换为这种入参方式，因为iBatis仅接受一个入参，当几个参数分布在不同对象中的时候，将这些对象的属性（或者对象本身put）到map中，然后一次传递给sql语句是非常有效。可以自己写一个将对象或者对象集合转换为map的工具（我已经实现一个了）。</div><div>&nbsp;&nbsp;&nbsp; 另外，map的中的元素（比如pobj）是个复杂对象，则还可以在SQL中以#pobj.protyename#的格式来引用其中内嵌的属性。当然不推荐这么干。</div><div>&nbsp;</div><div>7、返回值参数类型</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 返回值参数也同样有两种类型，一种是对象类型resultClass="Account"，一种是resultMap="AccountResult"。这两种类型的选择常常会令人迷惑不解，一言明其理：</div><div>当结果集列名和类属性名完全对应的时候，则应该使用resultClass来指定查询结果类型。当然有些列明不对应，可以在sql中使用as重命名达到一致的效果。</div><div>&nbsp;</div><div>当查询结果列名和类属性名对应不上的时候，应该选择resultMap指定查询结果集类型。否则，则查询出来填充的对象属性为空（数字的为0，对象的为null）。</div><div>&nbsp;</div><div>但是实际上resultMap是对一个Java Bean的映射，需要先定义xml的映射后，才可以引用，例如：</div><div>&nbsp;&nbsp;&nbsp; &lt;resultMap&nbsp;id="AccountResult" class="Account"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="id" column="ACC_ID"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="firstName" column="ACC_FIRST_NAME"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="lastName" column="ACC_LAST_NAME"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="emailAddress" column="ACC_EMAIL"/&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/resultMap&gt;</div><div>&nbsp;&nbsp;&nbsp; resultMap映射的结果的目的就是要将查询的结果集绑定到映射对象的属性上。</div><div>&nbsp;</div><div>&nbsp;&nbsp; 不管使用哪种返回值参数类型，其最终目的就是要把每条记录映射到一个类的对象或者对象集合上，如果有某个类属性映射不上，则在得到的这个对象或对象集合中这个属性为空。映射的属性可以是表与实体中的一部分。不要同时使用两种返回值参数类型，这样只会令人迷惑。</div><div>&nbsp;</div><div>8、查询结果集分组</div><div>&nbsp;&nbsp;&nbsp; 查询结果集排序有两种方式：一是在结果集映射上定义&lt;resultMap id="result" class="bar" groupBy="id"&gt;，另一种就是在SQL语句中分组。建议在SQL语句中分组，以获得更大的可控制性。</div><div>&nbsp;</div><div>9、SQL中参数的引用</div><div>&nbsp;&nbsp;&nbsp;&nbsp; SQL中引用parameterClass的参数有三种方式：</div><div>&nbsp;&nbsp;&nbsp;&nbsp; iBatis内置支持的类型，比如int、string，使用#value#来引用，这个value是关键字，不可变。</div><div>&nbsp;&nbsp;&nbsp;&nbsp; map类型的参数，使用#keyName#来引用，keyName为键名。</div><div>&nbsp;&nbsp;&nbsp;&nbsp; 复杂对象的参数，使用#propertyName#来引用，propertyName类属性的名字。</div><div>&nbsp;</div><div>10、模糊查询中参数的引用</div><div>&nbsp;&nbsp;&nbsp; 模糊查询是针对字符串而言的，如果遇到两个单引号要包含一个参数，则不能再用#来引用变量了，而应该改为$，比如：'%$varName$%'，当然，也可以使用 '%' || #varname# || '%' 来绕过此问题。</div><div>&nbsp;</div><div>11、SQL片段</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以通过&lt;sql id="sql_xxx"&gt;...&lt;/sql&gt;定义SQL片段，然后&lt;include refid="sql_xxx"/&gt;来在各种语句中引用。达到服用目的，</div><div>&nbsp;</div><div>12、动态SQL</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以通过使用动态SQL来组织灵活性更大的更通过的SQL，这样极大减少了编码量，是iBatis应用的第二大亮点。</div><div>&nbsp;&nbsp;&nbsp;&nbsp; 比如：一个动态的where条件</div><div>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;dynamic prepend="where"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;isNotEmpty prepend="and" property="$$$$$"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $name like '%'|| #$name# ||'%'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/isNotEmpty&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;isGreaterThan prepend="and" property="$$$$$" compareValue="$$$number"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $code like '%'|| #$code# ||'%'<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/isGreaterThan&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/dynamic&gt;</div><div>&nbsp;&nbsp;&nbsp;&nbsp; 当然，prepend表示链接关键字，可以为任何字符串，当为sql关键字时，iBatis自动判断是否应该添加该关键字。该语法也很简单，关键是要会用心思考组织动态SQL。</div><div>&nbsp;&nbsp;&nbsp; 这里面有一点要注意：区别&lt;isNotEmpty&gt;和&lt;isNotNull&gt;区别，当为空空串时&lt;isNotEmpty&gt;返回true，当为空串时&lt;isNotNull&gt;返回真。哈哈，自己体会吧，说了反而啰嗦。</div><div>&nbsp;</div><div>13、结果集映射继承</div><div>结果集映射的继承的目的是为了映射定义的复用，比如下面定义了两个映射，AccountResult继承了base：<br />&nbsp;&nbsp;&nbsp; &lt;resultMap id="base" class="Account"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="id" column="ACC_ID"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="firstName" column="ACC_FIRST_NAME"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="lastName" column="ACC_LAST_NAME"/&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/resultMap&gt;<br />&nbsp;&nbsp;&nbsp;<strong>&nbsp;&lt;resultMap id="AccountResult" class="Account"&nbsp;extends="Account.base"&gt;</strong><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="emailAddress" column="ACC_EMAIL"/&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/resultMap&gt;<br />这样，就很容易扩展了一个映射策略。<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</div><div>14、查询注入</div><div>查询注入是在一个查询中嵌入另外一个查询，这样做的目的是为了实现实体对象之间的关联关联关系（一对一、一对多、多对多）分单项双向。有关这些内容，是比较复杂的，笔者对此做了深入研究，并分别写了三篇来讲述。</div><div>&nbsp;</div><div>查询注入的实现就是在实体属性为另外一个实体或者实体集合的时候，引入一个相关的查询来实现，例如，客户和订单的映射关系：</div><div>public class Customer {<br />&nbsp;&nbsp;&nbsp; private Long id;<br />&nbsp;&nbsp;&nbsp; private String name;<br />&nbsp;&nbsp;&nbsp; private String address;<br />&nbsp;&nbsp;&nbsp; private String postcode;<br />&nbsp;&nbsp;&nbsp; private String sex;<br />&nbsp;&nbsp;&nbsp;<strong>&nbsp;private List&lt;Orders&gt;&nbsp;orderlist&nbsp;= new ArrayList&lt;Orders&gt;();</strong></div><div>&nbsp;</div><div>&nbsp;&nbsp;&nbsp; &lt;resultMap id="result" class="customer"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="id" column="id"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="name" column="name"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="address" column="address"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="postcode" column="postcode"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;result property="sex" column="sex"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<strong>&lt;result property="orderlist" column="id" select="orders.findByCustomerId"/&gt;<br /></strong>&nbsp;&nbsp;&nbsp; &lt;/resultMap&gt;</div><div>&nbsp;</div><div>在这个映射中，为了查询客户的时候，能查询到相关的订单，可以在映射<strong>orderlist</strong>属性的时候，将其指向另外一个查询<strong>orders.findByCustomerId</strong>，这个查询是以Customer的<strong>id</strong>为参数来查询的。</div><div>&nbsp;</div><div><strong>select="orders.findByCustomerId"</strong>这个查询定义如下：</div><div>&nbsp;&nbsp;&nbsp; &lt;select id="findByCustomerId" resultMap="result_base" parameterClass="long"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; select * from orders where customerId = #value#<br />&nbsp;&nbsp;&nbsp; &lt;/select&gt;</div><div>&nbsp;</div><div>原理就是这么简单，然后根据实际情况，可以自由实现实体间的关联关系。</div><div>&nbsp;</div><div>14、iBatis的分页查询</div><div>iBatis的分页有两种方式，一点都不神秘，不要被网上的流言所迷惑。</div><div>第一种方式：结果集筛选分页。先执行部分页的SQL查询语句，然后得到一个ResultSet，然后根据分页范围选择有效的记录填充到对象中，最终以集合的形式返回。对于10w条一下的记录的表，不存在性能问题，如果存在，你可以选择第二中方式。</div><div>第二种方式：SQL分页，通过组装分页类型的SQL来实现分页。这个关键在于分页参数的传递和分页SQL的构建。分页SQL构件每种数据库都不一样，不说了。分页参数的传递却可以通用。我主张用map分装入参，连同分页参数一块传递进来，就搞定了。如果原来没有考虑到分页，而用的是对象做参数，则可以通过apache 的 beanutils组件来实现一个object到map之间的转换工具，问题迎刃而解。</div><div>&nbsp;</div><div>当然，这还不是分页查询应用的最高境界。思考，分页需要计算一个总记录数，记录数执行的sql返回值是count(?)，条件是除了分页以外的条件，因此应该将查询SQL静态分开，以MySQL为例，可以将查询分为查什么，和什么条件两部分，在条件部分对分页参数进行动态判断，如果分页参数就不分页，如果有则分页。这样最后只需要两个组装的sql就可以计算总数和分页查询了。大大简化了问题的难度。 Oracle的解决思路也一样，不一样的地方就是拼装分页SQL改变了。</div><div>&nbsp;</div><div>15、执行存储过程的配置</div><div>SQL Map 通过&lt;procedure&gt;元素支持存储过程。下面的例子说明如何使用具有输出参数<br />的存储过程。&nbsp;<br />&nbsp;&nbsp;&nbsp; &lt;parameterMap id="swapParameters" class="map"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/&gt;<br />&nbsp;&nbsp;&nbsp; &lt;/parameterMap&gt;<br />&nbsp;&nbsp;&nbsp; &lt;procedure id="swapEmailAddresses" parameterMap="swapParameters"&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {call swap_email_address (?, ?)}<br />&nbsp;&nbsp;&nbsp; &lt;/procedure&gt;&nbsp;<br />调用上面的存储过程将同时互换两个字段（数据库表）和参数对象（Map）中的两个 email地址。如果参数的 mode 属性设为 INOUT 或 OUT，则参数对象的值被修改。否则保持不变。&nbsp;<br />注意！要确保始终只使用 JDBC 标准的存储过程语法。参考 JDBC 的 CallableStatement<br />文档以获得更详细的信息。</div><div>&nbsp;</div><div>16、就是iBatis中各种id的命名了，这个看起来小菜一碟，但是搞砸了会很痛苦。建议如果有DAO层的话，DAO接口的名字和SQL语句id的名字保持一致。同时，在DAO中将save和update封装为一个方法（从Hibernate中学来的），这是非常好的。也可以直接在SQL层将插入和更新柔和在一块，太复杂，有点影响效率，这见机行事了。</div><div>&nbsp;</div><div>&nbsp;&nbsp; 另外Spring提供了各种数据操作模板，通过模板，擦做数据也就是&#8220;一句话&#8221;的问题，写个DAO还有必要么，尤其对iBatis来说，根本没有必要。这样，就需要在领域活动层的设计上下功夫了。</div><div>&nbsp;</div><div>17 、iBatis的查询也可以配置缓存策略，缓存的配置很复杂，分很多中情况，可以参看附件中的<span style="line-height: 21px; font-size: 12px; "><a target="_blank" rel="nofollow" href="http://img1.51cto.com/attachment/200808/62575_1218882136.pdf" style="color: #103901; text-decoration: none; ">iBATIS-SqlMaps-2_cn.pdf</a>的39页内容，有详细介绍。</span></div><div>&nbsp;</div><div>18、偷懒的最高境界，让程序去干哪里80%的体力活。自己仅仅把把关。任何重复的活动都有规律可循的，一旦发现了其中的规律，你就可以想办法把自己从中解脱出来。</div><div>&nbsp;&nbsp;&nbsp; iBatis也不例外，每个表都有增删改查、分页等操作。对应在每个DAO方法上亦如此。可以通过数据库生成sqlmap、entity、dao，然后将这些东西改吧改吧就完成大部分的工作量。本人已经实现过了，当然开发这个工具的前提是你对iBatis有深入研究和理解。</div><div>&nbsp;</div><div>-------------------------------------------------</div><div>下面是iBatis开发指南中内容：</div><div>&nbsp;</div><div>附录：容易出错的地方&nbsp;<br />本附录是译者添加的，列出了初学者容易出错的地方，作为完成快速入门课程后的学习<br />笔记，可以让初学者少走些弯路。仅供参考。&nbsp;<br />1)&nbsp; 在 parameterMap 和 resultMap 中，字段数据类型是 java.sql.Types 类定义的常量名<br />称。常用的数据类型包括 BLOB，CHAR，CLOB，DATE，LONGVARBINARY，&nbsp;<br />INTEGER，NULL，NUMERIC，TIME，TIMESTAMP 和 VARCHAR 等。&nbsp;<br />2)&nbsp; 对于数据表中 NULLABLE 的字段，必须在 parameterMap 和 resultMap 中指定字段<br />的数据类型。&nbsp;<br />3)&nbsp; 对于数据类型是 DATE，CLOB 或 BLOB 的字段，最好在 parameterMap 和 resultMap中指定数据类型。&nbsp;<br />4)&nbsp; 对于二进制类型的数据，可以将 LONGVARBINARY 映射成 byte[]。&nbsp;<br />5)&nbsp; 对于文本类型较大的数据，可以将 CLOB 映射成 String。&nbsp;<br />6) Java Bean 必须拥有缺省的构造器（即无参数的构造器）。&nbsp;<br />7) Java Bean 最好实现 Serializable 接口，以备应用的进一步扩展。</div><div>&nbsp;</div><div>本人认为：尽量避免在每个入参后面附加参数的类型。以保持配置简洁，并且本人在长期开发中，没有发现必须要那么做。</div></div><img src ="http://www.blogjava.net/yxhxj2006/aggbug/386392.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-08-28 00:42 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/08/28/386392.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2传值</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/08/27/386388.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Mon, 27 Aug 2012 15:30:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/08/27/386388.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/386388.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/08/27/386388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/386388.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/386388.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; ">&nbsp; &nbsp; Struts2传值比struts1.X要方便多了。主要包括：页面---&gt;Action &nbsp; Action---&gt;页面两个方面</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp;（1）：页面到---&gt;Action ，其中页面写法如下：</span><br />&nbsp; &nbsp; &nbsp; <span style="background-color: #eeeeee; font-size: 13px; ">&lt;</span><span style="background-color: #eeeeee; font-size: 13px; ">s:form&nbsp;action</span><span style="background-color: #eeeeee; font-size: 13px; ">=</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">/ssh/reg.action</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp;method</span><span style="background-color: #eeeeee; font-size: 13px; ">=</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">post</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">&gt;</span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s:textfield&nbsp;label="UserName:"&nbsp;name="username"&gt;&lt;/s:textfield&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //在action中直接写username属性和get和set方法<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s:textfield&nbsp;label="Age:"&nbsp;name="person.age"&gt;&lt;/s:textfield&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //在action中写对象Person person和get和set方法。注意：此处绝对不能写类名：Person，而应该是对象person&nbsp;<br />&nbsp; &nbsp; &nbsp; &nbsp;&nbsp;&lt;s:textfield&nbsp;label="Address:"&nbsp;name="person.address"&gt;&lt;/s:textfield&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// 和person.age类似<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s:submit&nbsp;value="Login"&gt;&lt;/s:submit&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;/s:form&gt;</div><br /><span style="font-size: 10pt; ">&nbsp; （2）：action类写法：可以继承或者不继承ActionSupport类。注意是属性和get和set方法</span><br />&nbsp; &nbsp; &nbsp;<span style="font-size: 10pt; color: #0000ff; ">public</span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp;</span><span style="font-size: 10pt; color: #0000ff; ">class</span><span style="background-color: #eeeeee; font-size: 10pt; ">&nbsp;RegAction&nbsp;</span><span style="font-size: 10pt; color: #0000ff; ">extends</span><span style="background-color: #eeeeee; font-size: 10pt; ">&nbsp;ActionSupport{</span><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all; ">&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;Person&nbsp;person;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;String&nbsp;username;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">private</span>&nbsp;List&lt;Person&gt;&nbsp;personList;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;List&lt;Person&gt;&nbsp;getPersonList()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;personList;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setPersonList(List&lt;Person&gt;&nbsp;personList)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.personList&nbsp;=&nbsp;personList;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;getUsername()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;username;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setUsername(String&nbsp;username)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.username&nbsp;=&nbsp;username;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;Person&nbsp;getPerson()&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;person;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;<span style="color: #0000FF; ">void</span>&nbsp;setPerson(Person&nbsp;person)&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.person&nbsp;=&nbsp;person;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;<span style="font-size: 10pt; "> &nbsp;/**其中还可以加单一属性，对象，集合(包括list和map)**/</span><br /><span style="font-size: 10pt; ">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">public</span>&nbsp;String&nbsp;execute()&nbsp;<span style="color: #0000FF; ">throws</span>&nbsp;Exception&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&lt;Person&gt;&nbsp;personList1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;ArrayList&lt;Person&gt;();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;person&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Person();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person.setAddress("hunan");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person.setAge(25);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Person&nbsp;person1&nbsp;=&nbsp;<span style="color: #0000FF; ">new</span>&nbsp;Person();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person1.setAddress("beijing");<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;person1.setAge(35);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;personList1.add(person);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;personList1.add(person1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">this</span>.setPersonList(personList1);<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000FF; ">return</span>&nbsp;SUCCESS;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}</div><br /><span style="font-size: 10pt; ">（3）：action----&gt;页面</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (1):单一属性：&lt;s:property value="username"/&gt; &nbsp; &nbsp; &nbsp;//属性名</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (2):对象：&lt;s:property value="person.address"/&gt; &nbsp; // 对象名+属性名</span><br /><span style="font-size: 10pt; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; (3):list对象：List对象和Map对象</span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br /></span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;</span><span style="background-color: #eeeeee; font-size: 13px; ">s:iterator&nbsp;value</span><span style="background-color: #eeeeee; font-size: 13px; ">=</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">personList</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp;id</span><span style="background-color: #eeeeee; font-size: 13px; ">=</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">Person</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">&gt; &nbsp; &nbsp; &nbsp; &nbsp; </span><span style="background-color: #eeeeee; font-size: 10pt; ">&nbsp; // value是集合对象名，id是别名，可以随便取</span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;s:property&nbsp;value="#Person.age"/&gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span style="font-size: 10pt; ">&nbsp;// #+别名+属性名 其中#符号不可以缺少。</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;s:property&nbsp;value="#Person.address"/&gt; &nbsp; &nbsp; &nbsp; &nbsp;<span style="font-size: 10pt; "> &nbsp; // 同上</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/s:iterator&gt;</div>&nbsp; &nbsp; &nbsp; &nbsp; （4）<span style="background-color: #eeeeee; font-size: 13px; ">&lt;</span><span style="background-color: #eeeeee; font-size: 13px; ">s:iterator&nbsp;value</span><span style="background-color: #eeeeee; font-size: 13px; ">=</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">map</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp;id</span><span style="background-color: #eeeeee; font-size: 13px; ">=</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">id</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp;status</span><span style="background-color: #eeeeee; font-size: 13px; ">=</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">st</span><span style="background-color: #eeeeee; font-size: 13px; ">"</span><span style="background-color: #eeeeee; font-size: 13px; ">&gt;</span><span style="background-color: #eeeeee; font-size: 13px; ">&nbsp; &nbsp; </span><span style="background-color: #eeeeee; font-size: 10pt; ">&nbsp; // value是集合对象名，id是别名，也可省，status也可以省。</span><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;key&nbsp;:&nbsp;&lt;s:property&nbsp;value='key'/&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="font-size: 10pt; ">// map的key值，其中，values只能为key或者value，不能为其他。</span><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;value:&lt;s:property&nbsp;vlaue='value'/&gt;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="font-size: 10pt; "> //同上</span><br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;/s:iterator&gt;&nbsp;</div><span style="font-size: 10pt; color: red; ">总结：在传值的时候，也可以采用servlet或者struts1.X的方式用</span><span style="font-size: 10pt; color: red; ">request，session&nbsp;</span><span style="font-size: 10pt; color: red; ">进行传值。比如：request/session.setAttribute(name,values)等方式。</span><br /><span style="font-size: 10pt; color: red; ">然后在页面中，在使用request/session.getAttribute(name);但是不建议这么去做，建议还是用struts2的方式传值。</span><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/yxhxj2006/aggbug/386388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-08-27 23:30 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/08/27/386388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2基础</title><link>http://www.blogjava.net/yxhxj2006/archive/2012/08/27/386387.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Mon, 27 Aug 2012 15:08:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/08/27/386387.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/386387.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/08/27/386387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/386387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/386387.html</trackback:ping><description><![CDATA[&nbsp; &nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;<span style="font-size: 10pt; ">struts2不是从strus1.X继承，而是从xwork继承而来。在使用struts中，尽量少用到struts的内容。</span><br />&nbsp; &nbsp;&nbsp;<span style="font-family: 宋体; font-size: 10pt; ">（</span><span style="font-size: 10pt; ">1</span><span style="font-family: 宋体; font-size: 10pt; ">）：导入</span><span style="font-size: 10pt; ">strusts2</span><span style="font-family: 宋体; font-size: 10pt; ">的基本</span><span style="font-size: 10pt; ">jar</span><span style="font-family: 宋体; font-size: 10pt; ">包：</span><span style="font-size: 10pt; ">struts2-core-2.2.3.1.jar&nbsp; xwork-core-2.2.3.1.jar</span>  <p align="left"><span style="font-size: 10pt; ">&nbsp;ognl-3.0.1.jar&nbsp; freemarker-2.3.16.jar&nbsp;&nbsp; commons-logging-1.1.1.jar&nbsp; commons-lang-2.5.jar&nbsp; commons-io-2.0.1.jar&nbsp; commons-fileupload-1.2.2.jar&nbsp; commons-beanutils-1.7.0.jar javassist-3.11.0.GA.jar </span></p>  <p><span style="font-size:10.0pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">（</span><span style="font-size:10.0pt">2</span><span style="font-size:10.0pt; font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">）：编写</span><span style="font-size:10.0pt">jsp</span><span style="font-size:10.0pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">页面。注意：</span><span style="font-size:10.0pt">form</span><span style="font-size:10.0pt;font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">表单值为：</span><span style="font-size:10.0pt">form=</span><span style="font-size:10.0pt; font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">&#8220;</span><strong><span style="font-size:10.0pt;font-family:宋体">/</span></strong><span style="font-size:10.0pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">工程名</span><strong><span style="font-size:10.0pt;font-family:宋体">/</span></strong><span style="font-size:10.0pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">包的命名空间</span><span style="font-size:10.0pt">(namespace)</span><strong><span style="font-size:10.0pt;font-family:宋体">/</span></strong><span style="font-size:10.0pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">包名称</span><span style="font-size:10.0pt">(package)</span><strong><span style="font-size:10.0pt;font-family:宋体">/</span></strong><span style="font-size:10.0pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">处理名（</span><span style="font-size:10.0pt">action</span><span style="font-size:10.0pt;font-family: 宋体;Times New Roman&quot;;Times New Roman&quot;">）&#8221;</span></p>  <p><span style="font-size:10.0pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">（</span><span style="font-size:10.0pt">3</span><span style="font-size:10.0pt; font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">）：编写</span><span style="font-size:10.0pt">web.xml</span><span style="font-size:10.0pt;font-family:宋体;Times New Roman&quot;;Times New Roman&quot;">配置文件：</span></p>  <p>&nbsp;</p>  <p align="left"><strong>&nbsp;</strong><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;?</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">xml </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">version</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">"1.0" </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">encoding</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">"UTF-8"</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">?&gt;</span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#3F7F7F;">web-app </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">version</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"2.5" </span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">xmlns</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"http://java.sun.com/xml/ns/javaee" </span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">xmlns:xsi</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"http://www.w3.org/2001/XMLSchema-instance" </span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">xsi:schemaLocation</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"http://java.sun.com/xml/ns/javaee </span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">&nbsp;&nbsp;&nbsp; http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp; </span></p>  <p align="left">&nbsp;<span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp; &nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter-name</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span><span style="font-size: 10pt; font-family: 'Courier New'; ">struts2</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter-name</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"> <span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter-class</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:red;">org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter-class</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left">&nbsp;<span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left">&nbsp;<span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter-mapping</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp; &nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter-name</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span><span style="font-size: 10pt; font-family: 'Courier New'; ">struts2</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter-name</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp; &nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">url-pattern</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span><span style="font-size: 10pt; font-family: 'Courier New'; ">/*</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">url-pattern</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left">&nbsp;<span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">filter-mapping</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left">&nbsp;<span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">welcome-file-list</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">welcome-file</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span><span style="font-size: 10pt; font-family: 'Courier New'; ">index.jsp</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">welcome-file</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left">&nbsp;<span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">welcome-file-list</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#3F7F7F;">web-app</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>    <p align="left">&nbsp;</p>  <p align="left"><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">（</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">4</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">）编写处理类。该处理类一般继承于</span><span style="font-size: 10.0pt;font-family:&quot;Courier New&quot;;">ActionSupport</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">，只需重新</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">excute()</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">方法即可。注意：此处理类也可以是一般的类：（不继承</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">ActionSupport</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">）</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">. </span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">其中的方法名也可以是任意的。但是该处理方法必须要有返回值</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">String</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">，并且这个返回值与</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">struts</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">中的</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">resutl</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">的</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">name</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">值必须一致。比如：</span></p>  <p align="left"><strong><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#7F0055;">public</span></strong> <strong><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#7F0055;">class</span></strong><span style="font-size: 10pt; font-family: 'Courier New'; "> Test {</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size:10.0pt;font-family: &quot;Courier New&quot;;color:#7F0055;">public</span></strong><span style="font-size: 10pt; font-family: 'Courier New'; "> String testaa(){</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.</span><em><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#0000C0;">out</span></em><span style="font-size: 10pt; font-family: 'Courier New'; ">.println(</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">"Testaa-------Testaa-------Testaa"</span><span style="font-size: 10pt; font-family: 'Courier New'; ">);</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><strong><span style="font-size:10.0pt;font-family: &quot;Courier New&quot;;color:#7F0055;">return</span></strong> <span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">"abc"</span><span style="font-size: 10pt; font-family: 'Courier New'; ">;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp; }</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">}</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 宋体; ">（</span><span style="font-size: 10pt; font-family: 'Courier New'; ">5</span><span style="font-size: 10pt; font-family: 宋体; ">）：</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">配置</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">struts.xml</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">文件</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">(struts.xml</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">文件必须要放到</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">src</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">目录下，而不是与</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">action</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">类名在同一个目录</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">)</span><span style="font-size: 10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">。其中</span></p>  <p align="left"><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">（</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">i</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">）</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">:package</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">里面的命名空间：</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">namespace</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">可以与</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">package</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">名称不一致。</span></p>  <p align="left"><span style="font-size:10.0pt;font-family: &quot;Courier New&quot;;">(ii):action</span><span style="font-size: 10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">中</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">Method</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">方法默认是</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">excute</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">，也可以是其他的方法。</span></p>  <p align="left"><span style="font-size:10.0pt;font-family: &quot;Courier New&quot;;">(iii):result</span><span style="font-size: 10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">中的</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">name</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">值不一定是</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">success</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">或者</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">fail</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">。可以是任意值，只需要这个值与处理类中的处理方法返回值一致就可以了。</span></p>  <p align="left"><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">（</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">iv</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">）：</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">struts.xml</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">可以有多个</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">package</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">。</span></p>  <p align="left"><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">（</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">xv</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">）：</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">&lt;constant name="struts.action.extension" value="action,do" /&gt;</span></p>  <p align="left"><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">表示提交地址必须要以</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;">.action</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">或者</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;">.do</span><span style="font-size:10.0pt;font-family:宋体;Courier New&quot;;Courier New&quot;;Courier New&quot;;">结尾格式才能有效。</span></p>  <p align="left">&nbsp;</p>  <p align="left"><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;?</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#3F7F7F;">xml </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">version</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"1.0" </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">encoding</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"UTF-8" </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">?&gt;</span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:teal;">&lt;!</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#3F7F7F;">DOCTYPE </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:navy;">struts </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:gray;">PUBLIC</span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:gray;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:navy;">"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"</span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:navy;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#3F7F5F;">"http://struts.apache.org/dtds/struts-2.0.dtd"</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; color: teal; ">&lt;</span><span style="font-size: 10pt; font-family: 'Courier New'; color: #3f7f7f; ">struts</span><span style="font-size: 10pt; font-family: 'Courier New'; color: teal; ">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">package </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">name</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"j2eetest" </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">extends</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">"struts-default" </span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#7F007F;">namespace</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">"/j2eetestaa"</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">action </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">name</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"test" </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">class</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"com.wsw.struts.action.Test" </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">method</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#2A00FF;">"testaa"</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">result </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">name</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"abc"</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span><span style="font-size: 10pt; font-family: 'Courier New'; ">/main/success.jsp</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">result</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">result </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#7F007F;">name</span><span style="font-size: 10pt; font-family: 'Courier New'; ">=</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#2A00FF;">"fail"</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span><span style="font-size: 10pt; font-family: 'Courier New'; ">/main/fail.jsp</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">result</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">action</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size: 10pt; font-family: 'Courier New'; ">&nbsp;&nbsp;&nbsp; </span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:#3F7F7F;">package</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p>  <p align="left"><span style="font-size:10.0pt; font-family:&quot;Courier New&quot;;color:teal;">&lt;/</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:#3F7F7F;">struts</span><span style="font-size:10.0pt;font-family:&quot;Courier New&quot;;color:teal;">&gt;</span></p><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><img src ="http://www.blogjava.net/yxhxj2006/aggbug/386387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-08-27 23:08 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/08/27/386387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate映射解析——七种映射关系 </title><link>http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385517.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 15 Aug 2012 04:31:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385517.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/385517.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385517.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/385517.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/385517.html</trackback:ping><description><![CDATA[<p style="text-align: left; padding-bottom: 0px; line-height: 25px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="font-size: 16px">首先我们了解一个名词ORM，全称是（</span><span style="font-size: 16px"><strong>Object Relational Mapping</strong></span><span style="font-size: 16px">），即对象关系映射。ORM的实现思想就是将关系数据库中表的数据映射成对象，以对象的形式展现，这样开发人员就可以把对数据库的操作转化为对这些对象的操作。Hibernate正是实现了这种思想，达到了方便开发人员以面向对象的思想来实现对数据库的操作。</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">Hibernate在实现ORM功能的时候主要用到的文件有：映射类（*.java）、映射文件（*.hbm.xml）和数据库配置文件（*.properties/*.cfg.xml），它们各自的作用如下。</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><strong><span style="color: red">映射类</span></strong><span style="color: red">（</span><span style="color: red">*.java</span><span style="color: red">）</span>：它是描述数据库表的结构，表中的字段在类中被描述成属性，将来就可以实现把表中的记录映射成为该类的对象了。</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><strong><span style="color: red">映射文件（</span><span style="color: red">*.hbm.xml</span><span style="color: red">）</span></strong>：它是指定数据库表和映射类之间的关系，包括映射类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字段和类属性名称的对应关系等。</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><strong><span style="color: red">数据库配置文件（</span><span style="color: red">*.properties/*.cfg.xml</span><span style="color: red">）</span></strong>：它是指定与数据库连接时需要的连接信息，比如连接哪种数据库、登录数据库的用户名、登录密码以及连接字符串等。当然还可以把映射类的地址映射信息放在这里。</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">接下来让我们就一起走进</span><span style="color: red">Hibernate</span><span style="color: red">的七种映射关系：</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><strong>1、单向一对一关联映射（one-to-one）：</strong></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">两个对象之间一对的关系，例如：Person（人）-IdCard（身份证）</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">有两种策略可以实现一对一的关联映射：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">*主键关联：即让两个对象具有相同的主键值，以表明它们之间的一一对应的关系；数据库表不会有额外的字段来维护它们之间的关系，仅通过表的主键来关联。如下图：</p>
<p style="text-align: center; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-image: initial" alt="" src="http://my.csdn.net/uploads/201207/19/1342630484_2159.png" /></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">例子：<strong><a style="color: #108ac6" href="http://blog.csdn.net/smszhuang168/article/details/7761355">单向一对一主键关联例子连接</a></strong></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">*唯一外键关联：外键关联，本来是用于多对一的配置，但是加上唯一的限制之后（<span style="color: red">采用</span><span style="color: red">&lt;many-to-one&gt;</span><span style="color: red">标签来映射，指定多的一端</span><span style="color: red">unique</span><span style="color: red">为</span><span style="color: red">true</span><span style="color: red">，这样就限制了多的一端的多重性为一</span>），也可以用来表示一对一关联关系，其实它就是多对一的特殊情况。如下图：</p>
<p style="text-align: center; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-image: initial" alt="" src="http://my.csdn.net/uploads/201207/19/1342630547_1309.png" /></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">例子：<strong><a style="color: #108ac6" href="http://blog.csdn.net/smszhuang168/article/details/7761357">单向一对一唯一外键关联例子连接</a></strong></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">注意：因为一对一的主键关联映射扩展性不好，当我们的需要发生改变想要将其变为一对多的时候变无法操作了，所以我们遇到一对一关联的时候经常会采用唯一外键关联来解决问题，而很少使用一对一主键关联。</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><strong>2、单向多对一关联映射（many-to-one）：</strong></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">多对一关联映射原理：在多的一端加入一个外键，指向一的一端，如下图：</p>
<p style="text-align: center; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-image: initial" alt="" src="http://my.csdn.net/uploads/201207/19/1342630612_8974.png" /></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">关键映射代码</span>&#8212;&#8212;在多的一端加入如下标签映射：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;many-to-one&nbsp;name="group"&nbsp;column="groupid"/&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">3、<strong>单向一对多关联映射（one-to-many）</strong>：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">一对多关联映射和多对一关联映射原理是一致的，都是在多的一端加入一个外键，指向一的一端。如下图（学生和班级）：</p>
<p style="text-align: center; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-image: initial" alt="" src="http://my.csdn.net/uploads/201207/19/1342630644_8787.png" /></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">注意：它与多对一的区别是维护的关系不同</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">*多对一维护的关系是：多指向一的关系，有了此关系，加载多的时候可以将一加载上来</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">*一对多维护的关系是：一指向多的关系，有了此关系，在加载一的时候可以将多加载上来</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">关键映射代码</span>&#8212;&#8212;在一的一端加入如下标签映射：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;set&nbsp;name="students"&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;key&nbsp;column="classesid"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;one-to-many&nbsp;<span style="color: #7f0055">class</span>="com.hibernate.Student"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;/set&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: #c00000">缺陷：因为多的一端</span><span style="color: #c00000">Student</span><span style="color: #c00000">不知道</span><span style="color: #c00000">Classes</span><span style="color: #c00000">的存在（也就是</span><span style="color: #c00000">Student</span><span style="color: #c00000">没有维护与</span><span style="color: #c00000">Classes</span><span style="color: #c00000">的关系）所以在保存</span><span style="color: #c00000">Student</span><span style="color: #c00000">的时候关系字段</span><span style="color: #c00000">classesid</span><span style="color: #c00000">是为</span><span style="color: #c00000">null</span><span style="color: #c00000">的，如果将该关系字段设置为非空，则将无法保存数据，常用解决办法是改用双向关联映射，参见</span><span style="color: #c00000">6</span><span style="color: #c00000">。</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">4、<strong>单向多对多映射（many-to-many）</strong>：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">多对多关联映射<span style="color: red">新增加一张表</span>才完成基本映射，如下图：</p>
<p style="text-align: center; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-image: initial" alt="" src="http://my.csdn.net/uploads/201207/19/1342630683_6436.png" /></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">关键映射代码</span>&#8212;&#8212;可以在User的一端加入如下标签映射：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;set&nbsp;name="roles"&nbsp;table="t_user_role"&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;key&nbsp;column="user_id"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;many-to-many&nbsp;<span style="color: #7f0055">class</span>="com.hibernate.Role"&nbsp;column="role_id"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;/set&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">5、<strong>双向一对一关联映射</strong>：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">对比单向一对一映射，需要在IdCard加入&lt;one-to-one&gt;标签，它不影响，只影响加载。如下图：</p>
<p style="text-align: center; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; border-image: initial" alt="" src="http://my.csdn.net/uploads/201207/19/1342630717_9211.png" /></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">双向一对一主键映射关键映射代码&#8212;&#8212;在</span><span style="color: red">IdCard</span><span style="color: red">端新加入如下标签映射</span>：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;one-to-one&nbsp;name="person"/&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">双向一对一唯一外键映射关键映射代码&#8212;&#8212;在</span><span style="color: red">IdCard</span><span style="color: red">端新加入如下标签映射</span>：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;one-to-one&nbsp;name="person"property-ref="idCard"/&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: #c00000">注意：一对一唯一外键关联双向采用</span><span style="color: #c00000">&lt;one-to-one&gt;</span><span style="color: #c00000">标签映射，必须指定</span><span style="color: #c00000">&lt;one-to-one&gt;</span><span style="color: #c00000">标签中的</span><span style="color: #c00000">property-ref</span><span style="color: #c00000">属性为关系字段的名称</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">6、<strong>双向一对多关联映射（<span style="color: red">非常重要</span>）</strong>：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">采用一对多双向关联映射的目的主要是为了主要是为了解决一对多单向关联的缺陷而不是需求驱动的。</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">一对多双向关联的映射方式：</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">* 在一的一端的集合上采用&lt;key&gt;标签，在多的一端加入一个外键</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">* 在多的一端采用&lt;many-to-one&gt;标签</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">注意：</span><span style="color: red">&lt;key&gt;</span><span style="color: red">标签和</span><span style="color: red">&lt;many-to-one&gt;</span><span style="color: red">标签加入的字段保持一直，否则会产生数据混乱</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">关键映射代码：</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">在Classes的一端加入如下标签映射：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;set&nbsp;name="students"inverse="true"&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;key&nbsp;column="classesid"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;one-to-many&nbsp;<span style="color: #7f0055">class</span>="com.hibernate.Student"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;/set&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">在Student的一端加入如下标签映射：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;many-to-one&nbsp;name="classes"&nbsp;column="classesid"/&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">注释：</span><span style="color: red">inverse</span><span style="color: red">属性</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">* inverse属性可以用在一对多和多对多双向关联上，inverse属性默认为false，为false表示本端可以维护关系，如果inverse为true，则本端不能维护关系，会交给另一端维护关系，本端失效。所以一对多关联映射我们通常在多的一端维护关系，让一的一端失效。</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">* inverse是控制方向上的反转，只影响存储</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">7、<strong>双向多对多关联映射</strong>：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">双向的目的就是为了两端都能将对方加载上来，和单向多对多的区别就是双向需要在两端都加入标签映射，需要注意的是：</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">* 生成的中间表名称必须一样</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">* 生成的中间表中的字段必须一样</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">Role</span><span style="color: red">（角色）端关键映射代码：</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;set&nbsp;name="users"&nbsp;table="t_user_role"&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;key&nbsp;column="role_id"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;many-to-many&nbsp;<span style="color: #7f0055">class</span>="com.hibernate.User"&nbsp;column="user_id"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">lt;/set&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px"><span style="color: red">User</span><span style="color: red">（用户）端关键映射代码：</span></p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<div style="text-align: left; padding-bottom: 1px; line-height: 18px; background-color: #ffffff; padding-left: 1px; width: 694px; padding-right: 1px; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', Consolas, 'Courier New', monospace; word-wrap: break-word; margin-left: 9px; word-break: break-all">
<div>
<div style="padding-bottom: 3px; margin: 0px; padding-left: 3px; padding-right: 3px; font-weight: bold">Java代码&nbsp;</div></div>
<ol style="border-bottom: #d1d7dc 1px solid; border-left: #d1d7dc 1px solid; padding-bottom: 2px; line-height: 1.4em; color: #2b91af; margin-left: 0px; font-size: 1em; border-top: #d1d7dc 1px solid; border-right: #d1d7dc 1px solid; padding-top: 2px"><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&lt;set&nbsp;name="roles"&nbsp;table="t_user_role"&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;key&nbsp;column="user_id"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;many-to-many&nbsp;<span style="color: #7f0055">class</span>="com.&nbsp;hibernate.Role"&nbsp;column="role_id"/&gt;&nbsp;&nbsp;</li><li style="line-height: 18px; background-color: #fafafa; padding-right: 0px; margin-left: 38px; font-size: 1em; border-left-color: #d1d7dc; border-left-width: 1px">lt;/set&gt;&nbsp;&nbsp;</li></ol></div>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">&nbsp;</p>
<p style="text-align: left; padding-bottom: 0px; line-height: 18px; background-color: #ffffff; margin: 0px; padding-left: 0px; padding-right: 0px; font-family: Helvetica, Tahoma, Arial, sans-serif; padding-top: 0px">总结：对于上面这七种关联映射中，最重要的就是一对多的映射，因为它更贴近我们的现实生活，比如：教室和学生就可以是典型的一对多的关系，而我们开发软件的目的之一就是为了解决一些生活中重复性问题，把那些重复的问题交给计算机帮助我们完成，从而来提高我们的工作效率。一句话：<span style="color: red">生活离开不开编程，编程更离不开生活</span>。</p><img src ="http://www.blogjava.net/yxhxj2006/aggbug/385517.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-08-15 12:31 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385517.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>轻松上手SpringMVC </title><link>http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385516.html</link><dc:creator>奋斗成就男人</dc:creator><author>奋斗成就男人</author><pubDate>Wed, 15 Aug 2012 04:30:00 GMT</pubDate><guid>http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385516.html</guid><wfw:comment>http://www.blogjava.net/yxhxj2006/comments/385516.html</wfw:comment><comments>http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yxhxj2006/comments/commentRss/385516.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yxhxj2006/services/trackbacks/385516.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: SpringMVC框架介绍Spring框架提供了构造Web应用程序的全能MVC模块。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色，这种分离让它们更容易进行制定。是一个标准的MVC框架。那你猜一猜哪一部分应该是哪一部分？SpringMVC框架图&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &...&nbsp;&nbsp;<a href='http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385516.html'>阅读全文</a><img src ="http://www.blogjava.net/yxhxj2006/aggbug/385516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yxhxj2006/" target="_blank">奋斗成就男人</a> 2012-08-15 12:30 <a href="http://www.blogjava.net/yxhxj2006/archive/2012/08/15/385516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>