??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲AV无码国产丝袜在线观看,亚洲熟妇少妇任你躁在线观看无码,亚洲欧洲日本天天堂在线观看http://m.tkk7.com/yxhxj2006/category/52368.htmlzh-cnSun, 12 Apr 2015 06:48:50 GMTSun, 12 Apr 2015 06:48:50 GMT60从程序员到CTO的Java技术\U图http://m.tkk7.com/yxhxj2006/archive/2015/04/11/424308.html奋斗成就男h奋斗成就男hSat, 11 Apr 2015 05:41:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2015/04/11/424308.htmlhttp://m.tkk7.com/yxhxj2006/comments/424308.htmlhttp://m.tkk7.com/yxhxj2006/archive/2015/04/11/424308.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/424308.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/424308.html  在技术方面无论我们怎么学习QL觉需要提升自已不知道自己处于什么水q了。但如果有清晰的指示图供参考还是非怸错的Q这h们清楚的知道我们大概处于那个阶段和水q?nbsp;

 

JavaE序?/span>

高Ҏ(gu)?/p>

              反射、泛型、注释符、自动装和拆箱、枚丄、可?/p>

              参数、可变返回类型、增强@环、静态导?/p>

        核心~程

             IO、多U程、实体类?/p>

             集合cR正则表辑ּ?/p>

             XML和属性文?/p>

             囑Ş~程

             AWTQJava2D/JavaSound/JMFQ、Swing、SWT、JFace

        |\~程

            Applet、Socket/TCP/UDP、NIO、RMI、CORBA

       Java语法基础

           cR抽象类、接口、最l类、静态类、匿名类、内部类、异常类、编码规?/p>

      Java开发环?/p>

          JDK、JVM、Eclipse、Linux

Java核心~程技?/p>

JavaQ设计而又非常_y的语a。学习JavaQ须从Java开发环境开始,到Java语法Q再到Java的核心API?/p>

        1.Java开发入门:Java开发环境的安装与用,包括JDK命o、EclipseIDE、Linux下JavaE序的开发和部v{?/p>

        2.Java语法基础Q基于JDK和Eclipse环境Q进行Java核心功能开发,掌握Java面向对象的语法构成,包括cR抽象类、接口、最l类、静态类、匿名类、内部类、异常的~写?/p>

        3.Java核心APIQ基于JDK提供的类库,掌握三大核心功能Q?/p>

        A。Java核心~程:包括Java~程的两大核心功?#8212;—Java输入/输出和多线E,以及常用的辅助类?#8212;—实体cR集合类、正则表辑ּ、XML和属性文件?/p>

        B。Java囑Ş~程Q包括Sun的GUI库AWTQJava2D、JavaSound、JMFQ和SwingQIBM和GUI库SWT和Jface;

        C. Java|\~程QAppletlg~程QSocket~程QNIO非阻塞Socket~程、RMI和CORBA分布式开发?/p>

        4.Java高Ҏ(gu):掌握JDK1.4、JDK5.0、JDK6.0中的Java高Ҏ(gu),包括反射、泛型、注释,以及java高Ҏ(gu)?#8212;—自动装箱和拆、枚丄、可变参数、可变返回类型、增强@环、静态导入等?/p>

JavaEE初软g工程?/span>

JSF框架开发技?/p>

       配置文gQ页面导航、后台BeanQ、JSFlg库(JSF EL语言、HTML标签、事件处理、)、JSF核心库(格式转换、输入验证、国际化Q?/p>

Javaweb核心开发技?nbsp;      

       开发环境(Eclipse、LinuxQ?/p>

       三大lgQJSP、JavaBean、ServletQ?/p>

       扩展技术(EL、JSTL、TaglibQ?/p>

|页开发技?/p>

       HTML、XML、CSS、JavaScript、AJAX

       数据库设计技?/p>

       SQL、MySql、Oracle、SQLServer、JDBC

Web服务器(Tomcat/Jetty/Resin/JBossWebQ?/p>

JavaWeb核心技术:

        JavaWeb目开发的全过E可以分解ؓQ?/p>

       |页开?数据库设?#8212;—>JavaWeb目开发,其中QjavaWeb?基本技术组成:JSP+JavaBean+Servlet+EL+JSTL+TaglibQ而JSF正是这6U技术进行有机结合的技术框Ӟ

JavaEE中软g工程?/span>

四种l典架构SSH1、SSI1、SSH2、SSI2

        Struts1表现层框?/p>

      入门配置、核心组件、标{ֺ、国际化、数据检验、数据库开发、Sitemesh集成、集成Hibernate/iBATIS

        Struts2表现层框?/p>

               入门配置、核心组件、标{ֺ、国际化、数据校验、Sitemesh集成转换器、拦截器、集成Hibernate/iBATIS

        Spring业务层框?/p>

              入门配置、IoC容器、MVC、标{ֺ、国际化、数据校验、数据库开?/p>

        Hibernate持久层框?/p>

            MySQL、Oracle、SQLServer iBATIS持久层框?/p>

            MySQL、Oracle、SQLServer

Web服务器(Tomcat/Jetty/Resin/JBossWebQ?/p>

Java高软g工程?/span>

javaWeb开源技术与框架

        工作?/p>

规则引擎

搜烦引擎?/p>

~存引擎 ?/p>

        d调度?/p>

w䆾认证

        报表服务?/p>

pȝ试?/p>

        集群?/p>

负蝲q?/p>

故障转移

JavaWeb分布式开发技?/p>

JTAQJava事物理Q?/p>

      JAASQJava验证和授权服务)

      JNDIQJava命名和目录服务)

      JavaMailQJava邮g服务Q?/p>

JMSQjava信息服务Q?/p>

WebService(web服务)

JCAQjavaq接体系Q?/p>

JMSQjava理体系Q?/p>

应用服务器(JBossAS/WebLogic/WebSphereQ?/p>

JavaEEpȝ架构?/span>

        面向云架构(COAQ?/p>

            COA、SaaS、网D、集计、分布式计算、云计算

        面向资源架构QROAQ?/p>

            ROA、RESI

        面向web服务架构QSOAQ?/p>

           WebService、SOA、SCA、ESB、OSGI、EAI

        Java设计模式

          创徏式模式:抽象工厂/建造?工厂Ҏ(gu)/原型/单例

          构造型模式Q适配?桥接/l合/装饰/外观/享元/代理

          行ؓ型模式:责Q?命o/解释?q代?中介?备忘?观察?状?{略/模板Ҏ(gu)/讉K?/p>

       Java与UML建模

          对象图、用例图、组件图、部|图、序列图、交互图、活动图、正向工E与逆向工程

CTO首席技术官

         发展战略

         技术ȝ

         团队提升

         团队

         目理

         产品理

企业U项目实?带源?地址Q?/strong>http://zz563143188.iteye.com/blog/1825168


攉五年的开发资料下载地址Q?nbsp; http://pan.baidu.com/share/home?uk=4076915866&view=share

 

 

 

 

 下面的更深入的有兴趣可以了解一下,我的目的不是要大家掌握下面的知识Q只是希望扩展自q思维Q摘自牛人的技术博客?/span>

/**************************************************牛h必看*****************************************************************/

 

 

 

pȝ后台框架Q?/p>

 

 

前端工程师技能:

 

 

 

B2C?sh)子商务基础pȝ架构解析
q营B2C?久,来深ȝ意识到ITpȝ对确保规范化业务{Q支撑消费者端的均一服务有着军_性的作用。于是,一直想好好整理下相关的pȝ架构Q怎奈俗务~nQ?一直拖C日,猛然发现下周娃很可能p出生Q拖无可拖,快马加笔Q居然整出来了。本文的重点是理清系l的逻辑关系Q详l的功能模块请参见结N上的pȝ 架构图?br />首先Q聊下对pȝ逻辑架构的看法;我个人始l坚持认为,pȝ的开发与演化Q前C格follow消费者的购买程Q后台则盯牢订单{Q牢牢抓住这两条ȝQ才能高屋徏瓴的看清B2C的逻辑铑֒数据,更深ȝ规划功能模块Q从而更有效支撑实际业务的流转?br />前台pȝ包括Q商品展C,内容展示Q订单确认,支付pȝQ用户中心四大模?br />一Q商品展C?br />按照Ebay的内部分c,M商品以单个或批量的方式展示l消费者的功能均应归入此系l。因此,该系l至包括:
AQ站内搜索(搜烦提示Q搜索规则,搜烦成功,搜烦不成功页Q相似推荐)
BQ导航(频道DQ其他导航如销售排行,q告位,推荐位,文字链,Also buy{)
CQ商品分c(品牌分类Q品cdc,属性分cd剪裁形式Q?br />DQ?登陆(商品列表,商品详细,商品zd)
q里的访问逻辑是:A /B/C分流消费者去往相对个性化的页面,q陆页体现商家的核心诉求和价g递,完成call-to-action的第一步?br />二,内容展示
内容展示较ؓ单,对纯购物品牌而言包括Q?br />AQ公告区
BQ帮助中?br />CQ论坛(如需商城与论坛发生交互,则需自行开发,否则可集成discuz做同步登陆即可)
大家都知道,׃多说了?br />三,订单认
订单认Q就是帮助消费者正提交订单信息的环节Q看似简单,实则非常复杂Q需要对很多信息逻辑判断和处理,一般由2个部分组成:
AQ购物RQ购物R层Q购物R面Q无注册购买Q?br />无注册购买是需要慎用的功能Q除非刻意追求用L短^快下单,如团?换购Q一般不推荐使用Q会造成pȝ异常复杂Q开发量也很大?br />BQ订单提交(q回购物车,收货地址&地址薄,支付方式判断Q配送方式,发票Q订单标讎ͼ实付金额计算{等Q?br />值得一提的是,几乎大多数的促销逻辑q算在这个环节完成,充分考虑各种促销方式之间的互斥与重叠是系l设计的核心Q需要充分考虑各种情况Q避免出现逻辑漏洞?br />四,支付pȝ
与一般的惌不同Q支付系l其实ƈ不简单等于第三方支付工具接入Q?br />AQ外部支付系l(支付宝将接口Q胦付通接口,|银直联端口Q信用ka分期端口Q?br />BQ内部支付系l(账户余额Q积分,C品卡,优惠券)
支付pȝ的逻辑设计不但需要考虑到各U极端情늚发生Q如一张订单先用礼品卡Q再用积分,最后网银支付)Q还要预留胦务做账所需的相兛_D,q充分考虑订单取消之后如何回滚各类内部账户?br />五,用户中心
用户中心的实质是用户自助功能的dashboardQ一?个部分组成:
AQ注?amp;登陆Q快速注册,完整注册Q注册有C|推荐注册Q密码找回,ȝid登陆Qopen-id登陆如QQQ新微博等Q?br />BQ订单中心(历史订单状态,中间状态订单修改,物流q踪Q?br />CQ服务中心(各类自助服务如退ƄP退换货甌Q徏议与投诉{)
DQ?信息理Q用户基本信息管理和账户信息理Q?br />用户中心的h(hun)值在于:可能引导用戯行获取所需的信息ƈ提交所需的服务,在提升服务准率Q及时性的同时降低对h工成本?br />后台pȝ包括Q商?amp;促销QCRMQ订单处理,WMSQ采购管理,财务理Q报表管理,pȝ讄QWApȝ9大模?br />一Q?商品&促销
商品&促销模块的核心在于确保消费者下单之前,前台内容所见即所?br />AQ?商品理Q品cȝ理,品牌理Q单品管理)
BQ?促销理Q活动管理和自定义活动模板管理)
在上q模块中Q最重要的是2个部分:单品理中的扚w产品生成的自动程序和zd理?#8220;׃n与互?#8221;理。前者用于大q提升上新速度Q后者避免促销zd失控?br />二, CRM
CRM是对B2C核心资源—会员的管理,服务与再营销pȝQ包括如下部分:
AQ会员管理(会员信息的增删改查和到其他系l的链接Q?br />BQ用户关怀Q条件触发和人工触发相关EDM & 短信 & OBQ?br />CQ定向营销Q会员分l和营销zd理Q?br />DQ?客服理Q内定w常多Q集成所有需前台与后C互的功能Q详情还是看囑֐Q?br />EQ?呼叫中心QIVRQ坐席管理,l计报表Q参C递与H口嵌入Q?br />值得注意的,EDM和短信通道市面上已l有成熟的外包服务商Q一般都会外包;呼叫中心和在U客服自行开发成本太高,特别是呼叫中心系l,业务初期也都是外包的?br />三, 订单处理
订单处理是在订单未正式进入仓储部门处理之前,对订单的前置性处理环节?br />AQ订单录入(?sh)话订购Q网上下单,外部团购订单Q无金额订单录入如礼品单Q?br />BQ订单审核(自动审核和h工审核)
CQRMA处理QRMA甌单和RMA处理单)
RMA的逻辑也异常复杂,需要在效率和成本之间找qQ确保在不拖垮仓储部门的正常出入库的前提下对消费者端快速有效close工单Q对内部则需要控制成本,货损不能过预算上限?br />四, WMSQWarehouse Management system仓库理pȝQ?br />WMS的流E很长,功能模块也很多,大致分ؓ入库理Q库存管理,出库理和票据管?个模块四个模块,l细道来是另外一文章了Q各位可以参?我这文章:庖丁解牛—B2C仓储内部q作解密Q上Q中Q下Q?a style="color: #108ac6;">http://blog.sina.com.cn/wangxida0855
五, 采购理
采购理的核心是有效跟进采购合同/发票的状态,大货的采购入?退库,财务l算和在仓库存查询和处理?br />AQ供应商理Q供应商信息理Q合同发管理)
BQ采购单理QPO单管理,负PO单管理)
CQ库存管理(库存查询Q库存占用单Q库存变动logQ?br />六, 财务理
B2C的胦务管理,主要是对供应商,渠道和内部费用支出的成本控制?br />AQ供应商l算
BQ渠道结?br />CQ配送结?br />DQ?内部l算
说实在的Q哥对胦务这块也不算很了解,大家就看看Q图片上有明l?br />七, 报表理
报表是B2C业务的宏观表玎ͼ理论上说Q每个部门的KPI都应该从中找到?br />AQ搜索报表(站内搜烦量查询)
BQ销售报表(多个l度销量查询,优惠怋用情况,报表导出Q?br />CQ胦务报?br />DQ?客服报表Q客服日报和坐席报表Q?br />前者反映与消费者发生的日常交互Q包括正怸异常Q,后者考核客服的工作W?br />EQ?仓储物流报表
q几块报表,是业务运作的核心Q涉及到公司机密Q就不能写的太细了,见谅?br />八, pȝ讄
q块大家都知道是q嘛的,也就不多说了Q分成三块?br />AQ基讄Q和业务有关的一些字D|
BQ权限设|(不同账号的操作权限和操作记录Q?br />CQ其他设|?br />?ji)?WApȝQWeb AnalytcisQ?br />|站分析p?l,几乎全是外购Q很有能够自徏的,即自徏Q最多做几个单的模块。用于实战的Q要么是免费的GAQGoogle AnalyticsQ,要么是昂늚Omniture。这块的知识Q细l说来也是另外一文章了Q有兴趣的同学可以看我这科普文章:揭秘—我所知道的网 站分析(上,下) http://blog.sina.com.cn/wangxida0855
最后,上全pȝ大图Q再感慨一句,B2CpȝQ真是一个大工程啊?/p>

 

fr  http://blog.sina.com.cn/s/blog_59d6717c0100syh3.html



]]>
Z注解?Spring MVC 单入?/title><link>http://m.tkk7.com/yxhxj2006/archive/2013/11/04/405982.html</link><dc:creator>奋斗成就男h</dc:creator><author>奋斗成就男h</author><pubDate>Mon, 04 Nov 2013 15:23:00 GMT</pubDate><guid>http://m.tkk7.com/yxhxj2006/archive/2013/11/04/405982.html</guid><wfw:comment>http://m.tkk7.com/yxhxj2006/comments/405982.html</wfw:comment><comments>http://m.tkk7.com/yxhxj2006/archive/2013/11/04/405982.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/yxhxj2006/comments/commentRss/405982.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/yxhxj2006/services/trackbacks/405982.html</trackback:ping><description><![CDATA[<p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; ">以下内容是经q自己整理资料、官Ҏ(gu)档所得:</p><hr style="padding: 0px; margin: 0px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; " /><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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> <span style="padding: 0px; margin: 0px; font-family: SimSun; ">配置Q?/span></span></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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></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; "><servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <description>加蝲/WEB-INF/spring-mvc/目录下的所有XML作ؓSpring MVC的配|文?lt;/description> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/spring-mvc/*.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping></pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">q样Q所有的</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; ">处理Q?/span></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">初始?DispatcherServlet Ӟ该框架在 web 应用E序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的文Ӟq在那里定义相关?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Beans</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q重写在全局中定义的M</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Beans</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q像上面?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">web.xml</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">中的代码Q对应的是dispatcher</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">-servlet.xml</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q当然也可以使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; "><init-param></span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">元素Q手动指定配|文件的路径Q?/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> <span style="padding: 0px; margin: 0px; ">配置Q?/span></strong></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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; "><?xml version="1.0" encoding="UTF-8"?> <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"> <!-- 使Spring支持自动组Ӟ如注解的Controller --> <context:component-scan base-package="com.minx.crm.web.controller"/> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" /> </beans></pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-weight: bold; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 新宋? ">W一?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Controller</span><span style="padding: 0px; margin: 0px; font-family: 新宋? ">Q?/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: 微Y雅黑, 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; ">注解标识一个控制器Q?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@RequestMapping</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">注解标记一个访问的路径Q?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">/index.htm</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q,</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">return "index"</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">标记q回视图Q?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">index.jsp</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q;</span></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, 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; ">注解在类U别上,则表CZ相对路径Q在Ҏ(gu)U别上,则标记访问的路径Q?/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; ">注解标记的访问\径中获取参数Q?/span></strong></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Spring MVC</span> <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; ">参数Q如Q?/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: 微Y雅黑, 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; ">模版Q?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">{}</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">传入面参数Q?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">@PathVariable</span> <span style="padding: 0px; margin: 0px; font-family: SimSun; ">获取传入参数Q即可通过地址Q?/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> <span style="padding: 0px; margin: 0px; font-family: SimSun; ">讉KQ?/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; ">Ҏ(gu)不同?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">Web</span><span style="padding: 0px; margin: 0px; ">hҎ(gu)Q映到不同的处理方法:</span></strong></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">使用登陆面作示例,定义两个Ҏ(gu)分L对?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">GET</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">h和?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">POST</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">h讉K</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; ">h的方法显C图,使用</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; ">h的方法处理业务逻辑</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q?/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: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">在视N面,通过地址栏访?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">login.htm</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q是通过</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">GET</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">h讉K面Q因此,q回登陆表单视图</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">login.jsp</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q当在登陆表单中使用</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">POST</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">h提交数据Ӟ则访?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">login2</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Ҏ(gu)Q处理登陆业务逻辑Q?/span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; ">防止重复提交数据Q可以?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: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><strong style="padding: 0px; margin: 0px; ">可以传入Ҏ(gu)的参数类型:</strong></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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: 微Y雅黑, 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: 微Y雅黑, 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: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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: 新宋? ">Q值得注意的是Q如果第一ơ访问页面,</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">HttpSession</span><span style="padding: 0px; margin: 0px; font-family: 新宋? ">没被创徏Q可能会出错Q?/span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋? font-size: 10pt; ">其中Q?span style="padding: 0px; margin: 0px; color: blue; ">String username = request.getParameter("username");</span>可以转换Z入的参数Q?/p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: 新宋? 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(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: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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> <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: 新宋? ">h?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">POST</span><span style="padding: 0px; margin: 0px; font-family: 新宋? ">h提交的参敎ͼ</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> <span style="padding: 0px; margin: 0px; ">Q?/span></strong></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, 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; ">Q?/span></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, 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; ">对象Q就可以在方法中使用Q?/span></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, 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: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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; ">获取表单中提交的|q封装到</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; ">的方法里Q?/span></strong></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, 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; ">如下Q?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">User.java</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q:</span></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, 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; …此处省略getter,setter... }</pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "><span style="padding: 0px; margin: 0px; font-family: SimSun; ">通过表单提交Q直接可以把表单值封装到</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: 微Y雅黑, 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: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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> <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: 微Y雅黑, 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: 微Y雅黑, 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: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></strong><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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; ">卛_Q;</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; ">中方法的q回|</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; ">Q多数用于?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">PrintWriter</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">输出响应数据Q?/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> <span style="padding: 0px; margin: 0px; font-family: 新宋? ">cd</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q返回该</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; ">Q?/span></span></p><p style="padding: 0px; margin: 0in; line-height: 22px; background-color: #ffffff; font-family: SimSun; font-size: 10pt; ">Lcd对象Q?/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; ">q回</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">ModelAndView</span><span style="padding: 0px; margin: 0px; font-family: SimSun; ">Q?/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; ">Q?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">ExcelView</span><span style="padding: 0px; margin: 0px; ">Q:</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; ">Q:</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: 微Y雅黑, 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: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></strong><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "></p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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; ">接口Qƈ实现其三个方法:</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; ">preHandleQ拦截器的前端,执行控制器之前所要处理的Ҏ(gu)Q通常用于权限控制、日志,其中Q?/span><span style="padding: 0px; margin: 0px; ">Object o</span><span style="padding: 0px; margin: 0px; ">表示下一个拦截器Q?/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; ">Q控制器的方法已l执行完毕,转换成视图之前的处理Q?/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; ">Q视囑ַ处理完后执行的方法,通常用于释放资源Q?/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: 新宋? ">的配|文件中Q配|拦截器与需要拦截的</span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">URL</span><span style="padding: 0px; margin: 0px; font-family: 新宋? ">Q?/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; "><mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/index.htm" /> <bean class="com.minx.crm.web.interceptor.MyInterceptor" /> </mvc:interceptor> </mvc:interceptors></pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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: 新宋? ">配置文g中,配置国际化属性文Ӟ</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; "><bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource" p:basename="message"> </bean></pre><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; font-size: 14px; line-height: 22px; background-color: #ffffff; "> </p><p style="padding: 0px; margin: 0px 0px 10px; font-family: 微Y雅黑, 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; ">那么Q?/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; ">标签Q?lt;%@taglib uri="</span><a 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" %>Q?/span><span style="padding: 0px; margin: 0px; "><spring:message code="key" /></span><span style="padding: 0px; margin: 0px; ">调用Q即可;</span></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, Verdana, sans-serif, 宋体; line-height: 22px; background-color: #ffffff; font-size: 10pt; "><span style="padding: 0px; margin: 0px; font-family: 新宋? ">如果一U语aQ有多个语言文gQ可以更?/span><span style="padding: 0px; margin: 0px; font-family: Calibri; ">MVC</span><span style="padding: 0px; margin: 0px; font-family: 新宋? ">配置文g为:</span></p><p style="padding: 0px; margin: 0in; font-family: 微Y雅黑, 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; "><bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basenames"> <list> <value>message01</value> <value>message02</value> <value>message03</value> </list> </property> </bean></pre><img src ="http://m.tkk7.com/yxhxj2006/aggbug/405982.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/yxhxj2006/" target="_blank">奋斗成就男h</a> 2013-11-04 23:23 <a href="http://m.tkk7.com/yxhxj2006/archive/2013/11/04/405982.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2拦截器的使用http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388129.html奋斗成就男h奋斗成就男hWed, 19 Sep 2012 17:10:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388129.htmlhttp://m.tkk7.com/yxhxj2006/comments/388129.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388129.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/388129.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/388129.html阅读全文

]]>
struts2原理(?http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388130.html奋斗成就男h奋斗成就男hWed, 19 Sep 2012 17:10:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388130.htmlhttp://m.tkk7.com/yxhxj2006/comments/388130.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388130.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/388130.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/388130.html1.Struts 2的基本流E?nbsp;
Struts 2框架?个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑lg。在q?个部分里QStruts 2框架提供了核心控制器FilterDispatcherQ而用户需要实C务控制器和业务逻辑lg?nbsp;
2.核心控制器:FilterDispatcher 
FilterDispatcher是Struts 2框架的核心控制器Q该控制器作Z个Filterq行在Web应用中,它负责拦截所有的用户hQ当用户h到达Ӟ该Filter会过滤用戯求。如果用戯求以actionl尾Q该h被转入Struts 2框架处理?nbsp;

Struts 2框架获得?.actionh后,根?.actionh的前面部分决定调用哪个业务逻辑lgQ例如,对于login.actionhQStruts 2调用名ؓlogin的Action来处理该h?nbsp;

Struts 2应用中的Action都被定义在struts.xml文g中,在该文g中定义ActionӞ定义了该Action的name属性和class属性,其中name属性决定了该Action处理哪个用户hQ而class属性决定了该Action的实现类?nbsp;

Struts 2用于处理用户h的Action实例Qƈ不是用户实现的业务控制器Q而是Action代理——因ؓ用户实现的业务控制器q没有与Servlet API耦合Q显然无法处理用戯求。而Struts 2框架提供了系列拦截器Q该pd拦截器负责将HttpServletRequesth中的h参数解析出来Q传入到Action中,q回调Action 的executeҎ(gu)来处理用戯求?nbsp;

昄Q上面的处理q程是典型的AOPQ面向切面编E)处理方式。图3.19昄了这U处理模型?nbsp;



?.19 Struts 2的拦截器和Action 

从图3.19中可以看出,用户实现的ActioncM仅是Struts 2的Action代理的代理目标。用户实现的业务控制器(ActionQ则包含了对用户h的处理。用Lh数据包含?HttpServletRequest对象里,而用LActioncL需讉KHttpServletRequest对象。拦截器负责?HttpServletRequest里的h数据解析出来Qƈ传给业务逻辑lgAction实例?nbsp;
3.业务控制?nbsp;
正如从图3.19所看到的,业务控制器组件就是用户实现Actioncȝ实例QActionc里通常包含了一个executeҎ(gu)Q该Ҏ(gu)q回一个字W串——该字W串是一个逻辑视图名,当业务控制器处理完用戯求后Q根据处理结果不同,executeҎ(gu)q回不同字符?——每个字符串对应一个视囑֐?nbsp;

E序员开发出pȝ所需要的业务控制器后Q还需要配|Struts 2的ActionQ即需要配|Action的如下三个部分定义: 

— Action所处理的URL?nbsp;

— Actionlg所对应的实现类?nbsp;

— Action里包含的逻辑视图和物理资源之间的对应关系?nbsp;

每个Action都要处理一个用戯求,而用戯求L包含了指定URL。当Filter Dispatcher拦截到用戯求后Q根据请求的URL和Action处理URL之间的对应关pL处理转发?nbsp;
4.Struts 2的模型组?nbsp;
实际上,模型lg已经出了MVC框架的覆盖范围。对于Struts 2框架而言Q通常没有为模型组件的实现提供太多的帮助?nbsp;

文本? ?.20 控制器调用模型组件Java EE应用里的模型lgQ通常指系l的业务逻辑lg。而隐藏在pȝ的业务逻辑lg下面的,可能q包含了DAO、领域对象等lg?nbsp;

通常QMVC框架里的业务控制器会调用模型lg的方法来处理用户h。也是_业务逻辑控制器不会对用户hq行M实际处理Q用戯求最l由模型lg负责处理。业务控制器只是中间负责调度的调度器Q这也是UAction为控制器的原因?nbsp;


?.20昄了这U处理流E?nbsp;

提示 在图3.20中看到Action调用业务逻辑lg的方法。当控制器需要获得业务逻辑lg实例Ӟ通常q不会直接获取业务逻辑lg实例Q而是通过工厂模式来获得业务逻辑lg的实例;或者利用其他IoC容器Q如Spring容器Q来理业务逻辑lg的实例?nbsp;
5.Struts 2的视囄?nbsp;
Struts 2已经改变了Struts 1只能使用JSP作ؓ视图技术的现状QStruts 2允许使用其他的模板技术,如FreeMarker、Velocity作ؓ视图技术?nbsp;

当Struts 2的控制器q回逻辑视图名时Q逻辑视图q未与Q何的视图技术关联,仅仅是返回一个字W串Q该字符串作为逻辑视图名?nbsp;

当我们在struts.xml文g中配|?ActionӞ不仅需要指定Action的name属性和class属性,q要为Action元素指定pdresult子元素,每个result子元素定义一个逻辑视图和物理视图之间的映射。前面所介绍的应用都使用了JSP技术作图,故配|result子元素时没有指定type属性,默认使用JSP 作ؓ视图资源?nbsp;

如果需要在Struts 2中用其他视图技术,则可以在配置result子元素时Q指定相应的type属性即可。例如,如果需要用FreeMarkerQ则为result指定gؓfreemarker的type属性;如果想用Velocity模板技术作图资源,则ؓresult指定gؓvelocity的type属?#8230;… 
6.Struts 2的运行流E?nbsp;
l过上面介绍Q我们发现Struts 2框架的运行流E非常类gWebWork框架的流E?nbsp;

提示 在Struts 2的官方站点,我们可以扑ֈ如下说法QEssentiallyQStruts 2.0 is the technical equivalent of WebWork 2.3。Aside from the package and property renamingQit isn't much different thanQsayQmigrating from WebWork 2.1 to 2.2——意思是_Struts 2.0技术等同于WebWork 2.3框架Q除了包和属性被改名外。从WebWork 2.2q移到Struts 2不会比从WebWork 2.1q移到WebWork 2.2更复杂?nbsp;

q里我们可以看到QStruts 2其实是WebWork 2.2的升U版Q这也就不难理解Qؓ什么WebWork和Struts 2如此怼Q?nbsp;

因此QStruts 2的运行流E与WebWork的运行流E完全相同,读者可以参看图1.8来了解Struts 2的运行流E?/span> 

]]>
struts2 的基?-拦截?/title><link>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388128.html</link><dc:creator>奋斗成就男h</dc:creator><author>奋斗成就男h</author><pubDate>Wed, 19 Sep 2012 17:09:00 GMT</pubDate><guid>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388128.html</guid><wfw:comment>http://m.tkk7.com/yxhxj2006/comments/388128.html</wfw:comment><comments>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388128.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/yxhxj2006/comments/commentRss/388128.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/yxhxj2006/services/trackbacks/388128.html</trackback:ping><description><![CDATA[     摘要: struts2 的基?-拦截?Interceptor)(转蝲自http://m.tkk7.com/max/archive/2006/12/06/85925.html) 许多朋友可能对于Struts 2.0与WebWork关系q搞不清楚。下面是Apache的Struts官网中的一D话Q?nbsp;Apache Struts 2 was originally known as...  <a href='http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388128.html'>阅读全文</a><img src ="http://m.tkk7.com/yxhxj2006/aggbug/388128.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/yxhxj2006/" target="_blank">奋斗成就男h</a> 2012-09-20 01:09 <a href="http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388128.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2的注解功?/title><link>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388127.html</link><dc:creator>奋斗成就男h</dc:creator><author>奋斗成就男h</author><pubDate>Wed, 19 Sep 2012 17:08:00 GMT</pubDate><guid>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388127.html</guid><wfw:comment>http://m.tkk7.com/yxhxj2006/comments/388127.html</wfw:comment><comments>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388127.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/yxhxj2006/comments/commentRss/388127.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/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: 宋体; ">配置的。但是随着pȝ规模的加大我们需要配|的文g会比较大Q虽然我们可以根据不同的pȝ功能不同模块的配置文g单独书写Q然后通过</span><span style="font-family: 'Courier New'; "><include></span><span style="font-family: 宋体; ">节点不同的配置文g引入到最l的</span><span style="font-family: 'Courier New'; ">struts.xml</span><span style="font-family: 宋体; ">文g中,但是毕竟q是要维护和理q些文gQ因此也会给l护工作带来很大的困扰。ؓ了解册个问题,可以考虑使用</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: 宋体; ">{等概念Q所以只要明白这些注解就可以了?/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: 宋体; ">Q我使用的环境是</span><span style="font-family: 'Courier New'; ">struts2.1.8.1</span><span style="font-family: 宋体; ">。如果你使用了不同的版本Q找名字p?/span></p><p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">在以上所q的</span><span style="font-family: 'Courier New'; ">jar</span><span style="font-family: 宋体; ">文g中定义了一pd的注解,其中比较主要的是Q?/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: 宋体; ">Q这个注解对应了</span><span style="font-family: 'Courier New'; ">xml</span><span style="font-family: 宋体; ">文g中的</span><span style="font-family: 'Courier New'; ">package</span><span style="font-family: 宋体; ">节点Q它只有一个属性叫</span><span style="font-family: 'Courier New'; ">value</span><span style="font-family: 宋体; ">Q其实就?/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: 宋体; ">Q命名空_也就?/span><span style="font-family: 'Courier New'; ">xml</span><span style="font-family: 宋体; ">文g?/span><span style="font-family: 'Courier New'; "><package></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: 宋体; ">Q这个注解对?/span><span style="font-family: 'Courier New'; "><action></span><span style="font-family: 宋体; ">节点。这个注解可以应用于</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">cMQ也可以应用于方法上。这个注解中有几个属性:</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: 宋体; ">Q表C?/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: 宋体; ">Q也是</span><span style="font-family: 'Courier New'; "><action></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: 宋体; ">Q表C?/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: 宋体; ">Q这个属性是一个数l属性,因此可以定义多个</span><span style="font-family: 'Courier New'; ">Result</span><span style="font-family: 宋体; ">Q?/span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">interceptorRefs()</span><span style="font-family: 宋体; ">Q表C?/span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">的多个拦截器。这个属性也是一个数l属性,因此可以定义多个拦截器;</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">params()</span><span style="font-family: 宋体; ">Q这是一?/span><span style="font-family: 'Courier New'; ">String</span><span style="font-family: 宋体; ">cd的数l,它按?/span><span style="font-family: 'Courier New'; ">name/value</span><span style="font-family: 宋体; ">的Ş式组l,是传l?/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: 宋体; ">Q这是异常属性,它是一?/span><span style="font-family: 'Courier New'; ">ExceptionMapping</span><span style="font-family: 宋体; ">的数l属性,表示</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">的异常,在用时必须引用相应的拦截器Q?/span></li></ul></li><li style="list-style: inherit; "><div><span style="font-family: 'Courier New'; ">@Result</span><span style="font-family: 宋体; ">Q这个注解对应了</span><span style="font-family: 'Courier New'; "><result></span><span style="font-family: 宋体; ">节点。这个注解只能应用于</span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">cM。这个注解中也有几个属性:</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: 宋体; ">Q表C?/span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">Ҏ(gu)的返回|也就?/span><span style="font-family: 'Courier New'; "><result></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: 宋体; ">Q表C?/span><span style="font-family: 'Courier New'; ">view</span><span style="font-family: 宋体; ">层文件的位置Q可以是相对路径Q也可以是绝对\径;</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">type()</span><span style="font-family: 宋体; ">Q是</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: 宋体; ">Q?/span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">params()</span><span style="font-family: 宋体; ">Q是一?/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: 宋体; ">中的主要注解是q些Q当然了Q还有上面提到的</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: 宋体; ">Q基本上Q掌握了q些注解可以了?/span></p><p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">但是如果惌q些注解真正工作Q必d配置文g增加几个帔R的定义:</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: 宋体; ">Q这个常量表C缺省的包名是什么,因ؓ在实际应用中Q我们常常定义一个缺省的包,q个包中定义了一大堆的拦截器{等Q然后其他的包承自q个包。这个常量可以配也可以不配;</span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">struts.convention.package.locators</span><span style="font-family: 宋体; ">Q这个常量表CZ?/span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">cȝ</span><span style="font-family: 'Courier New'; ">java</span><span style="font-family: 宋体; ">包的包名的后~是啥Q比?/span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">。这个常量也可以不配Q?/span></li><li style="list-style: inherit; "><span style="font-family: 'Courier New'; ">struts.convention.package.locators.basePackage</span><span style="font-family: 宋体; ">Q这个常量表CZ?/span><span style="font-family: 'Courier New'; ">action</span><span style="font-family: 宋体; ">cȝ</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: 宋体; ">的名字是啥;q个帔R也可以不配;</span></li></ul><p style="font-family: Arial; line-height: 25px; background-color: #ffffff; "><span style="font-family: 宋体; ">以上三个帔R都是辅助作用的,Z让注解真正的工作Q必d配置文g中增?/span><span style="font-family: 'Courier New'; "><package></span><span style="font-family: 宋体; ">节点的配|,臛_?/span><span style="font-family: 'Courier New'; "><package name="myPackage" extends="struts-default" /></span><span style="font-family: 宋体; ">Q这h解就可以使用了?/span></p><img src ="http://m.tkk7.com/yxhxj2006/aggbug/388127.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/yxhxj2006/" target="_blank">奋斗成就男h</a> 2012-09-20 01:08 <a href="http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388127.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ibatis 开发指?3http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388123.html奋斗成就男h奋斗成就男hWed, 19 Sep 2012 16:56:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388123.htmlhttp://m.tkk7.com/yxhxj2006/comments/388123.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388123.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/388123.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/388123.html阅读全文

]]>
ibatis 开发指?3http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388122.html奋斗成就男h奋斗成就男hWed, 19 Sep 2012 16:55:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388122.htmlhttp://m.tkk7.com/yxhxj2006/comments/388122.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388122.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/388122.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/388122.htmlibatis的调试相对困?出错的时候主要依据是log4生成的log文g?net的出错提C?q方面要能比较熟l的看懂. 
下面q个配置基本上包含了最复杂的功?分页\搜烦\排序\~存\传值Hash表\q回hash表\动态sql 
如果对下面这D配|能信手_来的话,那开发速度会大大的提? 
<statement id="XinxiTable_SelectAll" listClass="ArrayList" >
resultMap="SimpleXinxi" parameterClass="Hashtable" cacheModel="xinxi-cache" > 
SELECT 
<dynamic prepend="top"> 
<isNotEqual prepend="top" property="TopNum" compareValue = "0"> 
$TopNum$ 
</isNotEqual> 
</dynamic> 

FROM 
(select a.[iXinxiID],a.[sXinxiTitle],a.[iXinxiClassId],b.[sClassName], 
a.[dXinxiDate],a.[dXinxiYxq],a.[iXinxiHits],a.[sXinxiUser],a.[sRedirectUrl], 
ROW_NUMBER() OVER( 
<dynamic prepend="order by"> 
<isEqual prepend="order by" property="Sort" compareValue = "0"> 
a.iXinxiID desc 
</isEqual> 
<isEqual prepend="order by" property="Sort" compareValue = "1"> 
a.iXinxiID asc 
</isEqual> 
<isEqual prepend="order by" property="Sort" compareValue = "2"> 
a.iXinxiHits desc 
</isEqual> 
<isEqual prepend="order by" property="Sort" compareValue = "3"> 
a.iXinxiHits asc 
</isEqual> 
</dynamic> 
) as row 
FROM 
[dbo].[XinxiTable] as a,[dbo].[XinxiClass] as b 
<dynamic prepend="where"> 
<isParameterPresent> 
<isNotEmpty prepend="and" property="XinxiType" > 
a.[iXinxiState]= $XinxiType$ 
</isNotEmpty> 
<isNotEqual prepend="and" property="XinxiClass" compareValue = "0"> 
a.[iXinxiClassID]= $XinxiClass$ 
</isNotEqual> 
<isEqual prepend="and" property="SearchType" compareValue = "1"> 
a.[sXinxiTitle] LIKE '%$Keyword$%' 
</isEqual> 
<isEqual prepend="and" property="SearchType" compareValue = "2"> 
(a.[sXinxiTitle] LIKE '%$Keyword$%' or a.[sXinxiContent] LIKE '%$Keyword$%') 
</isEqual> 
</isParameterPresent> 
</dynamic> 
and a.iXinxiClassId=b.iClassId 
)a 
<dynamic prepend="where"> 
<isParameterPresent> 
<isEqual prepend="and" property="IsPage" compareValue = "1"> 
row between $PageLower$ and $PageUpper$ 
</isEqual> 
</isParameterPresent> 
</dynamic> 
</statement> 

]]>
JSTL 学习、应用记?/title><link>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388120.html</link><dc:creator>奋斗成就男h</dc:creator><author>奋斗成就男h</author><pubDate>Wed, 19 Sep 2012 16:53:00 GMT</pubDate><guid>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388120.html</guid><wfw:comment>http://m.tkk7.com/yxhxj2006/comments/388120.html</wfw:comment><comments>http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388120.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/yxhxj2006/comments/commentRss/388120.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/yxhxj2006/services/trackbacks/388120.html</trackback:ping><description><![CDATA[     摘要: JSP 标准标记库( Standard Tag Library Q?JSTL) 是一l以标准化格式实现许多通用?Web 站点功能的定制标记?nbsp;JSP 技术的优势之一在于其定制标记库工具。除了核?JSP 标记Q如 jsp:include 之外Q定制标记库工具使?zhn)能够创徏唯一的标记来描述以站Ҏ(gu)应用E序为导向的操作。一旦?zhn)创徏了定制标记?( U?taglib) Q当(zhn)扩展项目或转向?..  <a href='http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388120.html'>阅读全文</a><img src ="http://m.tkk7.com/yxhxj2006/aggbug/388120.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/yxhxj2006/" target="_blank">奋斗成就男h</a> 2012-09-20 00:53 <a href="http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388120.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发dao模型http://m.tkk7.com/yxhxj2006/archive/2012/09/20/388116.html奋斗成就男h奋斗成就男hWed, 19 Sep 2012 16:48:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388116.htmlhttp://m.tkk7.com/yxhxj2006/comments/388116.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388116.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/388116.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/388116.html开发dao模型: 

接口是用来定义操作的Q在q里应该定义Q添、删、改、查QID查、查询全部、模p查询){操作?nbsp;
import java.util.* ; 
// 规定Z操作person表在此项目里的全部方?nbsp;
public interface PersonDAO 

// 增加操作 
public void insert(Person person) throws Exception; 
// 修改操作 
public void update(Person person) throws Exception; 
// 删除操作 
public void delete(String id) throws Exception; 
// 按ID查询操作 
public Person queryById(String id) throws Exception; 
// 查询全部 
public List queryAll() throws Exception; 
// 模糊查询 
public List queryByLike(String cond) throws Exception; 

另创Z个类 
import java.util.*; 
public class PersonDAOImpl implements PersonDAO 

// 增加操作 
public void insert(Person person) throws Exception 


// 修改操作 
public void update(Person person) throws Exception 


// 删除操作 
public void delete(String id) throws Exception 


// 按ID查询操作 
public Person queryById(String id) throws Exception 


// 查询全部 
public List queryAll() throws Exception 


// 模糊查询 
public List queryByLike(String cond) throws Exception 



接下来我们按Ҏ(gu)一个一个的实现功能Q?nbsp;
Q?Q添加操作,传入参数是Person personQ同学们要理解ؓ什么传入PersonQ因为Person是数据beanQ是用来存放数据的不从前台到后台数据库q是从后台数据库到前収ͼPerson的角色都是用来传送数据的?nbsp;

sql = "INSERT INTO person (id,name,password,age,email) VALUES (?,?,?,?,?)" ; 
Q?Q修Ҏ(gu)作与d操作cM传入参数也ؓperson对象Q只是SQL的执行语句不同,当然修改要有条gQ即修改谁,q里是以id作ؓ修改条g的?nbsp;
sql = "UPDATE person SET name=?,password=?,age=?,email=? WHERE id=?" ; 
Q?Q删除操作,Z么这里没有以Person做参数呢Q原因是使用的过E中删除操作都是通过id来标志一行记录的Qؓ了用方便所以传一个id可以实现删除操作?nbsp;
sql = "DELETE FROM person WHERE id=?" ; 
Q?Q查询操作一般分ZU:按ID查询、查询全部、模p查询?nbsp;
W一U:按ID查询操作Q传入一个id可回一条记录,也就是一个person对象Qperson对应着数据库里的一行记录,所以返回值应该ؓPersoncd?nbsp;

sql = "SELECT id,name,password,age,email FROM person WHERE id=?" ; 
W二U:查询全部Q也是查询整张表的全部数据Q因为整张表有多条记录,所以对应就应该有多个person对象Q查询的时候我们可以用list存放多个person对象Q查询之后将该listq回?nbsp;

sql = "SELECT id,name,password,age,email FROM person" ; 
W三U:模糊查询Q所谓模p查询是指在数据表中查找与指定字W串部分相匹配的字段的行Q如我们可以在一个用L数据库中查找姓名中含?#8220;?#8221;字的所有记录,可以用like语句来实现。由于结果可能有多条记录Q所以返回值好是存放Person对象的List?nbsp;

sql = "SELECT id,name,password,age,email FROM person "+"WHERE name LIKE ? or email LIKE ?" ; 

]]>
全注解SSHhttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388114.html奋斗成就男h奋斗成就男hWed, 19 Sep 2012 16:43:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388114.htmlhttp://m.tkk7.com/yxhxj2006/comments/388114.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/09/20/388114.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/388114.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/388114.html阅读全文

]]>
struts2表单传?/title><link>http://m.tkk7.com/yxhxj2006/archive/2012/08/30/386642.html</link><dc:creator>奋斗成就男h</dc:creator><author>奋斗成就男h</author><pubDate>Thu, 30 Aug 2012 14:49:00 GMT</pubDate><guid>http://m.tkk7.com/yxhxj2006/archive/2012/08/30/386642.html</guid><wfw:comment>http://m.tkk7.com/yxhxj2006/comments/386642.html</wfw:comment><comments>http://m.tkk7.com/yxhxj2006/archive/2012/08/30/386642.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://m.tkk7.com/yxhxj2006/comments/commentRss/386642.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/yxhxj2006/services/trackbacks/386642.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; ">    struts2表单传值类似栈,然后在action中把表单的各个名U用cd性表C就可以了。然后只需要加上get和setҎ(gu)</span><br /><span style="font-size: 10pt; ">   Q?Q: 文本框:<</span><span style="font-size: 10pt; ">s:textfield /></span><br /><font size="2"><span style="font-size: 10pt; ">              提交Q?<s:textfield name="paramname"/> </span></font><br /><span style="font-size: 10pt; ">              Ation处理Q用String或者intcd?/span><span style="font-size: 10pt; ">paramname</span><span style="font-size: 10pt; "> 表示</span><br /><span style="font-size: 10pt; ">              接收Q(1Q:</span><span style="font-size: 10pt; "><s:textfield name="</span><span style="font-size: 10pt; ">paramname </span><span style="font-size: 10pt; ">"  value="%{</span><span style="font-size: 10pt; ">paramname </span><span style="font-size: 10pt; ">}"/></span><br /><span style="font-size: 10pt; ">                      Q?Q:</span><span style="background-color: #eeeeee; font-size: 10pt; "><</span><span style="background-color: #eeeeee; font-size: 10pt; ">s:property 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> <span style="font-size: 10pt; ">paramname"</span><span style="background-color: #eeeeee; font-size: 10pt; ">><br /></span><span style="font-size: 10pt; ">   Q?Q:单选框Q?lt;s:radio /><br /></span><span style="font-size: 10pt; ">            提交和接?</span><span style="font-size: 10pt; "><s:radio list="{'?,'?}" name="sex" label="性别"/> </span><span style="font-size: 10pt; "><br /></span>           <br /><span style="font-size: 10pt; ">   Q?Q:多选框Q?/span><span style="font-size: 10pt; "><s:select /></span><br /><span style="font-size: 10pt; ">             提交和接Ӟ</span><span style="font-size: 10pt; "><s:checkboxlist name="hobby" listKey="key" listValue="value" list="#{'1':'球', '2':'球', '3':'乒乓?}"  label="爱好"/></span><span style="font-size: 10pt; ">其中key表示|而value指显C的文字?/span><br /><span style="font-size: 10pt; ">            Action处理Q用一个list集合表示</span><span style="font-size: 10pt; color: red; ">Q注意:千万不要用String[] 数组表示Q否则,值无法传回)</span><br /><span style="font-size: 10pt; ">   Q?Q:下拉框:</span><span style="font-size: 10pt; "><s:select /></span><br /><span style="font-size: 10pt; ">           提交和接受:</span><span style="font-size: 10pt; "><s:select list="#{1:'北京',2:'上v',3:'q东'}"  label="abc" listKey="key" </span><span style="white-space: pre; "> </span><span style="font-size: 10pt; ">listValue="value"  name="address"/></span><br /><span style="font-size: 10pt; ">          Action处理Q?/span><span style="font-size: 10pt; color: red; ">可以用一个list数组或者String 字符串表C都可以?/span><br /><span style="color: #339966; ">=====================================================================================</span><br /><span style="font-size: 10pt; ">其中Q一般的表单都有三种方式传|</span><br /><span style="font-size: 10pt; ">Q?Q:cM于set集合Q只昄|其中里面是?/span><br /><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微Y雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="margin: 0px; padding: 0px; color: #000000; font-size: 10pt; "><s:select list="{'aa','bb','cc'}" theme="simple" headerKey="00" headerValue="00"></s:select></span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微Y雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "> <span style="color: #000000; font-size: 10pt; ">(2)Q类gmapQlist前面是value|后面是显C的?/span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微Y雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "> <span style="color: #000000; font-size: 10pt; "><s:select list="#{1:'aa',2:'bb',3:'cc'}"  label="abc" listKey="key" listValue="value"  headerKey="0" headerValue="aabb"></span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微Y雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "> <span style="color: #000000; font-size: 10pt; ">3.从action-->jsp面Q?/span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微Y雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "> <span style="color: #000000; font-size: 10pt; "><%</span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微Y雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "> <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, 微Y雅黑, 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, 微Y雅黑, 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, 微Y雅黑, 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, 微Y雅黑, 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, 微Y雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="color: #000000; font-size: 10pt; ">%><br /></span></p><p style="padding: 0px; color: #403226; font-family: verdana, 'ms song', 宋体, Arial, 微Y雅黑, Helvetica, sans-serif; line-height: 24px; background-color: #ffffff; "><span style="font-size: 10pt; ">JSP面Q?/span><br /> <span style="color: #000000; font-size: 10pt; "><s:select list="#request.map"  label="abc" listKey="key" listValue="value" value="#request.aa"  headerKey="0" headerValue="aabb"></s:select></span></p><img src ="http://m.tkk7.com/yxhxj2006/aggbug/386642.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/yxhxj2006/" target="_blank">奋斗成就男h</a> 2012-08-30 22:49 <a href="http://m.tkk7.com/yxhxj2006/archive/2012/08/30/386642.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iBatis2之SqlMap配置ȝQ?8条)http://m.tkk7.com/yxhxj2006/archive/2012/08/28/386392.html奋斗成就男h奋斗成就男hMon, 27 Aug 2012 16:42:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/08/28/386392.htmlhttp://m.tkk7.com/yxhxj2006/comments/386392.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/08/28/386392.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/386392.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/386392.html

iBatis2之SqlMap配置ȝQ?8条)  

  订阅

SqlMap的配|是iBatis中应用的核心。这部分d占据了iBatis开发的70的工作量?br />1、命名空_
  <sqlMap namespace="Account">Q在此空间外要引用此I间的元素,则需要加上命名空间名?/div>
 
2、实体的别名Q?/div>
  <typeAlias alias="Account" type="com.lavasoft.ibatissut.simple.domain.entity.Account"/>
  如果有用到的全名的地方,可以用别名代替,受命名空间约束?/div>
 
3、插入操?/div>
    对于自增主键的表Q插入可以不配置插入的主键列。否则是必须的?/div>
 
4、获取主?/div>
     插入语句之前配置Q主要是针对Sequence主键而言Q插入前必须指定一个主键值给要插入的记录。Oracle、DB2亦如此,Ҏ(gu)是在插入语句标签<insert....>之前配置上:
    <insert id="insertAccount" parameterClass="Account">
        <selectKey resultClass="long" keyProperty="sctId">
            SELECT SEQ_TEST.NEXTVAL FROM DUAL
        </selectKey>   
        insert into .... ........
    </insert>
  
    插入语句之后配置Q蛀牙是针对自增主键的表而言Q这c表在插入时不需要主键,而是在插入过E自动获取一个自增的主键。比如MySQL
    <insert id="insertAccount" parameterClass="Account">
        <selectKey resultClass="long" keyProperty="sctId">
            SELECT LAST_INSERT_ID() 
       </selectKey>   
        insert into .... ........
    </insert>
 
   当然Q是否需要配|?lt;selectKey>Ҏ(gu)情况Q只要能保证记录有主键即可。一旦配|了<selectKey>Q就可以在执行插入操作时获取到新增记录的主键?nbsp;
 
6、SQL入参parameterClass
  插入语句入参QparameterClass="cd?  来设定?/div>
  查询语句入参Q可以设定类别名Q也可以讑֮为mapQ也可以讑֮为iBatis支持的原生类型(比如string、int、long{)Q当只有一个原生类型入参时Q则在SQL中用value关键字来引用。比如:
    <select id="getById"  parameterClass="long" resultMap="result_base">
        select * from customer where id = #value#
    </select>
    map是最强大的入参方式,M入参方式都可以{换ؓq种入参方式Q因为iBatis仅接受一个入参,当几个参数分布在不同对象中的时候,这些对象的属性(或者对象本wputQ到map中,然后一ơ传递给sql语句是非常有效。可以自己写一个将对象或者对象集合{换ؓmap的工P我已l实C个了Q?/div>
    另外Qmap的中的元素(比如pobjQ是个复杂对象,则还可以在SQL中以#pobj.protyename#的格式来引用其中内嵌的属性。当然不推荐q么qӀ?/div>
 
7、返回值参数类?/div>
      q回值参C同样有两U类型,一U是对象cdresultClass="Account"Q一U是resultMap="AccountResult"。这两种cd的选择常常会o惑不解,一a明其理:
当结果集列名和类属性名完全对应的时候,则应该用resultClass来指定查询结果类型。当然有些列明不对应Q可以在sql中用as重命名达C致的效果?/div>
 
当查询结果列名和cd性名对应不上的时候,应该选择resultMap指定查询l果集类型。否则,则查询出来填充的对象属性ؓI(数字的ؓ0Q对象的为nullQ?/div>
 
但是实际上resultMap是对一个Java Bean的映,需要先定义xml的映后Q才可以引用Q例如:
    <resultMap id="AccountResult" class="Account">
        <result property="id" column="ACC_ID"/>
        <result property="firstName" column="ACC_FIRST_NAME"/>
        <result property="lastName" column="ACC_LAST_NAME"/>
        <result property="emailAddress" column="ACC_EMAIL"/>
    </resultMap>
    resultMap映射的结果的目的是要将查询的结果集l定到映对象的属性上?/div>
 
   不管使用哪种q回值参数类型,其最l目的就是要把每条记录映到一个类的对象或者对象集合上Q如果有某个cd性映不上,则在得到的这个对象或对象集合中这个属性ؓI。映的属性可以是表与实体中的一部分。不要同时用两U返回值参数类型,q样只会令hqh?/div>
 
8、查询结果集分组
    查询l果集排序有两种方式Q一是在l果集映上定义<resultMap id="result" class="bar" groupBy="id">Q另一U就是在SQL语句中分l。徏议在SQL语句中分l,以获得更大的可控制性?/div>
 
9、SQL中参数的引用
     SQL中引用parameterClass的参数有三种方式Q?/div>
     iBatis内置支持的类型,比如int、stringQ?value#来引用,q个value是关键字Q不可变?/div>
     mapcd的参敎ͼ使用#keyName#来引用,keyName为键名?/div>
     复杂对象的参敎ͼ使用#propertyName#来引用,propertyNamecd性的名字?/div>
 
10、模p查询中参数的引?/div>
    模糊查询是针对字W串而言的,如果遇到两个单引可包含一个参敎ͼ则不能再?来引用变量了Q而应该改?Q比如:'%$varName$%'Q当Ӟ也可以?'%' || #varname# || '%' 来绕q此问题?/div>
 
11、SQL片段
       可以通过<sql id="sql_xxx">...</sql>定义SQL片段Q然?lt;include refid="sql_xxx"/>来在各种语句中引用。达到服用目的,
 
12、动态SQL
      可以通过使用动态SQL来组l灵zL更大的更通过的SQLQ这h大减了~码量,是iBatis应用的第二大亮点?/div>
     比如Q一个动态的where条g
                <dynamic prepend="where">
                        <isNotEmpty prepend="and" property="$$$$$">
                                $name like '%'|| #$name# ||'%'
                        </isNotEmpty>
                        <isGreaterThan prepend="and" property="$$$$$" compareValue="$$$number">
                                $code like '%'|| #$code# ||'%'
                        </isGreaterThan>
                </dynamic>
     当然Qprepend表示链接关键字,可以ZQ何字W串Q当为sql关键字时QiBatis自动判断是否应该d该关键字。该语法也很单,关键是要会用心思考组l动态SQL?/div>
    q里面有一点要注意Q区?lt;isNotEmpty>?lt;isNotNull>区别Q当为空IZ?lt;isNotEmpty>q回trueQ当为空串时<isNotNull>q回真。哈哈,自己体会吧,说了反而啰嗦?/div>
 
13、结果集映射l承
l果集映的l承的目的是Z映射定义的复用,比如下面定义了两个映,AccountResultl承了baseQ?br />    <resultMap id="base" class="Account">
        <result property="id" column="ACC_ID"/>
        <result property="firstName" column="ACC_FIRST_NAME"/>
        <result property="lastName" column="ACC_LAST_NAME"/>
    </resultMap>
    <resultMap id="AccountResult" class="Account" extends="Account.base">
        <result property="emailAddress" column="ACC_EMAIL"/>
    </resultMap>
q样Q就很容易扩展了一个映策略?br />       
14、查询注?/div>
查询注入是在一个查询中嵌入另外一个查询,q样做的目的是ؓ了实现实体对象之间的兌兌关系Q一对一、一对多、多对多Q分单项双向。有兌些内容,是比较复杂的Q笔者对此做了深入研IӞq分别写了三来讲述?/div>
 
查询注入的实现就是在实体属性ؓ另外一个实体或者实体集合的时候,引入一个相关的查询来实玎ͼ例如Q客户和订单的映关p:
public class Customer {
    private Long id;
    private String name;
    private String address;
    private String postcode;
    private String sex;
    private List<Orders> orderlist = new ArrayList<Orders>();
 
    <resultMap id="result" class="customer">
        <result property="id" column="id"/>
        <result property="name" column="name"/>
        <result property="address" column="address"/>
        <result property="postcode" column="postcode"/>
        <result property="sex" column="sex"/>
        <result property="orderlist" column="id" select="orders.findByCustomerId"/>
    </resultMap>
 
在这个映中Qؓ了查询客L时候,能查询到相关的订单,可以在映?strong>orderlist属性的时候,其指向另外一个查?strong>orders.findByCustomerIdQ这个查询是以Customer?strong>id为参数来查询的?/div>
 
select="orders.findByCustomerId"q个查询定义如下Q?/div>
    <select id="findByCustomerId" resultMap="result_base" parameterClass="long">
        select * from orders where customerId = #value#
    </select>
 
原理是q么单,然后Ҏ(gu)实际情况Q可以自由实现实体间的关联关pR?/div>
 
14、iBatis的分|?/div>
iBatis的分|两种方式Q一炚w不神U,不要被网上的言所qh?/div>
W一U方式:l果集筛选分c先执行部分늚SQL查询语句Q然后得C个ResultSetQ然后根据分范围选择有效的记录填充到对象中,最l以集合的Ş式返回。对?0w条一下的记录的表Q不存在性能问题Q如果存在,你可以选择W二中方式?/div>
W二U方式:SQL分页Q通过l装分页cd的SQL来实现分c这个关键在于分参数的传递和分页SQL的构建。分SQL构g每种数据库都不一P不说了。分参数的传递却可以通用。我d用map分装入参Q连同分参C块传递进来,搞定了。如果原来没有考虑到分,而用的是对象做参敎ͼ则可以通过apache ?beanutilslg来实C个object到map之间的{换工P问题q刃而解?/div>
 
当然Q这q不是分|询应用的最高境界。思考,分页需要计一个总记录数Q记录数执行的sqlq回值是count(?)Q条件是除了分页以外的条Ӟ因此应该查询SQL静态分开Q以MySQLZQ可以将查询分ؓ查什么,和什么条件两部分Q在条g部分对分参数进行动态判断,如果分页参数׃分页Q如果有则分c这h后只需要两个组装的sql可以计L和分|询了。大大简化了问题的难度?Oracle的解x\也一P不一L地方是D分页SQL改变了?/div>
 
15、执行存储过E的配置
SQL Map 通过<procedure>元素支持存储q程。下面的例子说明如何使用h输出参数
的存储过E?nbsp;
    <parameterMap id="swapParameters" class="map">
        <parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
        <parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
    </parameterMap>
    <procedure id="swapEmailAddresses" parameterMap="swapParameters">
        {call swap_email_address (?, ?)}
    </procedure> 
调用上面的存储过E将同时互换两个字段Q数据库表)和参数对象(MapQ中的两?email地址。如果参数的 mode 属性设?INOUT ?OUTQ则参数对象的D修改。否则保持不变?nbsp;
注意Q要保始终只?JDBC 标准的存储过E语法。参?JDBC ?CallableStatement
文档以获得更详细的信息?/div>
 
16、就是iBatis中各Uid的命名了Q这个看h菜一,但是搞砸了会很痛苦。徏议如果有DAO层的话,DAO接口的名字和SQL语句id的名字保持一致。同Ӟ在DAO中将save和update装Z个方法(从Hibernate中学来的Q,q是非常好的。也可以直接在SQL层将插入和更新柔和在一块,太复杂,有点影响效率Q这见机行事了?/div>
 
   另外Spring提供了各U数据操作模板,通过模板Q擦做数据也是“一句话”的问题,写个DAOq有必要么,其对iBatis来说Q根本没有必要。这P需要在领域zd层的设计上下功夫了?/div>
 
17 、iBatis的查询也可以配置~存{略Q缓存的配置很复杂,分很多中情况Q可以参看附件中?span style="line-height: 21px; font-size: 12px; ">iBATIS-SqlMaps-2_cn.pdf?9内容,有详l介l?/span>
 
18、偷懒的最高境界,让程序去q哪?0%的体力活。自׃仅把把关。Q何重复的zd都有规律可@的,一旦发C其中的规律,你就可以惛_法把自己从中解脱出来?/div>
    iBatis也不例外Q每个表都有增删Ҏ(gu)、分늭操作。对应在每个DAOҎ(gu)上亦如此。可以通过数据库生成sqlmap、entity、daoQ然后将q些东西改吧改吧完成大部分的工作量。本人已l实现过了,当然开发这个工L前提是你对iBatis有深入研I和理解?/div>
 
-------------------------------------------------
下面是iBatis开发指南中内容Q?/div>
 
附录Q容易出错的地方 
本附录是译者添加的Q列Z初学者容易出错的地方Q作为完成快速入门课E后的学?br />W记Q可以让初学者少C弯\。仅供参考?nbsp;
1)  ?parameterMap ?resultMap 中,字段数据cd?java.sql.Types cd义的帔R?br />U。常用的数据cd包括 BLOBQCHARQCLOBQDATEQLONGVARBINARYQ?nbsp;
INTEGERQNULLQNUMERICQTIMEQTIMESTAMP ?VARCHAR {?nbsp;
2)  对于数据表中 NULLABLE 的字D,必须?parameterMap ?resultMap 中指定字D?br />的数据类型?nbsp;
3)  对于数据cd?DATEQCLOB ?BLOB 的字D,最好在 parameterMap ?resultMap中指定数据类型?nbsp;
4)  对于二进制类型的数据Q可以将 LONGVARBINARY 映射?byte[]?nbsp;
5)  对于文本cd较大的数据,可以?CLOB 映射?String?nbsp;
6) Java Bean 必须拥有~省的构造器Q即无参数的构造器Q?nbsp;
7) Java Bean 最好实?Serializable 接口Q以备应用的q一步扩展?/div>
 
本h认ؓQ尽量避免在每个入参后面附加参数的类型。以保持配置z,q且本h在长期开发中Q没有发现必要那么做?/div>


]]>struts2传?/title><link>http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386388.html</link><dc:creator>奋斗成就男h</dc:creator><author>奋斗成就男h</author><pubDate>Mon, 27 Aug 2012 15:30:00 GMT</pubDate><guid>http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386388.html</guid><wfw:comment>http://m.tkk7.com/yxhxj2006/comments/386388.html</wfw:comment><comments>http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386388.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.tkk7.com/yxhxj2006/comments/commentRss/386388.html</wfw:commentRss><trackback:ping>http://m.tkk7.com/yxhxj2006/services/trackbacks/386388.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt; ">    Struts2传值比struts1.X要方便多了。主要包括:面--->Action   Action--->面两个斚w</span><br /><span style="font-size: 10pt; ">   Q?Q:面?-->Action Q其中页面写法如下:</span><br />      <span style="background-color: #eeeeee; font-size: 13px; "><</span><span style="background-color: #eeeeee; font-size: 13px; ">s:form 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; "> 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; ">></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">        <s:textfield label="UserName:" name="username"></s:textfield>                   //在action中直接写username属性和get和setҎ(gu)<br />        <s:textfield label="Age:" name="person.age"></s:textfield>                         //在action中写对象Person person和get和setҎ(gu)。注意:此处l对不能写类名:PersonQ而应该是对象person <br />        <s:textfield label="Address:" name="person.address"></s:textfield>              // 和person.agecM<br />        <s:submit value="Login"></s:submit><br />    </s:form></div><br /><span style="font-size: 10pt; ">  Q?Q:actioncd法:可以l承或者不l承ActionSupportcR注意是属性和get和setҎ(gu)</span><br />     <span style="font-size: 10pt; color: #0000ff; ">public</span><span style="background-color: #eeeeee; font-size: 13px; "> </span><span style="font-size: 10pt; color: #0000ff; ">class</span><span style="background-color: #eeeeee; font-size: 10pt; "> RegAction </span><span style="font-size: 10pt; color: #0000ff; ">extends</span><span style="background-color: #eeeeee; font-size: 10pt; "> 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; ">    <br />    <span style="color: #0000FF; ">private</span> Person person;<br />    <span style="color: #0000FF; ">private</span> String username;<br />    <span style="color: #0000FF; ">private</span> List<Person> personList;<br />    <span style="color: #0000FF; ">public</span> List<Person> getPersonList() {<br />        <span style="color: #0000FF; ">return</span> personList;<br />    }<br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> setPersonList(List<Person> personList) {<br />        <span style="color: #0000FF; ">this</span>.personList = personList;<br />    }<br />    <span style="color: #0000FF; ">public</span> String getUsername() {<br />        <span style="color: #0000FF; ">return</span> username;<br />    }<br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> setUsername(String username) {<br />        <span style="color: #0000FF; ">this</span>.username = username;<br />    }<br />    <span style="color: #0000FF; ">public</span> Person getPerson() {<br />        <span style="color: #0000FF; ">return</span> person;<br />    }<br />    <span style="color: #0000FF; ">public</span> <span style="color: #0000FF; ">void</span> setPerson(Person person) {<br />        <span style="color: #0000FF; ">this</span>.person = person;<br />    }<br /> <span style="font-size: 10pt; ">  /**其中q可以加单一属性,对象Q集?包括list和map)**/</span><br /><span style="font-size: 10pt; ">    @Override</span><br />    <span style="color: #0000FF; ">public</span> String execute() <span style="color: #0000FF; ">throws</span> Exception {<br />        List<Person> personList1 = <span style="color: #0000FF; ">new</span> ArrayList<Person>();<br />        Person person = <span style="color: #0000FF; ">new</span> Person();<br />        person.setAddress("hunan");<br />        person.setAge(25);<br />        Person person1 = <span style="color: #0000FF; ">new</span> Person();<br />        person1.setAddress("beijing");<br />        person1.setAge(35);<br />        personList1.add(person);<br />        personList1.add(person1);<br />        <span style="color: #0000FF; ">this</span>.setPersonList(personList1);<br />        <span style="color: #0000FF; ">return</span> SUCCESS;<br />    }<br />}</div><br /><span style="font-size: 10pt; ">Q?Q:action---->面</span><br /><span style="font-size: 10pt; ">          (1):单一属性:<s:property value="username"/>      //属性名</span><br /><span style="font-size: 10pt; ">          (2):对象Q?lt;s:property value="person.address"/>   // 对象?属性名</span><br /><span style="font-size: 10pt; ">          (3):list对象QList对象和Map对象</span><span style="background-color: #eeeeee; font-size: 13px; ">        <br /></span><span style="background-color: #eeeeee; font-size: 13px; ">             <</span><span style="background-color: #eeeeee; font-size: 13px; ">s:iterator 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; "> 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; ">>         </span><span style="background-color: #eeeeee; font-size: 10pt; ">  // value是集合对象名Qid是别名,可以随便?/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">                <s:property value="#Person.age"/>               <span style="font-size: 10pt; "> // #+别名+属性名 其中#W号不可以缺?/span><br />                <s:property value="#Person.address"/>        <span style="font-size: 10pt; ">   // 同上</span><br />            </s:iterator></div>        Q?Q?span style="background-color: #eeeeee; font-size: 13px; "><</span><span style="background-color: #eeeeee; font-size: 13px; ">s:iterator 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; "> 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; "> 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; ">></span><span style="background-color: #eeeeee; font-size: 13px; ">    </span><span style="background-color: #eeeeee; font-size: 10pt; ">  // value是集合对象名Qid是别名,也可省,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">                 key : <s:property value='key'/>                   <span style="font-size: 10pt; ">// map的key|其中Qvalues只能为key或者valueQ不能ؓ其他?/span><br />                 value:<s:property vlaue='value'/>               <span style="font-size: 10pt; "> //同上</span><br />             </s:iterator> </div><span style="font-size: 10pt; color: red; ">ȝQ在传值的时候,也可以采用servlet或者struts1.X的方式用</span><span style="font-size: 10pt; color: red; ">requestQsession </span><span style="font-size: 10pt; color: red; ">q行传倹{比如:request/session.setAttribute(name,values){方式?/span><br /><span style="font-size: 10pt; color: red; ">然后在页面中Q在使用request/session.getAttribute(name);但是不徏议这么去做,q是用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://m.tkk7.com/yxhxj2006/aggbug/386388.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.tkk7.com/yxhxj2006/" target="_blank">奋斗成就男h</a> 2012-08-27 23:30 <a href="http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386388.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>struts2基础http://m.tkk7.com/yxhxj2006/archive/2012/08/27/386387.html奋斗成就男h奋斗成就男hMon, 27 Aug 2012 15:08:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/08/27/386387.htmlhttp://m.tkk7.com/yxhxj2006/comments/386387.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/08/27/386387.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/386387.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/386387.html    struts2不是从strus1.Xl承Q而是从xworkl承而来。在使用struts中,量用到struts的内宏V?/span>
    Q?/span>1Q:导入strusts2的基?/span>jar包:struts2-core-2.2.3.1.jar  xwork-core-2.2.3.1.jar

 ognl-3.0.1.jar  freemarker-2.3.16.jar   commons-logging-1.1.1.jar  commons-lang-2.5.jar  commons-io-2.0.1.jar  commons-fileupload-1.2.2.jar  commons-beanutils-1.7.0.jar javassist-3.11.0.GA.jar

Q?/span>2Q:~写jsp面。注意:form表单gؓQ?/span>form=/工程?/span>/包的命名I间(namespace)/包名U?/span>(package)/处理名(actionQ?#8221;

Q?/span>3Q:~写web.xml配置文gQ?/span>

 

 <?xml version="1.0" encoding="UTF-8"?>

<web-app version="2.5"

    xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

   

 <filter>

    <filter-name>struts2</filter-name>

<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

 </filter>

 <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

 </filter-mapping>

 <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

 </welcome-file-list>

</web-app>

 

Q?/span>4Q编写处理类。该处理cM般承于ActionSupportQ只需重新excute()Ҏ(gu)卛_。注意:此处理类也可以是一般的c:Q不l承ActionSupportQ?/span>. 其中的方法名也可以是L的。但是该处理Ҏ(gu)必须要有q回?/span>StringQƈ且这个返回gstruts中的resutl?/span>name值必M致。比如:

public class Test {

    public String testaa(){

       System.out.println("Testaa-------Testaa-------Testaa");

       return "abc";

    }

}

Q?/span>5Q:配置struts.xml文g(struts.xml文g必须要放?/span>src目录下,而不是与actioncd在同一个目?/span>)。其?/span>

Q?/span>iQ?/span>:package里面的命名空_namespace可以?/span>package名称不一致?/span>

(ii):action?/span>MethodҎ(gu)默认?/span>excuteQ也可以是其他的Ҏ(gu)?/span>

(iii):result中的nameg一定是success或?/span>fail。可以是L|只需要这个g处理cM的处理方法返回g致就可以了?/span>

Q?/span>ivQ:struts.xml可以有多?/span>package?/span>

Q?/span>xvQ:<constant name="struts.action.extension" value="action,do" />

表示提交地址必须要以.action或?/span>.dol尾格式才能有效?/span>

 

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE struts PUBLIC

        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

        "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

    <package name="j2eetest" extends="struts-default" namespace="/j2eetestaa">

       <action name="test" class="com.wsw.struts.action.Test" method="testaa">

       <result name="abc">/main/success.jsp</result>

       <result name="fail">/main/fail.jsp</result>

       </action>

    </package>

</struts>
































]]>
Hibernate映射解析——七U映关p?http://m.tkk7.com/yxhxj2006/archive/2012/08/15/385517.html奋斗成就男h奋斗成就男hWed, 15 Aug 2012 04:31:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/08/15/385517.htmlhttp://m.tkk7.com/yxhxj2006/comments/385517.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/08/15/385517.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/385517.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/385517.html首先我们了解一个名词ORMQ全U是Q?/span>Object Relational MappingQ,卛_象关pL。ORM的实现思想是关pL据库中表的数据映成对象Q以对象的Ş式展玎ͼq样开发h员就可以把对数据库的操作转化为对q些对象的操作。Hibernate正是实现了这U思想Q达C方便开发h员以面向对象的思想来实现对数据库的操作?/span>

Hibernate在实现ORM功能的时候主要用到的文g有:映射c(*.javaQ、映文Ӟ*.hbm.xmlQ和数据库配|文Ӟ*.properties/*.cfg.xmlQ,它们各自的作用如下?/p>

映射c?/span>Q?/span>*.javaQ?/span>Q它是描q数据库表的l构Q表中的字段在类中被描述成属性,来可以实现把表中的记录映成cȝ对象了?/p>

映射文gQ?/span>*.hbm.xmlQ?/span>Q它是指定数据库表和映射cM间的关系Q包括映类和数据库表的对应关系、表字段和类属性类型的对应关系以及表字D和cd性名U的对应关系{?/p>

数据库配|文Ӟ*.properties/*.cfg.xmlQ?/span>Q它是指定与数据库连接时需要的q接信息Q比如连接哪U数据库、登录数据库的用户名、登录密码以及连接字W串{。当然还可以把映类的地址映射信息攑֜q里?/p>

接下来让我们׃赯q?/span>Hibernate的七U映关p:

1、单向一对一兌映射Qone-to-oneQ:

两个对象之间一对的关系Q例如:PersonQhQ?IdCardQn份证Q?/p>

有两U策略可以实C对一的关联映:

*主键兌Q即让两个对象具有相同的主键|以表明它们之间的一一对应的关p;数据库表不会有额外的字段来维护它们之间的关系Q仅通过表的主键来关联。如下图Q?/p>

 

例子Q?strong>单向一对一主键兌例子q接

*唯一外键兌Q外键关联,本来是用于多对一的配|,但是加上唯一的限制之后(采用<many-to-one>标签来映,指定多的一?/span>unique?/span>trueQ这样就限制了多的一端的多重性ؓ一Q,也可以用来表CZ对一兌关系Q其实它?yu)是多对一的特D情c如下图Q?/p>

 

例子Q?strong>单向一对一唯一外键兌例子q接

注意Q因Z对一的主键关联映扩展性不好,当我们的需要发生改变想要将其变Z对多的时候变无法操作了,所以我们遇C对一兌的时候经怼采用唯一外键兌来解决问题,而很用一对一主键兌?/span>

2、单向多对一兌映射Qmany-to-oneQ:

多对一兌映射原理Q在多的一端加入一个外键,指向一的一端,如下图:

 

关键映射代码——在多的一端加入如下标{映:

 

Java代码 
  1. <many-to-one name="group" column="groupid"/>  

 

3?strong>单向一对多兌映射Qone-to-manyQ?/strong>Q?/p>

一对多兌映射和多对一兌映射原理是一致的Q都是在多的一端加入一个外键,指向一的一端。如下图Q学生和班Q:

 

注意Q它与多对一的区别是l护的关pM?/span>

*多对一l护的关pLQ多指向一的关p,有了此关p,加蝲多的时候可以将一加蝲上来

*一对多l护的关pLQ一指向多的关系Q有了此关系Q在加蝲一的时候可以将多加载上?/p>

关键映射代码——在一的一端加入如下标{映:

 

Java代码 
  1. <set name="students">  
  2.       <key column="classesid"/>  
  3.       <one-to-many class="com.hibernate.Student"/>  
  4. </set>  

 

~陷Q因为多的一?/span>Student不知?/span>Classes的存在(也就?/span>Student没有l护?/span>Classes的关p)所以在保存Student的时候关pdD?/span>classesid是ؓnull的,如果该关系字段讄为非I,则将无法保存数据Q常用解军_法是改用双向兌映射Q参?/span>6?/span>

4?strong>单向多对多映(many-to-manyQ?/strong>Q?/p>

多对多关联映?span style="color: red">新增加一张表才完成基本映,如下图:

 

关键映射代码——可以在User的一端加入如下标{映:

 

Java代码 
  1. <set name="roles" table="t_user_role">  
  2.      <key column="user_id"/>  
  3.      <many-to-many class="com.hibernate.Role" column="role_id"/>  
  4. </set>  

 

5?strong>双向一对一兌映射Q?/p>

Ҏ(gu)单向一对一映射Q需要在IdCard加入<one-to-one>标签Q它不媄响,只媄响加载。如下图Q?/p>

双向一对一主键映射关键映射代码——?/span>IdCard端新加入如下标签映射Q?/p>

 

Java代码 
  1. <one-to-one name="person"/>  

 

双向一对一唯一外键映射关键映射代码——?/span>IdCard端新加入如下标签映射Q?/p>

 

Java代码 
  1. <one-to-one name="person"property-ref="idCard"/>  

 

注意Q一对一唯一外键兌双向采用<one-to-one>标签映射Q必L?/span><one-to-one>标签中的property-ref属性ؓ关系字段的名U?/span>

6?strong>双向一对多兌映射Q?span style="color: red">非常重要Q?/strong>Q?/p>

采用一对多双向兌映射的目的主要是Z主要是ؓ了解决一对多单向兌的缺陯不是需求驱动的?/p>

一对多双向兌的映方式:

* 在一的一端的集合上采?lt;key>标签Q在多的一端加入一个外?/p>

* 在多的一端采?lt;many-to-one>标签

注意Q?/span><key>标签?/span><many-to-one>标签加入的字D保持一_否则会生数据؜?/span>

关键映射代码Q?/span>

在Classes的一端加入如下标{映:

 

Java代码 
  1. <set name="students"inverse="true">  
  2.        <key column="classesid"/>  
  3.       <one-to-many class="com.hibernate.Student"/>  
  4. </set>  

 

在Student的一端加入如下标{映:

 

Java代码 
  1. <many-to-one name="classes" column="classesid"/>  

 

注释Q?/span>inverse属?/span>

* inverse属性可以用在一对多和多对多双向兌上,inverse属性默认ؓfalseQؓfalse表示本端可以l护关系Q如果inverse为trueQ则本端不能l护关系Q会交给另一端维护关p,本端失效。所以一对多兌映射我们通常在多的一端维护关p,让一的一端失效?/p>

* inverse是控制方向上的反转,只媄响存?/p>

7?strong>双向多对多关联映?/strong>Q?/p>

双向的目的就是ؓ了两端都能将Ҏ(gu)加蝲上来Q和单向多对多的区别是双向需要在两端都加入标{映,需要注意的是:

* 生成的中间表名称必须一?/p>

* 生成的中间表中的字段必须一?/p>

RoleQ角Ԍ端关键映代码:

 

Java代码 
  1. <set name="users" table="t_user_role">  
  2.        <key column="role_id"/>  
  3.        <many-to-many class="com.hibernate.User" column="user_id"/>  
  4. lt;/set>  

 

UserQ用P端关键映代码:

 

Java代码 
  1. <set name="roles" table="t_user_role">  
  2.       <key column="user_id"/>  
  3.       <many-to-many class="com. hibernate.Role" column="role_id"/>  
  4. lt;/set>  

 

ȝQ对于上面这七种兌映射中,最重要的就是一对多的映,因ؓ它更贴近我们的现实生z,比如Q教室和学生可以是典型的一对多的关p,而我们开发Y件的目的之一是Z解决一些生zM重复性问题,把那些重复的问题交给计算机帮助我们完成,从而来提高我们的工作效率。一句话Q?span style="color: red">生活d不开~程Q编E更M开生活?/p>

]]>L上手SpringMVC http://m.tkk7.com/yxhxj2006/archive/2012/08/15/385516.html奋斗成就男h奋斗成就男hWed, 15 Aug 2012 04:30:00 GMThttp://m.tkk7.com/yxhxj2006/archive/2012/08/15/385516.htmlhttp://m.tkk7.com/yxhxj2006/comments/385516.htmlhttp://m.tkk7.com/yxhxj2006/archive/2012/08/15/385516.html#Feedback0http://m.tkk7.com/yxhxj2006/comments/commentRss/385516.htmlhttp://m.tkk7.com/yxhxj2006/services/trackbacks/385516.html阅读全文

]]>
վ֩ģ壺 һػƬ| 114һëƬ| ŷ͵Ʒ | Թ| ѾƷպȾþ| þþƷAVӰ| òֻƵ| Ʒþþþþþþ͵Ů| Ƶ| ޹Ʒ߹ۿ97| Ļ߾Ʒ| ޹ۺרӰ| ձxxxxɫƵ߹ۿ| ĻƵ߹ۿ| һëƬۿ| 91Ƶѿ| Ʒ޾ƷþþƷ | ޹Ʒ߲| ŮƵaŮȫƤ| þ޹Ʒ| Ӱ߹ۿ| һӰԺ| ߲˳Ƶ߹ۿ| av߹ۿ| avֻ߹ۿ| ɫˬƵ| ޳ɫ999þվ| ѵɫƵ| aŹavۺav| ޹һ߹ۿ| ѾƷAVƬ߹ۿ| www77777| LƷþ| ˳߹ۿվƷ | ޾Ʒ߲| ޹v߹ۿ| þþþƷƵ| һ߹ۿվ | AV鶹 | վɫȫ| վɫƬѸ|