王者荣耀最坑队友哪个玩家最坑

08:39 提问
SSH三大框架的原理与核心技术
我即将面试java岗位,应届毕业生,学的不是很好,有谁能详细的跟我讲解下三大框架的原理及一些
核心的东西,我想背下,谢谢了!
按赞数排序
这个一句两句说不清,去看面试宝典吧
看下这个书吧,原理方面的问题不是几下就可以说明白的
其他相似问题下次自動登錄
現在的位置:
& 綜合 & 正文
SSH 三大框架核心原理
在我前面的中,也試圖總結過SSH,見,隨著知識的積累,總感覺以前說得比較籠統,思路不夠清晰,所以打算寫幾篇文章再稍微深入地剖析一下SSH,只能說是稍微,因為這三個框架的架構設計和基本原理,並不是通過幾篇文字,就能說出所以然的,時間和精力有限,只是希望能通過這幾篇簡練的文字使大家對ssh的認識再上一個台階。
一、框架的本質
在說Struts2,Spring和Hibernate核心原理之前,我覺得應該先搞明白以下三個問題,簡短概括如下:
<span style="font-size:18 color:#、什麼框架?
框架並不是什麼神聖的東西,它只是一組jar包而已,其本質是對jdk功能的擴展,包含了一系列最佳實踐,作用是解決某個領域的問題。
從廣義上說,jdk也可以看做一個複合框架,它提供的api同樣是為了解決各個領域的問題,例如java io解決文件操作的問題,java socket解決網路通訊的問題等等。
<span style="font-size:18 color:#、框架從何而來?
從框架的本質看,框架的產生就是為了解決一個又一個在開發中所遇到的問題。不同的框架是為了解決不同領域的問題。
<span style="font-size:18 color:#、為什麼要使用框架?
框架是因解決問題而來,而且它帶來了解決某一領域問題的最佳實踐,實際是無數員在經過了無數次嘗試後,總結出來處理特定問題的特定方法,如果我們把每個程序員的自由發揮看做是一條通往成功的路徑,最佳實踐就是其中的最短路徑,它能夠極大地解放生產力。
二、框架的適用範圍
Web開發模式中最普遍的一種是「分層開發模式」,分層開發模式是指,在開發J2ee程序時,將整個程序根據功能職責進行縱向劃分,比較常見的劃分方法是:表示層,業務層,持久層。具體不再贅述,做java web開發,這是基本常識了。根據業務需求作用域的不同,這種分層會產生不同程度的變化,可能會細化更多層,也可能會合併,不能為了分層而分層,一切脫離業務架構的設計都是虛幻的。
我們最為熟悉得Struts,Spring,Hibernate正是為了應對各個層次的編程問題的最佳實踐。即Struts對應表示層,Hibernate對應持久層,而Spring比較特殊,我們暫時簡單地認為它對應業務層,後面我們再詳細討論。
三、Struts2
說了這麼多,終於進入文章的重心了。
從宏觀看,Struts2是一個運行於Web容器的表示層框架,其核心作用是幫助我們處理http請求。
Struts2遵循Servlet標準,通過實現標準的Filter介面進行Http請求的處理,通過在web.xml指定這個實現類StrutsPrepareAndExecuteFilter,就可以將Struts2引入到應用中來。
而Filter的生命周期也成為我們對整個Struts2進行邏輯主線劃分的主要依據。
主線1:Struts2初始化-----Filter的init方法驅動執行。
主線2:Struts2處理Http請求------Filter的doFilter方法驅動
<span style="font-size:18 color:#、Struts2初始化
Struts2初始化只在web容器啟動時執行一次,啟動的成敗關係整個web應用的啟動成敗。初始化主線貫穿Struts2對其內置對象的創建和緩存過程,將Struts2的運行環境完整地創建起來。
我們從「數據」和「行為」兩個角度來分析,構成Struts2整個初始化過程的主要元素,就可以分為「數據結構的定義」和「初始化行為的操作介面」兩部分。
(1)從數據結構定義的角度,Struts2圍繞管理Struts2內置對象的容器展開,該容器成為初始化主線中的核心構成元素。而另一類配置元素PackageConfig作為事件請求映射的配置元素也可作為構成元素。介面定義和實現類分別為:Container,ContainerImp,PackageConfig。
(2)從初始化行為的操作介面的角度,則由另外兩個元素完成,載入介面和構造器。介面為:ConfigurationProvider(使用多重繼承將Container和PackageConfig兩類配置載入介面進行統一),ContainerProvider(Container的配置載入介面,其實現類需要負責初始化容器中的所有對象),PackageProvider(PackageProvider介面,其實現類負責初始化用於處理事件請求的配置對象),ContainerBuilder(Container構造器,用於初始化時構造容器),PackageConfigBulider(PackageProvider構造器,用於初始化時構造PackageProvider)
還有兩個輔助元素承載上述介面,驅動整個初始化流程:ConfigurationManager(配置行為操作代理類,包含所有ContainerProvider和PackageProvider的實現以及配置的結構化數據Configuration),Configuration(配置數據的管理類,運行時獲取配置的基本介面,承載所有配置的結構化數據和操作方法)
初始化步驟詳細示意圖
<span style="font-size:18 color:#、Struts2處理Http請求
Struts2處理Http請求又分兩個階段:Http請求預處理階段(以後統稱階段1),XWork執行業務邏輯(以後統稱階段2)
嚴格意義上說,Struts2是由兩個不同的框架組成,一個是執行在階段1的Struts2,負責將Web容器與MVC分離,,一個是執行在階段2的XWork,真正的MVC實現。
(1)階段1的主要元素
Dispatcher,整個Struts2的核心,被稱為核心分發器,是Struts2進行http請求預處理的核心場所,更是將Http請求與web容器解耦並進行邏輯處理轉發的執行驅動中心。
PrepareOperations,HTTP預處理類,進行Http請求預處理的操作集合
ExecuteOperations,HTTP處理執行類,進行Http請求邏輯處理的操作集合
(2)階段2的主要元素
這一階段,程序控制權交給了XWork框架,涉及XWork框架的七大元素,這七大元素構成一條生產線,完成對http請求的處理。
ActionProxy,整個生產線的入口,封裝了所有執行細節。
ActionInvocation,生產線的調度者,負責調度整個生產線中各個元素的執行次序。
Interceptor,生產線上的工序,豐富生產線的功能。
Action,生產線上的核心工序,負責核心業務邏輯的調用或實現。
ActionContext,提供整個生產線需要的數據環境。
ValueStack,提供表達式計算的工具類,Xwork數據訪問的基礎。(後面細說)
Result,生產線末端設備,輸出生產線的生產結果。
結合階段1的核心分發器,根據七大元素的調用關係,我們可以得到如下示意圖:
從圖中,我們可以看出以下幾點:
(1)Dispatcher是Xwork框架的調用者和驅動者
(2)XWork生產線依賴兩個數據流:ActionContext和ValueStack
ActionContext是一個獨立的數據結構,無論是請求參數,處理返回值,甚至一些遠程的Web容器對象,都被封裝在ActionContext內部,成為XWork執行所依賴的數據基礎。值得注意的是,ActionContext採用ThreadLocal保證線程安全。
ValueStack本身也是一個數據結構,從屬於ActionContext,主要是對OGNL計算進行擴展,因此,位於ActionContext之中的ValueStack則賦予了ActionContext進行數據計算的功能,從而使得ValueStack自身成為一個可以進行數據訪問的環境。
插入一點OGNL相關的東西。
如果我們要數據在View層和java世界中互相流轉,就回在「字元串」和「對象樹」之間存在不匹配性,這個不匹配性源於Web是一個「弱類型」的平台,而java卻是一個具有豐富數據類型的「強類型」的平台。同一個對象在兩個平台之間交互,就必須要一個「翻譯」,也就是我們說的「表達式引擎」,它充當著「翻譯橋樑」的作用,保證數據能夠順利地在MVC的各個層次進行流轉。而OGNL就是Struts2選擇的表達式引擎。
(3)XWork生產線所依賴的控制流:事件處理驅動元素-----ActionProxy,ActionInvocation,事件處理節點-----Interceptor,Action, Result
有關這五大元素的作用和關係,我們用下面這個比喻來詮釋。
四、本篇總結
至此,我們圍繞初始化和處理Http請求兩大主線說明Struts作為表示層框架的基本原理,用一張圖概括本篇脈絡
隨著知識的積累,理解自然深入,下篇,我們將繼續探究Hibernate的核心原理……
&&&&推薦文章:
【上篇】【下篇】SSH三大框架优缺点_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
SSH三大框架优缺点
上传于|0|0|文档简介
&&SSH三大框架优缺点
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩2页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢SSH三大框架整合struts2+hibernate3+Spring2
SSH三大框架整合struts2+hibernate3+Spring2&
IDE工具:myeclipse6.5
数据库:mysql
此SSH所实现的功能
点击save users:
点击保存一个记录到数据库:
这里面可以对表进行删除和修改,和生成Excel表格保存到本地
点击生成Excel:
点击序号为1的update:
首先在数据库中创建一个表:
注意:我创建的是test数据库
& create table `test`.`users`(
`id` INT not null,
`firstname` VARCHAR(50) not null,
`lastname` VARCHAR(50) not null,
`age` INT not null,
primary key (`id`)
在myeclipse中建立一个web工程,hibernate3和Spring2是myeclipse自动导入:在建立的web项目上单击鼠标右键选中myeclipse项目就能添加,Struts2和mysql驱动手动添加。
3.Struts2和mysql驱动需要的文件:
把这几个文件复制粘贴到WEB-INF下的lib下
4.web工程和里面所需要建立的文件:
按照下面建立文件和所需要的包
5.可以对照一下导入的包是否正确:
下面为从上到下包中文件的代码:
com.test.action.user包下:
GenerateExcelAction.java
package com.test.action.
import java.io.InputS
import com.opensymphony.xwork2.ActionS
import com.test.service.UserS
public class GenerateExcelAction extends
ActionSupport {
&&& private
&&& public
UserService getService() {
&&& public void
setService(UserService service) {
this.service =
&&& public
InputStream getDownloadFile(){
return this.service.getInputStream();
&&& public
String execute() throws Exception {
// TODO Auto-generated method stub
return SUCCESS;
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ListUserAction.java
package com.test.action.
import java.util.M
import com.opensymphony.xwork2.ActionC
import com.opensymphony.xwork2.ActionS
import com.test.service.UserS
public class ListUserAction extends ActionSupport {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
private UserService userS
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public UserService getUserService() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
return userS
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setUserService(UserService userService) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.userService = userS
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
@SuppressWarnings("unchecked")
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public String execute() throws Exception {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
Map request=(Map)ActionContext.getContext().get("request");
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
request.put("list", userService.findAll());
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
return SUCCESS;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
RemoveUserAction.java
package com.test.action.
import com.opensymphony.xwork2.ActionS
import com.test.bean.U
import com.test.service.UserS
public class RemoveUserAction extends ActionSupport {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
private UserS
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public User getUser() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setUser(User user) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.user =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public UserService getService() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setService(UserService service) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.service =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public String execute() throws Exception {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.service.delete(user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
return SUCCESS;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SaveUserAction.java
package com.test.action.
import com.opensymphony.xwork2.ActionS
import com.test.bean.U
import com.test.service.UserS
public class SaveUserAction extends ActionSupport {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
private UserS
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public UserService getService() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setService(UserService service) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.service =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public User getUser() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setUser(User user) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.user =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public String execute() throws Exception {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.service.save(this.user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
return SUCCESS;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
UpdatePUserAction.java
package com.test.action.
import com.opensymphony.xwork2.ActionS
import com.test.bean.U
import com.test.service.UserS
public class UpdatePUserAction extends ActionSupport {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
private UserS
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public User getUser() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setUser(User user) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.user =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public UserService getService() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setService(UserService service) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.service =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public String execute() throws Exception {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
user=this.service.findById(user.getId());
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
return SUCCESS;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
UpdateUserAction.java
package com.test.action.
import com.opensymphony.xwork2.ActionS
import com.test.bean.U
import com.test.service.UserS
public class UpdateUserAction extends ActionSupport {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
private UserS
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public User getUser() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setUser(User user) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.user =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public UserService getService() {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void setService(UserService service) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.service =
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public String execute() throws Exception {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.service.update(user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
return SUCCESS;
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
SaveUserAction-validation.xml
&?xml version="1.0"
encoding="UTF-8"?&
&!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"/xwork/xwork-validator-1.0.2.dtd"&
&validators&
&!-- 第一种验证方法:用struts2的验证框架
name是需要校验的变量--&
&field name="user.firstname" &
&field-validator
type="requiredstring"&
&&&&&&&&&&
&message&required first
name&/message&
&/field-validator&
&field name="user.lastname"&
&field-validator
type="requiredstring"&
&&&&&&&&&&
&message&required last
name&/message&
&/field-validator&
&field name="user.age"&
&field-validator type="required"&
&&&&&&&&&&
&message&required
age&/message&
&/field-validator&
&field-validator type="int"&
&&&&&&&&&&
name="min"&1&/param&
&&&&&&&&&&
name="max"&150&/param&
&&&&&&&&&&
&message&age should be between ${min}
and ${max}&/message&
&/field-validator&
&!-- 另外一种验证用struts2的visitor
context中的user是另外一个文件的名字&
appendPrefix是否加前缀一般与下面的message成对出现--&
&field name="user"&
&field-validator type="visitor"&
&&&&&&&&&&
name="context"&user&/param&
&&&&&&&&&&
name="appendPrefix"&true&/param&
&&&&&&&&&&
&message&user's
&/message&
&/field-validator&
&/validators&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
UpdateUserAction-validation.xml
&?xml version="1.0"
encoding="UTF-8"?&
&!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"/xwork/xwork-validator-1.0.2.dtd"&
&validators&
&!-- 第一种验证方法:用struts2的验证框架
name是需要校验的变量--&
&field name="user.firstname" &
&field-validator
type="requiredstring"&
&&&&&&&&&&
&message&required first
name&/message&
&/field-validator&
&field name="user.lastname"&
&field-validator
type="requiredstring"&
&&&&&&&&&&
&message&required last
name&/message&
&/field-validator&
&field name="user.age"&
&field-validator type="required"&
&&&&&&&&&&
&message&required
age&/message&
&/field-validator&
&field-validator type="int"&
&&&&&&&&&&
name="min"&1&/param&
&&&&&&&&&&
name="max"&150&/param&
&&&&&&&&&&
&message&age should be between ${min}
and ${max}&/message&
&/field-validator&
&!-- 另外一种验证用struts2的visitor
context中的user是另外一个文件的名字&
appendPrefix是否加前缀一般与下面的message成对出现--&
&field name="user"&
&field-validator type="visitor"&
&&&&&&&&&&
name="context"&user&/param&
&&&&&&&&&&
name="appendPrefix"&true&/param&
&&&&&&&&&&
&message&user's
&/message&
&/field-validator&
&/validators&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
com.test.bean包下
package com.test.
public class User {
public Integer getId() {
public void setId(Integer id) {
public String getFirstname() {
public void setFirstname(String firstname) {
this.firstname =
public String getLastname() {
public void setLastname(String lastname) {
this.lastname =
public Integer getAge() {
public void setAge(Integer age) {
this.age =
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
User.hbm.xml
&?xml version="1.0"
encoding="utf-8"?&
&!DOCTYPE hibernate-mapping
"-//Hibernate/Hibernate Configuration Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"&
&hibernate-mapping&
&class name="com.test.bean.User"
table="users"&
&id name="id" type="java.lang.Integer"
column="id"&
&generator
class="increment"&&/generator&
&property name="firstname" type="string"
column="firstname"
length="50"&&/property&
&property name="lastname" type="string"
column="lastname"
length="50"&&/property&
&property name="age" type="java.lang.Integer"
column="age"&&/property&
&/hibernate-mapping&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
User-user-validation.xml
&?xml version="1.0"
encoding="UTF-8"?&
&!DOCTYPE validators PUBLIC
"-//OpenSymphony Group//XWork Validator 1.0.2//EN"
"/xwork/xwork-validator-1.0.2.dtd"&
&validators&
&field name="firstname" &
&field-validator
type="requiredstring"&
&&&&&&&&&&
&message&required first
name&/message&
&/field-validator&
&field name="lastname"&
&field-validator
type="requiredstring"&
&&&&&&&&&&
&message&required last
name&/message&
&/field-validator&
&field name="age"&
&field-validator type="required"&
&&&&&&&&&&
&message&required
age&/message&
&/field-validator&
&field-validator type="int"&
&&&&&&&&&&
name="min"&1&/param&
&&&&&&&&&&
name="max"&150&/param&
&&&&&&&&&&
&message&age should be between ${min}
and ${max}&/message&
&/field-validator&
&/validators&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
com.test.dao包下
UserDAO.java
package com.test.
import java.util.L
import com.test.bean.U
public interface UserDAO {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void save(User user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void removeUser(User user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public User findUserById(Integer id);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public List&User& findAllUsers();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void updateUser(User user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
UserDaoImpl.java
package com.test.
import java.util.L
org.springframework.orm.hibernate3.support.HibernateDaoS
import com.test.bean.U
public class UserDaoImpl extends HibernateDaoSupport implements
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
@SuppressWarnings("unchecked")
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public List&User& findAllUsers()
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
按照id的降序排列 下面是按照id的升序排列
//&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
String hql="from User user order by user.id desc";
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
String hql="from User user order by user.id asc";
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
(List&User&)this.getHibernateTemplate().find(hql);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public User findUserById(Integer id) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
User user=(User)this.getHibernateTemplate().get(User.class,
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void removeUser(User user) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.getHibernateTemplate().delete(user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void save(User user) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.getHibernateTemplate().save(user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void updateUser(User user) {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
this.getHibernateTemplate().update(user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
com.test.service包下
UserService.java
package com.test.
import java.io.InputS
import java.util.L
import com.test.bean.U
public interface UserService {
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public List&User& findAll();
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void save(User user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void delete(User user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public User findById(Integer id);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public void update(User user);
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public InputStream getInputStream();
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
UserServiceImpl.java
这个里面如果使用另外一种方法应该把相应的包导入
package com.test.
import java.io.ByteArrayInputS
import java.io.ByteArrayOutputS
import java.io.IOE
import java.io.InputS
import java.util.L
org.apache.poi.hssf.usermodel.HSSFC
org.apache.poi.hssf.usermodel.HSSFR
org.apache.poi.hssf.usermodel.HSSFS
org.apache.poi.hssf.usermodel.HSSFW
import com.test.bean.U
import com.test.dao.UserDAO;
public class UserServiceImpl
implements UserService {
private UserDAO userD
public UserDAO getUserDao() {
return userD
public void setUserDao(UserDAO userDao) {
this.userDao = userD
public void delete(User user) {
this.userDao.removeUser(user);
public List&User& findAll()
return this.userDao.findAllUsers();
public User findById(Integer id) {
// TODO Auto-generated method stub
return this.userDao.findUserById(id);
public void save(User user) {
this.userDao.save(user);
public void update(User user) {
this.userDao.updateUser(user);
//poi进行excl表格生成
public InputStream getInputStream(){
HSSFWorkbook wb=new HSSFWorkbook();//相当于创建一个excl表格
HSSFSheet sheet=wb.createSheet("sheet1");//创建一个sheet
HSSFRow row=sheet.createRow(0);//创建一行
HSSFCell cell=row.createCell((short)0);//创建单元格
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("序号");
cell=row.createCell((short)1);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("姓");
cell=row.createCell((short)2);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("名");
cell=row.createCell((short)3);
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
cell.setCellValue("年龄");
List&User&
list=this.findAll();
for(int i=0;i&list.size();++i){
&&&&&&&&&&
User user=list.get(i);
&&&&&&&&&&
&&&&&&&&&&
row=sheet.createRow(i+1);
&&&&&&&&&&
cell=row.createCell((short)0);
&&&&&&&&&&
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
&&&&&&&&&&
cell.setCellValue(i+1);
&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&
cell=row.createCell((short)1);
&&&&&&&&&&
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
&&&&&&&&&&
cell.setCellValue(user.getFirstname());
&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&
cell=row.createCell((short)2);
&&&&&&&&&&
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
&&&&&&&&&&
cell.setCellValue(user.getLastname());
&&&&&&&&&&
&&&&&&&&&&
cell=row.createCell((short)3);
&&&&&&&&&&
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
&&&&&&&&&&
cell.setCellValue(user.getAge());
ByteArrayOutputStream os=new ByteArrayOutputStream();
&&&&&&&&&&
wb.write(os);
} catch (IOException e) {
&&&&&&&&&&
// TODO Auto-generated catch block
&&&&&&&&&&
e.printStackTrace();
byte[] content=os.toByteArray();
InputStream is=new ByteArrayInputStream(content);
//在内存里面真正的导出到一个文件里面,struts的action在这个文件里面以输入流的形式把信息get出来返回给我们的客户端
//commons-lang.jar下mons.lang下RandomStringUtils
//String filename=RandomStringUtils.randomAlphanumeric(10);
String filename=CharacterUtils.getRandomString(10);
filename=new StringBuffer(filename).append(".xls").toString();
final& File file= new File(filename);
//&&&&&&&&
OutputStream os=new FileOutputStream(file);
//&&&&&&&&
wb.write(os);
//&&&&&&&&
os.close();
} catch (Exception e) {
//&&&&&&&&
// TODO Auto-generated catch block
//&&&&&&&&
e.printStackTrace();
InputStream is=
//&&&&&&&&
is=new FileInputStream(file);
} catch (FileNotFoundException e) {
//&&&&&&&&
// TODO Auto-generated catch block
//&&&&&&&&
e.printStackTrace();
//用线程的方法删除临时文件
new Thread(new Runnable()
//&&&&&&&&
public void run(){
//&&&&&&&&&&&
//&&&&&&&&&&&&&&&
Thread.sleep(15000);
//&&&&&&&&&&&
} catch (InterruptedException e) {
//&&&&&&&&&&&&&&&
// TODO Auto-generated catch block
//&&&&&&&&&&&&&&&
e.printStackTrace();
//&&&&&&&&&&&
//&&&&&&&&&&&
file.delete();//删除临时文件
//&&&&&&&&
).start();
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
com.test.servlet包下
DeleteFilesServlet.java
package com.test.
import java.io.F
import java.io.FileF
import javax.servlet.ServletE
import javax.servlet.http.HttpS
public class DeleteFilesServlet
extends HttpServlet {
public void destroy() {
public void init() throws ServletException
//第一种方法
File file=new File(".");
File[] subFiles=file.listFiles();
for(File f:subFiles){
//&&&&&&&&
if(f.getName().endsWith("xls")){
//&&&&&&&&&&&
f.delete();
//&&&&&&&&
//第二种方法
File file=new File(".");
File[] subFiles=file.listFiles(new FileFilter()
&&&&&&&&&&
public boolean accept(File pathname){
&&&&&&&&&&&&&
if(pathname.getName().endsWith("xls")){
&&&&&&&&&&&&&&&&&
return true;
&&&&&&&&&&&&&
&&&&&&&&&&&&&
return false;
&&&&&&&&&&
for(File f:subFiles){
&&&&&&&&&&
f.delete();
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
com.test.util包下
CharacterUtils.java
package com.test.
import java.util.R
//第一种方法在小写字母大写字母和数字中取出length位随机数,用str字符串的方法,在字符串里随即取
public class CharacterUtils {
public static String getRandomString(int
str="abcdefghijklmnopqrstuvwxyzABCDEFGHIGKLMNOPQRSTUVWXYZ";
Random random=new Random();
StringBuffer sb=new StringBuffer();
for(int i=0;i&++i){
&&&&&&&&&&
int number=random.nextInt(62);
&&&&&&&&&&
sb.append(str.charAt(number));
return sb.toString();
public static String getRandomString2(int
Random random=new Random();
StringBuffer sb=new StringBuffer();
for(int i=0;i&++i){
&&&&&&&&&&
int number=random.nextInt(3);
&&&&&&&&&&
long result=0;
&&&&&&&&&&
&&&&&&&&&&
switch(number)
&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
result=Math.round(Math.random()*25+65);//Math.round方法是四舍五入,Math.random()表示0.0~1.0中的数*25就是0.0~25之间+65是大写字母
&&&&&&&&&&&&&&&&&
sb.append(String.valueOf((char)result));//result整形先转换成字符,再转化成字符串;
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
result=Math.round(Math.random()*25+97);//大写字母
&&&&&&&&&&&&&&&&&
sb.append(String.valueOf((char)result));
&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&
sb.append(String.valueOf(new
Random().nextInt(10)));
&&&&&&&&&&&&&&&&&
&&&&&&&&&&
return sb.toString();
public static void main(String[] args){
System.out.println(getRandomString2(10));
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
globalMessages_en.properties
firstname=firstname
lastname=lastname
globalMessages_zh.properties
firstname=\u59D3
lastname=\u540D
age=\u5E74\u9F84
hibernate.cfg.xml
&?xml version='1.0'
encoding='UTF-8'?&
&!DOCTYPE hibernate-configuration
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"&
&!-- Generated by MyEclipse
Tools.&&&&&&&&&&&&&&&&&&
&hibernate-configuration&
&session-factory&
&/session-factory&
&/hibernate-configuration&
struts.properties
struts.custom.i18n.resources= globalMessages
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
struts.xml
&?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"&
&package name="user"
extends="struts-default"&
&action name="saveUser"
class="saveUserAction"&
&&&&&&&&&&
&result name="success"
type="redirect"&listUser.action&/result&
&&&&&&&&&&
name="input"&/save.jsp&/result&
&action name="listUser"
class="listUserAction"&
&&&&&&&&&&
&result&/list.jsp&/result&
&action name="deleteUser"
class="removeUserAction"&
&&&&&&&&&&
type="redirect"&listUser.action&/result&
&action name="updatePUser"
class="updatePUserAction"&
&&&&&&&&&&
name="success"&/update.jsp&/result&
&action name="updateUser"
class="updateUserAction"&
&&&&&&&&&&
&result name="success"
type="redirect"&listUser.action&/result&
&&&&&&&&&&
name="input"&/update.jsp&/result&
&action name="generateExcel"
class="generateExcelAction"&
&&&&&&&&&&
&result name="success"
type="stream"&
&&&&&&&&&&&&&
name="contentType"&application/vnd.ms-excel&/param&
&&&&&&&&&&&&&
&!-- attachment不管是什么文件都要弹出一个下载框 默认情况是inline
&&&&&&&&&&&&&
name="contentDisposition"&filename="AllUsers.xls"&/param&
&&&&&&&&&&&&&
name="inputName"&downloadFile&/param&
&&&&&&&&&&
&/package&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
applicationContext.xml
&?xml version="1.0"
encoding="UTF-8"?&
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"&
&!-- 用dbcp连接池进行一些驱动的加载 --&
&bean id="dataSource"
class="mons.dbcp.BasicDataSource"
destroy-method="close"&
&property name="driverClassName"
value="com.mysql.jdbc.Driver"&&/property&
&property name="url"
value="jdbc:mysql://localhost:3306/test"&&/property&
&property name="username"
value="root"&&/property&
&property name="password"
value="123456"&&/property&
&property name="maxActive"
value="100"&&/property&
&property name="maxIdle"
value="30"&&/property&
&property name="maxWait"
value="500"&&/property&
&property name="defaultAutoCommit"
value="true"&&/property&
&!-- 用spring和hibernate整合的会话工厂管理数据库数据
&bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&
&property name="dataSource"
ref="dataSource"&&/property&
name="hibernateProperties"&
&&&&&&&&&&
&&&&&&&&&&&&&
key="hibernate.dialect"&org.hibernate.dialect.MySQLDialect&/prop&
&&&&&&&&&&&&&
hibernate.show_sql是对一些sql语句的支持一般设置为true但在部署时设置为false提高效率
&&&&&&&&&&&&&
key="hibernate.show_sql"&true&/prop&
&&&&&&&&&&
&/property&
&!-- 获得与数据库表连接数据 --&
name="mappingResources"&
&&&&&&&&&&
&&&&&&&&&&&&&
&value&com/test/bean/User.hbm.xml&/value&
&&&&&&&&&&
&/property&
&!--singleton无状态时一般设置为单太模式
prototype有状态时比如:用struts的框架进行输入校验时,如果不用这个每点击一次就加一条校验的错误
&bean id="userDao" class="com.test.dao.UserDaoImpl"
scope="singleton"&
&property name="sessionFactory"&
&&&&&&&&&&
&ref bean="sessionFactory"/&
&/property&
&bean id="userService"
class="com.test.service.UserServiceImpl"&
&property name="userDao"
ref="userDao"&&/property&
&bean id="saveUserAction"
class="com.test.action.user.SaveUserAction"
scope="prototype"&
&property name="service"
ref="userService"&&/property&
&bean id="listUserAction"
class="com.test.action.user.ListUserAction"
scope="prototype"&
&property name="userService"
ref="userService"&&/property&
&bean id="removeUserAction"
class="com.test.action.user.RemoveUserAction"
scope="prototype"&
&property name="service"
ref="userService"&&/property&
&bean id="updatePUserAction"
class="com.test.action.user.UpdatePUserAction"
scope="prototype"&
&property name="service"
ref="userService"&&/property&
&bean id="updateUserAction"
class="com.test.action.user.UpdateUserAction"
scope="prototype"&
&property name="service"
ref="userService"&&/property&
&bean id="generateExcelAction"
class="com.test.action.user.GenerateExcelAction"&
&property name="service"
ref="userService"&&/property&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
&%@ page language="java"
import="java.util.*" pageEncoding="UTF-8"%&
&%@ taglib prefix="s"
uri="/struts-tags" %&
String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
&!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01 Transitional//EN"&
href="&%=basePath%&"&
&title&Operation&/title&
&meta http-equiv="pragma"
content="no-cache"&
&meta http-equiv="cache-control"
content="no-cache"&
&meta http-equiv="expires"
content="0"&&&&
&meta http-equiv="keywords"
content="keyword1,keyword2,keyword3"&
&meta http-equiv="description" content="This is my
color="red"&首页&/font&&/h1&
&s:a href="save.jsp"&save
users&/s:a&&br/&&br/&&br/&
href="listUser.action"&listUser&/s:a&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
&%@ page language="java"
import="java.util.*" pageEncoding="UTF-8"%&
&%@ taglib prefix="s"
uri="/struts-tags" %&
&!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01 Transitional//EN"&
&title&My JSP 'list.jsp' starting
page&/title&
&meta http-equiv="pragma"
content="no-cache"&
&meta http-equiv="cache-control"
content="no-cache"&
&meta http-equiv="expires"
content="0"&&&&
&meta http-equiv="keywords"
content="keyword1,keyword2,keyword3"&
&meta http-equiv="description" content="This is my
&link rel="stylesheet" type="text/css"
href="styles.css"&
&script type="text/javascript"&
function del(){
&&&&&&&&&&
if(confirm("你真的想删除这条记录吗?")){
&&&&&&&&&&&&&
&&&&&&&&&&
&&&&&&&&&&&&&
color="red"&&center&User
List&/center&&/font&&/h1&
&table border="1" align="center"
width="500"&
&td&序号&/td&
&td&姓&/td&
&td&名&/td&
&td&年龄&/td&
&td&删除&/td&
&td&更新&/td&
&s:iterator value="#request.list"
&td&&s:property
value="#us.id"/&&/td&
&td&&s:property
value="#us.firstname"/&&/td&
&td&&s:property
value="#us.lastname"/&&/td&
&td&&s:property
value="#us.age"/&&/td&
href="deleteUser.action?user.id=%{#us.id}"&
onclick="return
del();"&delete&/s:a&&/td&
href="updatePUser.action?user.id=%{#us.id}"&update&/s:a&&/td&
&/s:iterator&
href="index.jsp"&首页&/s:a&&br/&&br/&
href="generateExcel.action"&生成Excel&/s:a&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
&%@ page language="java"
import="java.util.*" pageEncoding="UTF-8"%&
&%@ taglib prefix="s"
uri="/struts-tags" %&
String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
&!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01 Transitional//EN"&
href="&%=basePath%&"&
&title&save
page&/title&
&meta http-equiv="pragma"
content="no-cache"&
&meta http-equiv="cache-control"
content="no-cache"&
&meta http-equiv="expires"
content="0"&&&&
&meta http-equiv="keywords"
content="keyword1,keyword2,keyword3"&
&meta http-equiv="description" content="This is my
&link rel="stylesheet" type="text/css"
href="styles.css"&
color="red"&save
users&/font&&/h1&
&s:form action="saveUser"&
&s:textfield label="%{getText('firstname')}"
name="user.firstname"&&/s:textfield&
&s:textfield label="%{getText('lastname')}"
name="user.lastname"&&/s:textfield&
&s:textfield label="%{getText('age')}"
name="user.age"&&/s:textfield&
value="submit"&&/s:submit&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
update.jsp
&%@ page language="java"
import="java.util.*" pageEncoding="UTF-8"%&
&%@ taglib prefix="s"
uri="/struts-tags" %&
String path = request.getContextPath();
String basePath =
request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
&!DOCTYPE HTML PUBLIC "-//W3C//DTD
HTML 4.01 Transitional//EN"&
href="&%=basePath%&"&
&title&update user
page&/title&
&meta http-equiv="pragma"
content="no-cache"&
&meta http-equiv="cache-control"
content="no-cache"&
&meta http-equiv="expires"
content="0"&&&&
&meta http-equiv="keywords"
content="keyword1,keyword2,keyword3"&
&meta http-equiv="description" content="This is my
&link rel="stylesheet" type="text/css"
href="styles.css"&
color="red"&Update
User&/font&&/h1&
&s:form action="updateUser"&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
&s:hidden name="user.id"
value="%{user.id}"&&/s:hidden&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
&s:textfield name="user.firstname"
value="%{user.firstname}"
label="%{getText('firstname')}"&&/s:textfield&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
&s:textfield name="user.lastname"
value="%{user.lastname}"
label="%{getText('lastname')}"&&/s:textfield&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
&s:textfield name="user.age" value="%{user.age}"
label="%{getText('age')}"&&/s:textfield&
&&&&&&&&&&&
&&&&&&&&&&&
&&&&&&&&&&&&&&&
&s:submit&&/s:submit&
&&&&&&&&&&&
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*******三大框架整合注意的几点**********
====================================================================================================================================
1.bean是数据库中对应数据的定义,用hibernate与表进行关联名字起法:类名+“.”+hbm+“.”.xml与数据库中表关联用:hibernate-mapping
class propertie
2.action是struts的action进行页面的处理和显示。继承ActionSupport
3.dao数据层,与数据库打交道用hibernate实现
4.service服务层,处理页面和数据库的业务逻辑
5.struts.xml配置文件,action
的name要和页面发送的action或其他地方发送的action名字保持一致,class是处理action的类,redirect是重定向好处:避免重复提交表单
到某个jsp它和response(不写默认情况下是这个)的区别在于redirect是发送两次而response是发送一次,并且response刷新时也执行。
6.struts.properties对struts进行配置,这里面用于资源国际化:struts.custom.i18n.resources=globalMessages,用globalMessages作为前缀对中文和
英文进行配置
7.applicationContext.xml是spring的配置文件,其中进行一些依赖注入。
&bean&的id在struts中处理action类的名字,class是处理这个的类.
&property&的name是在class中成员变量的名字
ref是注入某个bean要与注入bean的id对应
8.输入校验的三种方法:
第一种:在action的类中继承validate方法。
第二种:用struts的&
校验框架:命名规则:需要校验的类名+“-”+需要校验类中方法名(如果有的话,没有不用加这个)+“-”+validation.xml
第三种:是用struts的visitor进行校验,这个需要两个xml另一个要放在要校验bean类的文件夹下命名规则:bean类的名字+“-”+上面context的名字+validation.xml
====================================================================================================================================
****************************************
由LuckyStar总结完成
****************************************
************欢迎参考,有问题多多指教&&&
********************
&&&&&&&&&&&&&&&&&&&&
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 王者荣耀最坑小学生 的文章

 

随机推荐