項(xiàng)目day實(shí)戰(zhàn)課程v7第5天_第1頁(yè)
項(xiàng)目day實(shí)戰(zhàn)課程v7第5天_第2頁(yè)
項(xiàng)目day實(shí)戰(zhàn)課程v7第5天_第3頁(yè)
項(xiàng)目day實(shí)戰(zhàn)課程v7第5天_第4頁(yè)
項(xiàng)目day實(shí)戰(zhàn)課程v7第5天_第5頁(yè)
已閱讀5頁(yè),還剩49頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、1.2項(xiàng)目前期項(xiàng)目前期;一般是由客戶經(jīng)理從客戶那邊了解到有關(guān)該項(xiàng)目的招標(biāo)信息,然后開(kāi)發(fā)公司再組織競(jìng)標(biāo);編寫(xiě)標(biāo)書(shū)和詳細(xì)的項(xiàng)目建設(shè)方案。這個(gè)階段一般由門(mén)和開(kāi)發(fā)部門(mén)的管理層參與。建設(shè)方案由部門(mén)經(jīng)理或者項(xiàng)目經(jīng)理協(xié)助完成。項(xiàng)目建設(shè)方案中一般包括初步的系統(tǒng)功能、模塊設(shè)計(jì)、軟硬件設(shè)備、開(kāi)發(fā)組介紹等。提供這些信息給客戶后他們?cè)僭u(píng)估相應(yīng)開(kāi)發(fā)公司是否有承建系統(tǒng)能力。1.3需求分析當(dāng)項(xiàng)目中標(biāo)后,公司的客戶經(jīng)理、項(xiàng)目經(jīng)理再到客戶環(huán)境進(jìn)行詳細(xì)的需求調(diào)研,完成調(diào)研后將初步的調(diào)研結(jié)果轉(zhuǎn)化成正式的需求文檔。需求文檔是所有后續(xù)流程的基礎(chǔ)和非常重要的文檔,開(kāi)發(fā)和測(cè)試要按照需求來(lái)開(kāi)發(fā)測(cè)試。詳細(xì)需求見(jiàn)協(xié)同平臺(tái)-納稅服務(wù)需求規(guī)格說(shuō)明書(shū)

2、.docx1.4設(shè)計(jì)在這個(gè)階段主要是需求進(jìn)行詳細(xì)的開(kāi)發(fā)前的分析和對(duì)具體模塊的設(shè)計(jì)。在設(shè)計(jì)過(guò)程中可能包括到的原型設(shè)計(jì)的完善、界面美工設(shè)計(jì)切圖、數(shù)據(jù)庫(kù)設(shè)計(jì)(概念、物理模型)等;最終需要出詳細(xì)設(shè)計(jì)說(shuō)明書(shū)。見(jiàn)協(xié)同平臺(tái)-納稅服務(wù)詳細(xì)設(shè)計(jì)說(shuō)明書(shū).docx1.5制定開(kāi)發(fā)計(jì)劃在需求和詳細(xì)設(shè)計(jì)都已經(jīng)確定的情況下;項(xiàng)目需要根據(jù)開(kāi)發(fā)的時(shí)間和任務(wù)數(shù)來(lái)制定開(kāi)發(fā)計(jì)劃;計(jì)劃中需要描述所有的開(kāi)發(fā)階段,從需求階段到部署上線期間所有要做的任務(wù),每個(gè)任務(wù)對(duì)應(yīng)具體的開(kāi)始時(shí)間、結(jié)束時(shí)間,前置任務(wù),工作時(shí)長(zhǎng),名稱。后續(xù)的開(kāi)發(fā)都根據(jù)該計(jì)劃進(jìn)行在每周開(kāi)周例會(huì)上確認(rèn)開(kāi)發(fā)進(jìn)度是否和計(jì)劃保持一致,如果不一致則需要好相應(yīng)方案;保證能如期提交系統(tǒng)給到

3、客戶。1.6開(kāi)發(fā)根據(jù)開(kāi)發(fā)計(jì)劃,項(xiàng)目經(jīng)理將組織開(kāi)發(fā)團(tuán)隊(duì)完成具體的開(kāi)發(fā)任務(wù),每周向公司部門(mén)、客戶主管匯報(bào)項(xiàng)目進(jìn)度。對(duì)應(yīng)具體的開(kāi)發(fā)則熟悉、理解需求,明白設(shè)計(jì)文檔;按照計(jì)劃中時(shí)間點(diǎn)開(kāi)發(fā)功能,提交代碼。2框架整合2.1新建數(shù)據(jù)庫(kù)及 web 項(xiàng)目2.1.1創(chuàng)建 itcastTax 數(shù)據(jù)庫(kù)- 創(chuàng)建數(shù)據(jù)庫(kù)CREATE DATABASE itcastTax DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;2.1.2新建 web 項(xiàng)目新建工作空間指定項(xiàng)目編碼(或工作空間編碼)為 utf-8,再建 web project,配置 buildpath引入應(yīng)用服務(wù)器

4、tomcat 的包:選擇對(duì)應(yīng)配置的 tomcat 版本即可。如若對(duì)應(yīng)的MyEclipse 版本沒(méi)有上述的“MyEclipse Server Library”;可以選擇“My Eclipse Library”然后選擇 ee 的包。需要連接 mysql 數(shù)據(jù)庫(kù),再添加 mysql 驅(qū)動(dòng)包。2.2框架整合2.2.1添加 struts2 的 jar 包和配置文件1、添加 struts2 jar 包到web-inf/lib 目錄下;2、添加 struts.xml 到 src 目錄下。可在“struts-2.xappsstruts2-blankWEB-INFclasses”下復(fù)制。在 struts.xml

5、 中添加幾個(gè)常用屬性:3、配置 web.xml:添加 struts2 過(guò)濾器:<filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><!- 禁用動(dòng)態(tài)方法-><constant name="struts.enable.DynamicMethodInvocat

6、ion" value="false" /><!- 配置成開(kāi)發(fā)模式 -><constant name="struts.devMode" value="true" /><!- 配置拓展名為 action -><constant name="struts.action.extention" value="action" /><!- 把主題配置成 simple -><constant name="struts.u

7、i.theme" value="simple" />2.2.2添加 hibernate 的 jar 包和配置文件添加 hibernate jar 包到 web-inf/lib 目錄下;至于 hibernate.cfg.xml 文件,因項(xiàng)目使用 spring 來(lái)整合管理實(shí)體和數(shù)據(jù)庫(kù)的連接等 hibernate原本的配置,所以這個(gè)配置文件不再需要。2.2.3添加 spring 的 jar 包和配置文件添加 spring jar 包到 web-inf/lib 目錄下添加 spring 配置文件 applicationContext.xml 到 src 目錄下;在

8、web.xml 中spring器,啟動(dòng) spring 容器:2.3整合測(cè)試項(xiàng)目2.3.1整合 struts 和 spring預(yù)期:如果可以在 action 中能夠正確調(diào)用 service 里面的方法執(zhí)行并返回到一個(gè)頁(yè)面中;那么我們認(rèn)定 struts 和 spring 的整合是的。編寫(xiě) JUnit 測(cè)試類,測(cè)試 spring 加載是否正確:<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

9、;<context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><filter-mapping><filter-name>struts2</filter-name><url-pattern>*.action</url-pattern></filter-

10、mapping>編寫(xiě)TestService 接口和實(shí)現(xiàn)類TestServiceImpl在 applicationContext.xml 中添加 bean 掃描配置信息;這邊使用導(dǎo)入配置文件的方式配置。首先在 cn.itcast.test.conf 中建立 test-spring.xml(可以applicationContext.xml 內(nèi)容)里面的配置就是普通的 bean 掃描,只是將掃描范圍縮小了。<!- service -><context:component-scan base-package="cn.itcast.test.service.impl&q

11、uot; />將 test-spring.xml 導(dǎo)入到 applicationContext.xml 中如下:編寫(xiě) TestAction 類在 test 的 conf 文件夾下新建 test-struts.xml 中配置 TestAction:將 test-struts.xml 導(dǎo)入到 struts.xml 文件中。在 webRoot 目錄下新建 test/test.jsp在瀏覽器中輸入: 的打印信息。查看是否能輸入 service 中2.3.2整合 hibernate 和 spring在 applicationContext.xml 中配置如下原本在 hibernate.cfg.xm

12、l 中需要配置的信息,在 spring中配置后 hibernate.cfg.xml 可刪除。1、 配置 c3p0 數(shù)據(jù)庫(kù)連接源:<!- 導(dǎo)入外部的 properties 配置文件 -><context:property-placeholder location="classpath:perties" /><!- 配置 c3p0 數(shù)據(jù)源 -><include file="cn/itcast/test/conf/test-struts.xml"/><struts><package

13、name="test" namespace="/" extends="struts-default"><action name="test_*" class="cn.itcast.test.action.TestAction" method="1"><result name="success">/WEB-INF/jsp/test/test.jsp</result></action></packag

14、e></struts><import resource="classpath:cn/itcast/*/conf/*-spring.xml" />2、 perties3、 配置 sessionFactory,并將 dataSource 指向 c3p0 創(chuàng)建的 dataSource:<bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><propert

15、y name="dataSource" ref="dataSource"></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop><prop key="hibernate.show_sql">true</prop>

16、;<prop key="hibernate.hbm2ddl.auto">update</prop><prop key="javax.persistence.validation.mode">none</prop></props></property><property name="mappingLocations"><list><value>classpath:cn/itcast/*/entity/*.hbm.xml</v

17、alue><value>classpath:cn/itcast/test/entity/*.hbm.xml</value>jdbcUrl=jdbc:mysql:/localhost:3306/itcastTax?useUnicode=true&characterEncoding=utf8 driverClass=com.mysql.jdbc.Driveruser=root password=rootinitialPoolSize=10 maxPoolSize=30<beanid="dataSource"class="co

18、m.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close"><property name="jdbcUrl" value="$jdbcUrl"></property><property name="driverClass" value="$driverClass"></property><property name="user" value

19、="$user"></property><property name="password" value="$password"></property><!-初始化時(shí)獲取三個(gè)連接,取值應(yīng)在 minPoolSize 與maxPoolSize 之間。Default: 3 -><property name="initialPoolSize" value="$initialPoolSize"></property><!-連

20、接池中保留的最小連接數(shù)。Default: 3 -><property name="minPoolSize" value="3"></property><!-連接池中保留的最大連接數(shù)。Default: 15 -><property name="maxPoolSize" value="$maxPoolSize"></property><!-當(dāng)連接池中的連接耗盡的時(shí)候 c3p0 一次同時(shí)獲取的連接數(shù)。Default: 3 -><prope

21、rty name="acquireIncrement" value="3"></property><!-最大空閑時(shí)間,1800 秒內(nèi)未使用則連接被丟棄,若為 0 則永不丟棄。Default: 0-><property name="maxIdleTime" value="1800"></property></bean>編寫(xiě)實(shí)體類和對(duì)應(yīng)的文件.hbm.xml:文件的頭部信息:<?xml version="1.0" encodin

22、g="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-/Hibernate/Hibernate Mapping DTD 3.0/EN""">編寫(xiě)完實(shí)體文件后,用 JUnit 測(cè)試 hibernate 和 spring 的整合,在測(cè)試用例中啟動(dòng) spring容器的時(shí)候?qū)呙桀惛鶕?jù)其創(chuàng)建數(shù)據(jù)庫(kù)表,并在測(cè)試向表一條數(shù)據(jù)。測(cè)試 hibernate,添加一個(gè)</list></property></bean>2.3.3配置 spring 事務(wù)管理【注意

23、:上面的 pointcutexpression 表示execution(* cn.itcast.service.impl.*.*(.)】以 Service 結(jié)尾的 bean,或者可寫(xiě)成完善 TestService 接口和 TestServiceImpl;利用 service 中的操作來(lái)驗(yàn)證上面配置的事務(wù)管理是否生效。添加 dao 層代碼并配置 dao 信息到 test-spring.xml 文件中;準(zhǔn)備事務(wù)測(cè)試<!事務(wù)管理-><bean id="txManager"class="org.springframework.orm.hibernate4

24、.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!事務(wù)通知-><tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><tx:method name="find*" read-only=&qu

25、ot;true" /><tx:method name="get*" read-only="true" /><tx:method name="load*" read-only="true" /><tx:method name="list*" read-only="true" /><tx:method name="search*" read-only="true" /><

26、tx:method name="*" rollback-for="Throwable" /></tx:attributes></tx:advice><!配置需要進(jìn)行事務(wù)的類 -><aop:config><aop:pointcut id="serviceOperation" expression="bean(*Service)" /><aop:advisor advice-ref="txAdvice" pointcut-ref

27、="serviceOperation" /></aop:config>測(cè)試方法Dao 中Service 中2.4文件分類1、 將配置文件歸類到新建 config 文件夾;2、 源代碼目錄按照功能模塊進(jìn)行劃分:cn.itcast.子系統(tǒng).功能模塊.*3、 Jsp 放置到 WEB-INF 目錄下;4、 其它:2.5日志工具配置在臺(tái)會(huì)報(bào)出日志 log4j 沒(méi)有配置好配置文件的信息。引入 slf4j 的 jar 包和 log4j 的 jar 包及其配置文件,配置 perties 文件。測(cè)試:2.6編寫(xiě)基類 BaseDaoDAO 基類中配備增刪改查

28、的操作。獲取泛型類型:/ 使用反射得到 T 的真實(shí)類型ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass(); /獲取當(dāng)前 new 的對(duì)象的 泛型的父類 類型this.clazz = (Class<T>) pt.getActualTypeArguments()0; / 獲取第一個(gè)類型參數(shù)的真實(shí)類型3用戶管理3.1實(shí)現(xiàn) CRUD 的步驟及用戶實(shí)體文件1、 用戶實(shí)體類及文件:Usre.java 和 User.hbm.xml2、 實(shí)現(xiàn) UserDao、UserDaoImpl,直接繼

29、承 BaseDao、BaseDaoImpl;3、 編寫(xiě) UserService、UserService 類,里面包括 baseDao 中的基本方法;4、 UserAction 中要實(shí)現(xiàn)增刪改查,需要 6 個(gè)方法;我們約定需要跳轉(zhuǎn)到頁(yè)面的方法以 UI 結(jié)尾,如果 addUI 則說(shuō)明這是跳轉(zhuǎn)到添加頁(yè)面,需要對(duì)應(yīng)一個(gè) addUI.jsp。在刪除、修改、添加完成后應(yīng)該返回列表頁(yè)面,這時(shí)為了避免重復(fù)提交返回使用重定向。配置 user-spring.xml ,并 將 其 導(dǎo) 入 到applicationContext.xml 中 ,然后在 applicatoinContext.xml 中 設(shè) 置 所 有

30、業(yè) 務(wù) dao 的父類 dao ,為 HibernateDaoSupport 注入 sessionFactory。baseDao 中的 在 user-spring.xml 中的內(nèi)容:3.2實(shí)現(xiàn)用戶管理的 CRUD 方法及顯示列表在 UserAction 中至少需要有的 6 個(gè)方法:listUI() - 返回到列表頁(yè)面對(duì)應(yīng) listUI.jsp addUI() - 返回到添加頁(yè)面對(duì)應(yīng) addUI.jsp add() - 重定向到 listUIedit() - 重定向到 listUIeditUI() - 返回到編輯頁(yè)面對(duì)應(yīng) editUI.jspdelete() - 刪除用戶重定向到 listUI設(shè)

31、置完 action 后,配置 user-struts.xml 文件,里面對(duì)應(yīng)各個(gè)方法對(duì)應(yīng)的頁(yè)面;最后將user-struts.xml 包含到 struts.xml 文件中。<!- 所有 dao 的 parent -><bean name="baseDao" abstract="true"><property name="sessionFactory" ref="sessionFactory"/></bean>接下來(lái)引入美工設(shè)計(jì)好的頁(yè)面;將數(shù)據(jù)與頁(yè)面結(jié)合展示。3.3完成

32、美工設(shè)計(jì)頁(yè)面顯示將美工設(shè)計(jì)好的頁(yè)面到項(xiàng)目中:將 js、css、image、分別放置到 WebRoot 目錄下;其它的 jsp 對(duì)應(yīng)頁(yè)面填充動(dòng)態(tài)數(shù)據(jù)。完成后jsp對(duì)應(yīng)大多數(shù)頁(yè)面樣式和 jquery 都是需要的,所以我們把公共樣式和 jquery、struts信息抽出到一個(gè) header.jsp 文件中,將此文件放入 common 公共文件目錄。庫(kù)等3.4批量刪除在 用 戶 列 表 listUI.jsp 中設(shè)置好復(fù)選框 <input type="checkbox" name="selectedRow"value='<s:property

33、value="id"/>'/> ,點(diǎn)擊操作欄中的刪除執(zhí)行 js提交用戶列表表單到后臺(tái) UserAction,在 action 中使用數(shù)組接收的用戶 id,然后在對(duì)該數(shù)組進(jìn)行遍歷刪除。3.5日期組件 wdatepicker導(dǎo)入 WdataPicker 文件包到項(xiàng)目的 js 文件夾下;在用戶管理中的添加、編輯 jsp 頁(yè)面對(duì)生日表單項(xiàng)引入日期組件:用法:回顯時(shí),注意設(shè)置好顯示格式;可以如下設(shè)置:3.6頭像上傳在用戶管理的添加、編輯頁(yè)面中,可以上傳用戶的頭像;頁(yè)面中對(duì)頭像字段的文本域。<input type="file" name=&

34、quot;headImg"/>type=file之后 UserAction 接收文件需要配置的 3 個(gè)基本屬性變量:將頭像文件保存在服務(wù)器的 upload/user 目錄下,文件的名稱以 uuid 重命名。(必須重命名:重名問(wèn)題特殊字符在顯示時(shí)的問(wèn)題)<s:textfield id="birthday" name="user.birthday" readonly="true"onfocus="WdatePicker(skin:'whyGreen', el:'birthday

35、9;,dateFmt:'yyyy-MM-dd')"><s:paramname="value"><s:datename='user.birthday' format='yyyy-MM-dd' /></s:param></s:textfield><s:textfield id="birthday" name="user.birthday" readonly="true"onfocus="Wda

36、tePicker(skin:'whyGreen', el:'birthday',dateFmt:'yyyy-MM-dd')"/><script type="text/javascript" src="$basePathjs/datepicker/WdatePicker.js"></script>3.7批量導(dǎo)入、導(dǎo)出查閱POI 操作 excel.doc 先了解 POI,使用 POI 工具類導(dǎo)出用戶數(shù)據(jù)到 excel 中。導(dǎo)出:在用戶管理頁(yè)面中點(diǎn)擊“導(dǎo)出”,將所有用戶導(dǎo)出

37、到 excel 中。在 userService 中將調(diào)用導(dǎo)出工具類 ExcelUtil 導(dǎo)出數(shù)據(jù)。導(dǎo)入:在用戶管理頁(yè)面中,上傳包含用戶列表的 excel 文檔,然后點(diǎn)擊“導(dǎo)入”將 excel 中的用戶的用戶表中,并顯示在列表上。 UserAction 中接受導(dǎo)入文件 UserServiceImpl 中具體處理導(dǎo)入文件3.8表單校驗(yàn)在用戶的新增、編輯中對(duì)帳號(hào)、進(jìn)行非空校驗(yàn)和帳號(hào)的唯一性校驗(yàn)。需要注意的是在編輯頁(yè)面中帳號(hào)的唯一性校驗(yàn)要排除當(dāng)前編輯的帳號(hào),不然將出現(xiàn)無(wú)法保存的情況。1、 在 jsp 頁(yè)面中,分別進(jìn)行兩個(gè)時(shí)機(jī)的校驗(yàn),是在編輯帳號(hào)的表單域時(shí)需要到服務(wù)器中校驗(yàn)是否已經(jīng)存在輸入的帳號(hào);在提交

38、表單時(shí)再次進(jìn)行校驗(yàn),避免在填寫(xiě)表單時(shí)帳號(hào)已被使用的情況;2、 在 action 中,根據(jù)傳入的帳號(hào)和用戶 id 到用戶表中查找用戶,如果出現(xiàn)有任何該帳號(hào)已經(jīng)被使用。說(shuō)明3、 在 service、dao 中的代碼分別如下:UserServiceImpl 中實(shí)現(xiàn)的方法:UserDaoImpl 中需要對(duì)傳入的 id 進(jìn)行實(shí)現(xiàn)的方法:4抽取 BaseAction在 action 中繼承了 ActionSupport 和其它一些公共屬性,如 selectedRow 等;可能以后還會(huì)產(chǎn)生公共的內(nèi)容,所以應(yīng)該把這些共有的抽取出來(lái),放入到一個(gè)基本 action 中,我們命名為 BaseAction,讓它去繼承

39、 ActionSupport 和其它公共屬性,其它的 action 只要繼承它就可以了。5系統(tǒng)異常處理當(dāng)在頁(yè)面中了請(qǐng)求,請(qǐng)求被系統(tǒng)處理時(shí)出現(xiàn)錯(cuò)誤時(shí),如果沒(méi)有特別處理在請(qǐng)求過(guò)程中出現(xiàn)的異常信息時(shí),那么返回給用戶的則是頁(yè)面呈現(xiàn)給用戶,可對(duì)這報(bào)錯(cuò)進(jìn)行處理。的異常信息頁(yè)面;為避免直接將這報(bào)錯(cuò)的5.1分層異常中的能出現(xiàn)相應(yīng)錯(cuò)誤。處理有分 3 個(gè)層,分別是 action、service 和 dao 層,每個(gè)層次都有可Action 層可能出現(xiàn)請(qǐng)求參數(shù)、返回結(jié)果有問(wèn)題; Service 層則可能出現(xiàn)請(qǐng)求中要做的業(yè)務(wù)操作出現(xiàn)問(wèn)題;出現(xiàn)了問(wèn)題要根據(jù)實(shí)際情況是否會(huì)影響本次操作結(jié)果,action 中要根據(jù)異常信息進(jìn)行

40、然后確定是否操作; dao 層也可能出現(xiàn)在操作數(shù)據(jù)庫(kù)時(shí)出現(xiàn)錯(cuò)誤;而此種錯(cuò)誤一般都是致命的會(huì)影響操作結(jié)果。以此;在 3 個(gè)層次中至少要有兩種類型的異常信息來(lái)標(biāo)識(shí)。制定總的系統(tǒng)異常類:Action 層異常類:Service 層異常類:5.2異常處理5.2.1全局異常在struts 總配置文件(struts.xml)中配置一個(gè)包括 全局異常和全局結(jié)果的package,然后讓其它所有的業(yè)務(wù)模塊的 struts 配置文件(*-struts.xml)繼承后便可處理由特定異常并處理。在總配置文件 struts.xml 中:拋出的在子業(yè)務(wù)模塊中的*-sturts.xml 中繼承總配置文件中的 package:

41、在具體的處理代碼中拋出系統(tǒng)異常:如果在 action 中只拋出了 ActionException,那么非此異常出現(xiàn)時(shí),如果在全局異常中配置了 java.lang.Exception 異常類的,同樣可以捕獲。5.2.2制定返回類型(StrutsResultSupport)在有特殊情況時(shí);如果沒(méi)有異常信息,但是有錯(cuò)誤并且有錯(cuò)誤信息等內(nèi)容;此時(shí)也需要進(jìn)行友好的錯(cuò)誤處理的話,那么可以借助 StrutsResultSupport 返回結(jié)果類型來(lái)實(shí)現(xiàn)特定處理。此種需要繼承 StrutsResultSupport ,然后可以在子類中獲取本次請(qǐng)求的相關(guān)信息,再根據(jù)相關(guān)信息進(jìn)行結(jié)果處理:在 struts.xml

42、 總配置文件中定義全局處理類型和全局處理結(jié)果:管理66.1與權(quán)限說(shuō)明與權(quán)限的關(guān)系6.1.1系統(tǒng)中可以存在多個(gè),每個(gè)可以自由的組合系統(tǒng)定義的權(quán)限集合。即和權(quán)限的與關(guān)系是多對(duì)多的關(guān)系。為了保存這種多對(duì)多關(guān)系,需要一個(gè)權(quán)限表來(lái)保存。權(quán)限的關(guān)系是一對(duì)多的關(guān)系;而權(quán)限與權(quán)限的關(guān)系也為一對(duì)多關(guān)系。6.1.2定義系統(tǒng)權(quán)限集將系統(tǒng)中需要使用到的權(quán)限先定義出來(lái):粗粒度的分為各個(gè)子系統(tǒng)的以定義在常量文件中。權(quán)限;這些權(quán)限可6.2管理 CRUD實(shí)體類及文件6.2.1 Role/Role.hbml.xml RolePrivilege/RolePrivilegeId,RolePrivilege.hbm.xml6.2.2

43、dao、service 層主要操作方法dao 中主要方法:service 中主要方法:6.2.3action 中主要方法6.2.4配置文件配置 role-spring.xml 及 role-struts.xml,并將 role-struts.xml 加入到 struts.xml 總配置文件中。6.3用戶說(shuō)明一個(gè)用戶可以對(duì)應(yīng)多個(gè),一個(gè)可以對(duì)應(yīng)多個(gè)用戶。用戶與的關(guān)系也是多對(duì)多的;并且用戶不直接關(guān)關(guān)系。在頁(yè)面中應(yīng)該體現(xiàn)出在添加、編輯用戶時(shí)可以選擇多個(gè)統(tǒng)的權(quán)限,用戶的權(quán)限都是通過(guò)來(lái)關(guān)聯(lián)實(shí)現(xiàn)。6.4改造用戶管理6.4.1用戶表實(shí)體類、文件的改造新增“用戶”實(shí)體及文件:6.4.2用戶保存、更新、刪除方法改

44、造1、 UserAction:在跳轉(zhuǎn)到 addUI 時(shí)應(yīng)該初始化系統(tǒng)的所有列表提供添加頁(yè)面進(jìn)行選擇:更新方法:在 UserDaoImpl 中:UserServiceImpl 類中:2、 在 jsp 頁(yè)面中將選擇改造為多選:7權(quán)限驗(yàn)證7.1系統(tǒng)首頁(yè)1、 編寫(xiě)首頁(yè) cn.itcast.home.HomeAction類的內(nèi)容就一個(gè)跳轉(zhuǎn)到首頁(yè)的方法:public class HomeAction extends ActionSupport /系統(tǒng)首頁(yè)2、 配置 home-struts.xml 文件將 home-struts.xml 加入到 struts.xml 中將 home.jsp 加入到項(xiàng)目的 W

45、EB-INF/jsp/home 目錄下,修改進(jìn)入納稅服務(wù)首頁(yè)的。7.2納稅服務(wù)首頁(yè)新增納稅服務(wù)的首頁(yè)對(duì)應(yīng)的 cn.itcast.home.action.HomeAction,里面就只包含 3 個(gè)方法,分別轉(zhuǎn)向 frame.jsp、top.jsp、left.jsp 的方法:配置 home-struts.xml 并包含到 struts.xml 中。之后引入 welcome.jsp、bg.jsp 到 common 目錄下,frame.jsp、top.jsp、left.jsp 三個(gè) jsp 文件到 WEB-INF/jsp/目錄下并修改這 3 個(gè)頁(yè)面中的和相關(guān)信息。<struts><p

46、ackage name="home" namespace="/sys" extends="struts-default"><action name="home_*" class="cn.itcast.home.action.HomeAction" method="1"><result name="home">/WEB-INF/jsp/home/home.jsp</result><result name=&qu

47、ot;1">/WEB-INF/jsp/home/1.jsp</result></action></package></struts>public String execute() return "home"7.3登錄與注銷7.3.1登錄與注銷編寫(xiě) LoginAction在這個(gè) action 中;主要處理登錄和注銷操作;方法應(yīng)該包括:1、 跳轉(zhuǎn)到登錄頁(yè);toLoginUI()loginUI2、 當(dāng)沒(méi)限時(shí),跳轉(zhuǎn)到?jīng)]限的提示頁(yè)面;toNoPermissionUI()noPermissionUI3、 登錄

48、方法;錄。需要具體的 userService,userDao 方法。userDaoImpl 類中具體的實(shí)現(xiàn)方法為:4、 注銷登錄;logout()tologinUILoginAction 類(代碼片段):配置 login-struts.xml 文件并引入 struts.xml 中。項(xiàng)目首頁(yè)重定向到登錄頁(yè)改寫(xiě) WebRoot 下面的 index.jsp,在里面沒(méi)有登錄情況下直接重定向到登錄頁(yè);如已經(jīng)登錄則跳轉(zhuǎn)到系統(tǒng)首頁(yè)。7.4權(quán)限驗(yàn)證說(shuō)明在系統(tǒng)中, 需要驗(yàn)證用戶的登錄,只有登錄后才能系統(tǒng)的。 納稅服務(wù)子系統(tǒng)只有擁有“納稅服務(wù)”權(quán)限的才可以操作。對(duì)于上述 2 種的權(quán)限驗(yàn)證,在此采用過(guò)

49、濾器進(jìn)行處理。編寫(xiě) LoginFilter 過(guò)濾器,在過(guò)濾器中對(duì)用戶的 url 進(jìn)行登錄驗(yàn)證,在登錄的前提下再次驗(yàn)證如果的是納稅服務(wù)命名空間下的則利用權(quán)限驗(yàn)證接口 PermissionCheck 校驗(yàn)用戶是否有“納稅服務(wù)”。7.4.1登錄過(guò)濾器編寫(xiě)過(guò)濾器 cn.itcast.core.filter.LoginFilter 類;實(shí)現(xiàn) javax.servlet.Filter 接口:<%pagelanguage="java"import="java.util.*,cn.itcast.core.constant.*" pageEncoding="

50、;utf-8"%><%if(session.getAttribute(Constants.USER) != null)/已登錄,跳轉(zhuǎn)到系統(tǒng)首頁(yè)response.sendRedirect(request.getContextPath() + "/sys/home.action"); else /未登錄,跳轉(zhuǎn)到登錄頁(yè)面response.sendRedirect(request.getContextPath() + "/sys/login_toLoginUI.action");%>在 web.xml 中配置該過(guò)濾器:7.4.2鑒定權(quán)

51、限在過(guò)濾器中加入權(quán)限的鑒定;當(dāng)用戶登錄的情況下如果特定模塊需要驗(yàn)證用戶是否有特定權(quán)限。由于權(quán)限常用于在用戶使用系統(tǒng)時(shí)權(quán)限的鑒定,所以可以在用戶實(shí)體中加入一個(gè)用戶權(quán)限的集合來(lái)保存用戶的集合。新增用戶類中列表屬性 userRoles 用于存放用戶的列表。PermissionCheck/PermissionCheckImpl<filter><filter-name>loginFilter</filter-name><filter-class>cn.itcast.core.filter.LoginFilter</filter-class>&l

52、t;/filter><filter-mapping><filter-name>loginFilter</filter-name><url-pattern>*.action</url-pattern></filter-mapping>在 applicationContext.xml 中需要限時(shí)可以注入其它 Service。PermissionCheck Bean,主要是為了方便在使用鑒定權(quán)7.5解決細(xì)節(jié)-登錄頁(yè)面嵌套在納稅服務(wù)的首頁(yè)中使用了 frameset,當(dāng)前用戶的系統(tǒng)登錄信息失效后;如果再點(diǎn)擊左邊的菜單,那么在右

53、邊的顯示登錄頁(yè)面,而正確的應(yīng)該是整個(gè)頁(yè)面返回到登錄頁(yè)。解決這個(gè)問(wèn)題:應(yīng)該在跳轉(zhuǎn)到登錄頁(yè)面中使用 js,是否當(dāng)前頁(yè)面在框架內(nèi),即當(dāng)前頁(yè)面的窗口是否是頂級(jí)窗口,如果是子窗口的話;可以直接刷新父窗口的地址則會(huì)自動(dòng)地整個(gè)頁(yè)面跳轉(zhuǎn)為登錄頁(yè)。8信息發(fā)布管理8.1實(shí)現(xiàn)信息發(fā)布管理 CRUD8.1.1編寫(xiě)信息實(shí)體文件編寫(xiě)信息實(shí)體類 Info 及其文件 Info.hbm.xml設(shè)置“信息分類”、“狀態(tài)”的常量信息,其中信息分類需要設(shè)置一個(gè)靜態(tài) MAP 包括信息分類用于在頁(yè)面的顯示。8.1.2實(shí)現(xiàn)信息發(fā)布管理1、 編寫(xiě) InfoDao/InfoDaoInfo2、 編寫(xiě) InfoService/InfoServic

54、eImpl3、 編寫(xiě) InfoAction4、 編寫(xiě) info-struts.xml 和 info-spring.xml,并將 info-struts.xml 引入struts.xml5、 引入美工頁(yè)面并修改6、 實(shí)現(xiàn)頁(yè)面中添加、編輯、刪除8.2富文本編輯器 Ueditor地址:ueditor1.4.3 utf8-Jsp 版本。完整 demo 可參考文件中的index.html導(dǎo)入 ueditor 到項(xiàng)目中;將 ueditor 導(dǎo)入到項(xiàng)目的 js 目錄下。導(dǎo)入 ueditor/jsp/lib 目錄中的“commons-codec-1.9.jar”、“json.jar”、“ueditor-1.1

55、.1.jar”這幾個(gè) jar 包到項(xiàng)目的 web-inf/lib目錄中。配置 ueditor 中圖片上傳前綴和路徑;打開(kāi)“ueditor/jsp/config.json”<script type="text/javascript">if(window != window.parent)window.parent.location.reload(true);</script>注意:修改web.xml 中 struts 過(guò)濾器的過(guò)濾規(guī)則,將/*改為 *.action 。避免引起 struts 過(guò)濾器把 ueditor 的圖片等上傳 jsp 給而導(dǎo)致上傳圖

56、片等失敗。引入 ueditor 到 jsp 頁(yè)面,在 ueditor 的 ueditor.config.js 文件中,要求我們需要配置好 ueditor的根目錄地址;在我們頁(yè)面時(shí)也需要在 js 中制定 UEDITOR_HOME_URL 的路徑。運(yùn)用到頁(yè)面時(shí)我們只需要將一個(gè) textarea 的表單項(xiàng)的 id 和 euditor 實(shí)例化時(shí)的 id 一致即可。將下面內(nèi)容引入到 jsp 頁(yè)面中:8.3異步信息發(fā)布在 InfoAction 中新增方法 publicInfo,主要用于修改信息的狀態(tài)。<s:textarea id="editor" name="info.content" cssStyle="width:90%;height:160px;" /><scripttype="text/javascript"charset="utf-8" src="$basePathjs/ueditor/ueditor.config.js"></script><scripttype="text/javascript"charset="utf-8" src="

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論