//web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>struts_hibernate</display-name><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></web-app>
//struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="default" namespace="/" extends="struts-default"><action name="login" class="action.action" method="login"><result>/success.jsp</result><result name="input">index.jsp</result></action></package></struts>//Struts依赖的JAR包说明//文件名        说明struts-core       核心类库xwork-core      WebWork核心库,struts构建基础ognl            使用的一种表达式语言类库freemarker      标签模板使用类库javassist       javaScript字节码解释器commons-fileupload  文件上传组件依赖包commons-io     输入输出commons-language    数据类型工具commons-logging       日志管理组件依赖包// Struts2标签库//表单标签的公共属性//属性名      说明  title       设置title属性disable    设置是否可用label     设置label属性labelPosition  设置label显示位置,可选:top和left(默认)name     设置name属性,与action中的属性名对应value     设置表单元素值cssClass 设置表单元素的CLASScssStyle    设置表单元素的stylerequired    设置表单元素为必填requiredposition  设置必填标记,默认标记为*相对于label位置可选left和right(默认)tabindex 设置表单元素的tabindex属性//简单的表单标签//标签          说明<s:form>        表单标签<s:textfield> 单行文本框<s:password> 密码输入框<s:textarea> 文本框<s:submit>     提交按钮<s:reset>     重置按钮<s:select>        下拉列表<s:radio>     单选按钮<s:checkbox>  复选框//例<s:form action="register" method="post"><s:textfield name="username" label="姓名"></s:textfield><s:password name="password" label="密码"></s:password><s:select list="{'高中及以下','大学专科','大学本科','研究生及以上'}" name="degree" label="学历"></s:select><s:radio list="{'男','女'}" label="性别" name="sex"></s:radio><s:textarea name="protocol" label="注册协议" value="这里可以省略协议"></s:textarea><s:checkbox name="love" label="同意工作登记协议"></s:checkbox><s:submit value="提交"></s:submit><s:reset value="重置"></s:reset></s:form>//<s:checkboxlist>属性     必须  说明name      0       指定复选框名称 label       0       指定复选框前显示文本list      1       指定复选框要迭代的选项集合listKey        0       指定复选框value属性listValue   0       指定复选框的label属性//例//BookServicepublic class BookService {public Book[] getBooks(){return new Book[]{ new Book("Java编程思想","TOM"),new Book("Java编程思想","TOM"),new Book("Java编程思想","TOM")};}}//Bookpublic class Book {private String name;private String author;//seter、geter、空参、带参构造器}//ShowCheckboxlist.jsp<s:form><!-- 使用简单字符串集合,生成多个复选框 --><s:checkboxlist list="{'Java程序设计','jsp程序设计','J2EE企业级开发'}" name="bn"label="请选择喜欢的图书" labelposition="top"></s:checkboxlist><!-- 使用简单Map对象,来生成多个复选框 --><s:checkboxlist list="#{'Java':'2013.8','jsp':'201312','J2EE':'201402'}" name="bd"label="请选择出版日期" labelposition="top" listKey="key" listValue="value"></s:checkboxlist><!-- 使用Bean标签来创建一个实例 --><s:bean name="service.BookService" id="bs"></s:bean><!-- 集合中存放多个JavaBean实例来生成多个复选框 --><s:checkboxlist list="#bs.books" name="bookBean"label="请选择您喜欢的图书" labelposition="top" listKey="name" listValue="name"></s:checkboxlist></s:form>//<s:commbobox>//例//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;private String bookName;private String bookAuthor;//geter、seter方法public String execute(){return SUCCESS;}}//BookServicepublic class BookService {public Book[] getBooks(){return new Book[]{ new Book("Java编程思想","Java"),new Book("JSP编程思想","JSP"),new Book("J2EE编程思想","J2EE")};}}  //ShowCombobox.jsp<s:form action="bookAction"><s:combobox list="{'Java程序设计','jsp程序设计','J2EE企业级开发'}" name="bookName" label="请选择书" maxlength="20" headerValue="---请选择---" emptyOption="true" value="Jsp程序设计"></s:combobox><s:bean name="service.BookService" id="bs"></s:bean><s:combobox list="#bs.books" listKey="author" listValue="author" name="bookAuthor" label="选择作者" labelposition="top"></s:combobox><s:submit value="提交"></s:submit></s:form>//ShowComboboxSuccess.jsp书名:<s:property  value="bookName"></s:property>作者:<s:property  value="bookAuthor"></s:property>//<s:optgroup>//例<s:form action=""><s:selectlist="#{'Java程序设计':'Java','jsp程序设计':'Jsp','J2EE企业级开发':'J2EE'}"label="选择您喜欢的书" name="book" listKey="value" listValue="key"><s:optgroup label="清华大学出版社" listKey="value" listValue="key"list="#{'Java程序设计':'Java','jsp程序设计':'Jsp','J2EE企业级开发':'J2EE'}" /><s:optgroup label="人民邮电出版社" listKey="value" listValue="key"list="#{'Java程序设计':'Java','jsp程序设计':'Jsp','J2EE企业级开发':'J2EE'}" /></s:select></s:form>//<s:doubleselect>//例<s:form action="aa"><!-- 默认情况下,第一个下拉列表只支持两项 --><s:doubleselect label="请选择城市" name="city" list="{'北京市','上海市'}"doubleName="cityZ"doubleList="top=='北京市'?{'东城区','西城区','朝阳区'}:{'闸北区','普陀区','闵行区'}" /><s:set name="citys"value="#{'江苏省':{'南京市','苏州市','无锡市','扬州市'},'浙江省':{'杭州市','宁波市','温州市'},'安徽省':{'合肥市','芜湖市'}}"></s:set><s:doubleselect label="选择你所在的城市" name="privince" size="1"list="#citys.keySet()" doubleSize="5" doubleList="#citys[top]"doubleName="cityP" /></s:form>//<s:file>//例<s:file name="uploadFile" accept="text/*"/><s:file name="otherUploadFile" accept="text/html.text/plain"/>//<s:token/>//例//struts.xml<action name="loginAction" class="action.LoginAction"><interceptor-ref name="defaultStack"/><interceptor-ref name="token"/><result name="invalid.token">index.jsp</result><result>index.jsp</result></action>//LoginActionpublic class LoginAction extends ActionSupport{private static final long serialVersionUID = 1L;private String username;private String password;public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String execute() throws Exception {return super.execute();}}//jsp<s:form action="loginAction"><s:textfield label="用户名" name="username"></s:textfield><s:password label="密码" name="password"></s:password><s:submit value="提交"></s:submit><s:token/><s:actionerror/></s:form>//<s:updownselect>//例//BookServicepublic class BookService {public Book[] getBooks(){return new Book[]{ new Book("Java编程思想","Java"),new Book("JSP编程思想","JSP"),new Book("J2EE编程思想","J2EE")};}}//jsp<s:form><s:updownselect list="{'Java程序设计','jsp程序设计','J2EE企业级开发'}" name=""label="请选择您喜欢的图书" labelposition="left" moveUpLabel="上移"></s:updownselect><s:updownselect list="#{'Java程序设计':'Java','jsp程序设计':'Jsp','J2EE企业级开发':'J2EE'}"name="bd" label="请选择喜欢的出版日期" labelposition="left" moveDownLabel="下移"emptyOption="true" listKey="key" listValue="value"></s:updownselect><s:bean name="service.BookService" id="bs"></s:bean><s:updownselect name="bookBean" label="请选择喜欢的作者" labelposition="left"selectAllLabel="全选" multiple="true" list="#bs.books" listKey="author"listValue="name"></s:updownselect></s:form>//<s:optiontransferselect>//例//jsp<s:form><s:optiontransferselect list="{'Java程序设计','jsp程序设计','J2EE企业级开发'}" name="cnb"leftTitle="中文图书" rightTitle="外文图书" label="请选择您喜欢的图书"  multiple="true"leftDownLabel="下移" leftUpLabel="上移" addToLeftLabel="左移" addToRightLabel="右移"addAllToLeftLabel="全部左移" addAllToRightLabel="全部右移" selectAllLabel="全部选择"headerKey="cnKey" headerValue="--请选择中文图书--" emptyOption="true" doubleList="{'JAVA','JSP','AJAX'}" doubleName="enb" doubleHeaderKey="enKey"doubleHeaderValue="--请选择外文图书--" doubleEmptyOption="true" doubleMultiple="true"rightDownLabel="下移" rightUpLabel="上移" /></s:form>//<s:actionerror/>  <s:actionmessage/>    <s:fielderror>//例//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;@Overridepublic String execute() throws Exception {this.addActionError("ActionError1");this.addActionError("ActionError2");this.addActionMessage("ActionMessage1");this.addActionMessage("ActionMessage2");this.addFieldError("FieldError1", "FieldError1");this.addFieldError("FieldError2", "FieldError2");return super.execute();}}//xml<package name="default" namespace="/" extends="struts-default"><action name="action" class="action.action"><result>index.jsp</result></action></package>//jsp<a href="action">action</a><s:actionerror/><s:actionmessage/><s:fielderror value="fielderror1"></s:fielderror>//<s:component>//ShowComponent.jsp<s:form><s:component template="TemplateComponent.jsp"><s:param  name="interestlist" /><s:param name="booklist" value="{'Java','JSP','SSH','Android'}"/></s:component></s:form>//TemplateComponent.jsp        WebRoot/template/xhtml<s:checkboxlist list="{'唱歌','跳舞','看书','球类运动'}" name="interestlist" label="您的兴趣爱好"/><s:select list="parameters.booklist" cssStyle="font-size:12px" labelposition="left"label="您最感兴趣书" name="booklist"/>//控制标签//if:选择输出标签//elseif:与if结合使用,控制选择输出//else:与if结合使用,控制选择输出//iterator:迭代器,集合迭代输出//append:多集合拼接成新集合//merge:多集合拼接新集合,与append拼接方式不同//sort:对集合进行排序//generator:将字符串解析成集合//subset:截取集合部分,形成新集合
//<s:if>   <s:elseif>    <s:else><s:if test=""></s:if><s:elseif test=""></s:elseif><s:else></s:else>//<s:iterator>//value:可选,指定被迭代集合,通常OGNL,没有指定,使用栈顶对象//id:可选,指定集合里元素的ID//status:可选,当前迭代的索引//Begin:开始索引位置//End:结束索引位置//Step:迭代步长//getCount:遍历集合元素的数目//isEven:返回当前遍历元素索引是否为偶数//isOdd:返回当前遍历元素索引是否为奇数//isFirst:返回是否为集合第一个元素//isLast:返回是否为集合最后一个元素//jsp<s:iterator value="{'黄鹤楼','下扬州'}" var="poem"><s:property value="poem"/><br></s:iterator><hr><s:iterator value="#{'1001':'JAVA','1002':'JSP','1003':'SSH' }" var="bookName"><s:property value="key"/><s:property value="value"/><br></s:iterator><hr><s:iterator value="{'清华','复旦','北大'}" var="university" status="stat"><s:if test="#stat.odd"><s:property value="#stat.count"/>-<s:property/><br></s:if></s:iterator><hr><table border="1"><tr><td>序号</td><td>出版社</td></tr><s:iterator value="{'清华','人民','北大'}" var="publisher" status="stat"><tr><s:if test="#stat.index%2==0"><td><s:property value="#stat.count"/> </td><td style="background-color: red;" ><s:property value="publisher"/></td></s:if><s:else><td><s:property value="#stat.count"/> </td><td style="background-color: gray;" ><s:property value="publisher"/></td></s:else></tr></s:iterator></table>//<s:append><s:append var="poem"> <s:param value="{'黄鹤楼','李白'}"></s:param><s:param value="{'黄鹤楼','下扬州'}"></s:param><s:param value="{'碧空净','天际流'}"></s:param></s:append><s:iterator value="#poem" id="sentence" ><s:property value="sentence" /><br></s:iterator>//<s:merge>    <s:merge var="poemMerge"><s:param value="{'黄鹤楼','李白'}"></s:param><s:param value="{'黄鹤楼','下扬州'}"></s:param><s:param value="{'碧空净','天际流'}"></s:param></s:merge><s:iterator value="#poemMerge" id="sentence" ><s:property value="sentence" /><br></s:iterator>//<s:sort>//comparator:必填,进行排序//source:可选,指定集合//id:可选,指定集合存储page范围内的变量名<s:bean id="myComparator" name="action.MyComparator" /><s:sort comparator="#myComparator" id="fruit" source="{'watermelon','peach','banana'}" ></s:sort>排序后<br><s:iterator value="#attr.fruit" var="order"><s:property value="order" /></s:iterator>//MyComparatorpublic class MyComparator implements Comparator{@Overridepublic int compare(Object o1, Object o2) {return ((String)o1).compareTo((String) o2);}}//<s:generator>  <s:generator separator="," val="'北京,上海,广州,深圳'" id="city" />分割后:<br><s:iterator value="#attr.city" var="directcity" ><s:property value="directcity"/><br></s:iterator>//<s:subset><s:subset  source="{'北京','上海','广州','深圳'}" var="city"  start="0" count="4"/>分割后:<br><s:iterator value="#attr.city" var="directcity" ><s:property value="directcity"/><br></s:iterator>//<s:action>//id:可选,指定引用Action的ID//name:必填,指定被调用Action名字//Namespace:可选,指定action所对应的namespace//executeResult:可选,是否将Action的处理结果包含到JSP页面,默认值false//ignoreContextParams:可选,指定是否忽略参数//Musicpublic class Music {private String name;private String author;private String type;//geter,seter}//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;private Music music;//geter seter@Overridepublic String execute() throws Exception {return super.execute();}}//xml<action name="musicAction" class="action.action"><result>/ShowActionSuccess.jsp</result></action> //index.jsp<s:action name="musicAction" executeResult="true" namespace="/"></s:action>//ShowActionSuccess.jsp<s:property value="music.name"/><s:property value="music.author"/><s:property value="music.type"/>//<s:property>//default:可选属性,当为Null时,显示default属性//escape:可选属性,是否escape HTML代码//value:可选属性,需要输出的属性值,null输出栈顶//id:可选属性,指定元素标识//jsp输出字符串:<s:property value="'<h3>HELLOWORLD</h3>'"/><br>设置忽略HTML代码:<s:property value="'<h3>HELLOWORLD</h3>'" escape="true" /><br>设置不忽略HTML代码:<s:property value="'<h3>HELLOWORLD</h3>'" escape="false" /><br>输出请求参数sex的值:<s:property value="#parameters.sex" /><br>输出默认值:<s:property value="sex" default="true" />//<s:param>//name:可选,设置参数的参数名//value:可选,设置参数的参数值//id:可选,引用元素的id<s:param name="color" value="blue" ></s:param><s:param name="color" >blue</s:param>//<s:bean>//name:必填,实例化JAVABEAN//id:可选,指定javaBean实例储存变量名<s:bean name="entity.Book" id="book"><s:param name="name">SSH</s:param><s:param name="author" value="'gmy'">SSH</s:param></s:bean>书名:<s:property value="#book.name" /><br>作者:<s:property value="#book.author"/>//<s:date>//format:可选,指定格式化样式//name:必填,要被格式化的日期值,必须指定java,util,Date//id:可选,引用元素的ID值//nice:可选,是否输出当前日期值与指定日期值之间的时间差。默认false<%Calendar cal = Calendar.getInstance();cal.set(2014,5,13);pageContext.setAttribute("Football", cal.getTime());%><s:bean name="java.util.Date" id="now">通过property:<s:property value="#now"/>   <br>指定format,没有nice:<s:date name="#attr.now" format="yyyy年MM月dd日"/><br>指定format,nice:<s:date name="#attr.now" format="yyyy年MM月dd日" nice="true" /><br>距离开幕还有:<s:date name="#attr.Football" nice="true" /></s:bean>//<s:set>//name:必填,新变量的名字//scope:可选,可以使application seesion request page action, 默认stack Context//value:可选,指定赋给新变量,默认把栈顶给新变量//id:可选,指定新元素的ID<s:bean name="entity.Book" id="book"><s:param  name="name" value="'JAVA'" /><s:param name="author" >gmy</s:param></s:bean><s:set value="#book" name="b1" scope="action"></s:set>action范围:<s:property value="#b1.name" /><br><s:set value="#book" name="b2" scope="request"></s:set>request范围:<s:property value="#request.b2.author" /><br><s:set value="%{'清华出版社'}" name="pub" scope="session"></s:set>session范围:<s:property value="#session.pub" /><br>//<s:url>//action:可选,指定Ation,默认使用value作为URL//anchor:可选,指定URL锚点//encode:可选,指定是否需要encode请求参数//forceAddSchemeHostAndPort:可选,是否需要URL对应的地址里强制添加scheme、主机、端口//includeContext:可选,是否需要将当前上下文包含到URL地址中//includeParams:可选,指定是否包含请求参数默认get,属性值 none get all//method:可选,指定使用Action//namespace:可选,属性指定命名空间//portletMode:可选,结果页面的portlet模式//scheme:可选,设置模式//value:可选,指定URL,默认action指定Action作为URL//var:可选,指定URL元素应用ID,建议使用var//windowState:可选,结果页面的porlet的窗口状态指定value形式:<s:url value="showBook.action" ></s:url><hr>指定action属性,使用param传参数:<s:url action="showBook" ><s:param name="author" value="'smith'" ></s:param></s:url><hr>不指定action属性和value属性,使用param传入参数形式:<s:url includeParams="get" ><s:param name="id" value="%{'22'}" ></s:param></s:url><hr>指定action属性和value属性,使用param传参数形式:<s:url action="showBook" value="xxxx" ><s:param name="author" value="smith" ></s:param></s:url>//<s:include><s:include value="ShowActionSuccess.jsp"></s:include>   //<s:debug><s:debug></s:debug>//<s:push>//value:必填,放到valuestack栈顶的值//id:可选,标签的ID,建议使用var<s:bean name="entity.Book" var="book"><s:param name="name" value="'JAVA'" /><s:param name="author" value="'gmy'" /></s:bean><s:push value="#book"><s:debug></s:debug>书名:<s:property value="name"/>作者:<s:property value="author"/></s:push>//<s:i18n> <s:text>//name:必填,获取资源属性//searchValueStack:可选,无法获取资源属性,是否到栈里搜索//var:可选,指定命名得到的资源属性,放到ValueStack<s:text name="struts.date.format"></s:text><s:text name="struts.date.format" var="date"></s:text>//验证//重写validate数据校验//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;//geter seter execute()@Overridepublic void validate() {if(getUsername() == null || "".equals(getUsername().trim())){this.addFieldError("usernameMsg", "用户名不能为空");}else{Pattern compile = Pattern.compile("\\w{6,20}");Matcher matcher = compile.matcher(getUsername().trim());if(!matcher.matches()){this.addFieldError("usernameMsg", "用户名由下划线,长度6-20");}}if(getPassword().trim().length() == 0){this.addFieldError("passwordMsg", "密码不能为空");}else{int length = getPassword().trim().length();if(length<6 || length>30){this.addFieldError("passwordMsg", "密码,长度6-30");}}}}//struts.xml<package name="default" namespace="/" extends="struts-default"><action name="login" class="action.action"><result>/success.jsp</result><result name="input">index.jsp</result></action></package>//index.jsp<s:fielderror/><s:form action="login" method="post"><s:textfield name="username" label="用户名" ></s:textfield><s:textfield name="password" label="密   码" ></s:textfield><s:submit value="登录"></s:submit></s:form>//success.jsp欢迎<s:property value="username"/> 登录//重写validateXXX数据校验//先调用validateXxx,再调用xxx//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;//geter seter execute()public String login(){return "success";}public void validateLogin() {if(getUsername()=="admin" && getPassword()=="123"){this.addFieldError("username", "用户名或密码不正确123");}}}//struts.xml<package name="default" namespace="/" extends="struts-default"><action name="login" class="action.action" method="login"><result>/success.jsp</result><result name="input">index.jsp</result></action></package>//index.jsp<s:fielderror/><s:form action="login" method="post"><s:textfield name="username" label="用户名" ></s:textfield><s:textfield name="password" label="密   码" ></s:textfield><s:submit value="登录"></s:submit></s:form>//success.jsp欢迎<s:property value="username"/> 登录//框架校验//ActionName-validate.xml<!DOCTYPE validators PUBLIC"-//Apache Struts//XWork Validator 1.0.2//EN""http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd"><validators><field name="username"><field-validator type="requiredstring"><message key="requiredstring"/></field-validator></field><field name="password"><field-validator type="requiredstring"><message key="requiredstring"/></field-validator></field></validators>//例//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;private String telephone;private String realname;private String repassword;private String email;//geter、seter  execute}//action-validation.xml<validators><field name="username"><field-validator type="requiredstring"><param name="trim">true</param><message>用户名不能为空</message></field-validator><field-validator type="stringlength"><param name="maxLength">10</param><param name="minLength">6</param><message>用户名长度${maxLength}和${minLength}之间</message></field-validator></field><field name="password"><field-validator type="requiredstring"><message>密码不能为空</message></field-validator><field-validator type="stringlength"><param name="minLength">6</param><message>密码长度必须大于等于${minLength}</message></field-validator></field><field name="repassword"><field-validator type="requiredstring"><message>确认密码不能为空</message></field-validator><field-validator type="stringlength"><param name="expression">password==repassword</param><message>两次密码必须相同</message></field-validator></field><field name="telephone"><field-validator type="requiredstring"><message>电话号码不能为空</message></field-validator><field-validator type="fieldexpression"><param name="expression">^(\d{3,4}-){0,1}(\d{7,8})$</param><message>电话号码格式不正确</message></field-validator></field><field name="email"><field-validator type="requiredstring"><message>电子邮箱不能为空</message></field-validator><field-validator type="email"><message>电子邮箱格式不正确</message></field-validator></field></validators>//struts.xml<struts><package name="default" namespace="/" extends="struts-default"><action name="reg" class="action.action"><result>/success.jsp</result><result name="input">index.jsp</result></action></package></struts>//jsp<s:form action="reg" method="post"><s:textfield name="username" label="用户名" ></s:textfield><s:textfield name="password" label="密   码" ></s:textfield><s:textfield name="repassword" label="确认密码"></s:textfield><s:textfield name="telephone" label="电话号码"></s:textfield><s:textfield name="realname" label="真实姓名"></s:textfield><s:textfield name="email" label="电子邮箱"></s:textfield><s:submit value="注册"></s:submit></s:form>//国际化//Locale类//getDefault:获取默认的Locale对象//getCountry:获取区域名字//getLanguage:获取语言//getDisplayCountry:获取当前用户区域名称//getDisplayLanguage:获取当前用户语言//getAvailableLocales:返回Locale支持的所有语言环境public static void main(String[] args) {Locale[] availableLocales = Locale.getAvailableLocales();for (int i = 0; i < availableLocales.length; i++) {System.out.print(availableLocales[i].getDisplayCountry()+"=");System.out.print(availableLocales[i].getCountry()+" ");System.out.print(availableLocales[i].getDisplayLanguage()+"=");System.out.print(availableLocales[i].getLanguage()+"\n");}//例//struts.xml//value属性决定src下的资源文件名前缀<constant name="struts.custom.i18n.resources" value="regResource"></constant><package name="default" namespace="/" extends="struts-default"><action name="reg" class="action.action"><result>/success.jsp</result><result name="input">index.jsp</result></action></package>//index.jsp<s:form action="reg" method="post"><s:textfield name="username" key="username" ></s:textfield><s:textfield name="password" key="password" ></s:textfield><s:textfield name="repassword" key="repassword"></s:textfield><s:textfield name="telephone" key="telephone"></s:textfield><s:textfield name="realname" key="realname" ></s:textfield><s:textfield name="email" key="email" ></s:textfield><s:submit value="%{getText('submit')}"></s:submit></s:form>//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;private String telephone;private String realname;private String repassword;private String email;}//regResource_en.properties 文件名前缀一定要和配置的value值一致  (放在SRC下)title= titleusername = usernamepassword = passwordrepassword = repasswordtelephone =  telephonerealname=realnameemail=emailsubmit=submit//regResource.propertiestitle= \u6CE8\u518Cusername = \u7528\u6237\u540Dpassword = \u5BC6\u7801repassword = \u786E\u8BA4\u5BC6\u7801telephone =  \u7535\u8BDD\u53F7\u7801realname=\u771F\u5B9E\u59D3\u540Demail=\u7535\u5B50\u90AE\u7BB1submit=\u6CE8\u518C//国际化检验同上,在校验文件的使用<message>标签的key属性//方法2:自行选择语言环境实现国际化(推荐)//struts.xml<constant name="struts.custom.i18n.resources" value="regResource"></constant><package name="default" namespace="/" extends="struts-default"><action name="reg" class="action.action"><result>/success.jsp</result><result name="input">index.jsp</result></action><action name="lang" class="action.action" method="lang"><result name="input">index.jsp</result></action></package>//regResource_en.propertiestitle= titleusername = usernamepassword = passwordrepassword = repasswordtelephone =  telephonerealname=realnameemail=emailsubmit=submit//regResource.propertiestitle= \u6CE8\u518Cusername = \u7528\u6237\u540Dpassword = \u5BC6\u7801repassword = \u786E\u8BA4\u5BC6\u7801telephone =  \u7535\u8BDD\u53F7\u7801realname=\u771F\u5B9E\u59D3\u540Demail=\u7535\u5B50\u90AE\u7BB1submit=\u6CE8\u518C//actiompublic class action extends ActionSupport {private static final long serialVersionUID = 1L;private String username;private String password;private String telephone;private String realname;//geter seter executeprivate String repassword;private String email;public String lang() {return "input";}}//jsp<a href="lang?request_locale=en_US">English</a><a href="lang?request_locale=zh_CN">中文</a><s:form action="reg" method="post"><s:textfield name="username" key="username" ></s:textfield><s:textfield name="password" key="password" ></s:textfield><s:textfield name="repassword" key="repassword"></s:textfield><s:textfield name="telephone" key="telephone"></s:textfield><s:textfield name="realname" key="realname" ></s:textfield><s:textfield name="email" key="email" ></s:textfield><s:submit value="%{getText('submit')}"></s:submit></s:form>//文件上传//单个文件上传//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;private File uploadFile;private String uploadFileContentType;//必须这样命名private String uploadFileFileName;//必须这样命名//geter seter @Overridepublic String execute() throws Exception {System.out.println();InputStream fileInputStream = new FileInputStream(uploadFile);//文件输入流String realPath = ServletActionContext.getServletContext().getRealPath("/upload");File file = new File(realPath,this.getUploadFileFileName());FileOutputStream fileOutputStream = new FileOutputStream(file);//输出流byte[] buffer = new byte[1024];int length = 0;while ((length=fileInputStream.read(buffer))>0) {fileOutputStream.write(buffer, 0, length);}fileInputStream.close();fileOutputStream.close();return SUCCESS;}}//struts.xml<package name="default" namespace="/" extends="struts-default"><action name="fileUpload" class="action.action"><result>/success.jsp</result><result name="input">index.jsp</result></action></package>//index.jsp<s:form action="fileUpload" enctype="multipart/form-data" method="post"><s:file name="uploadFile" label="上传文件" /><s:submit value="上传" /><s:reset value="重置" /></s:form>//success.jsp文件名:${uploadFileFileName }<br>文件类型:${uploadFileContentType }//配置上传大小和类型 需要修改struts.xml文件<struts><package name="default" namespace="/" extends="struts-default"><action name="fileUpload" class="action.action"><interceptor-ref name="fileUpload"><param name="allowedTypes">image/bmp</param><param name="maxmumSize">81920</param></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref><result>/success.jsp</result><result name="input">index.jsp</result></action></package></struts>//提示信息不友好需要加入国际化标签struts.messages.error.file.too.largestruts.messages.error.content.type.not.allowed//多文件上传//一个文件都不上传会被空指针,通过检验来控制public class action extends ActionSupport {private static final long serialVersionUID = 1L;private File[] multiFile;private String[] multiFileContentType;private String[] multiFileFileName;private String savePath;//geter、seter@Overridepublic String execute() throws Exception {File[] multiFile2 = this.getMultiFile();for (int i = 0; i < multiFile2.length; i++) {FileInputStream fileInputStream = new FileInputStream(multiFile2[i]);String realPath = ServletActionContext.getServletContext().getRealPath(savePath);File file = new File(realPath,this.getMultiFileFileName()[i]);FileOutputStream fileOutputStream = new FileOutputStream(file);byte[] buffer = new byte[1024];int length = 0;while ((length=fileInputStream.read())>0) {fileOutputStream.write(buffer, 0, length);}fileInputStream.close();fileOutputStream.close();}return super.execute();}}//struts.xml<struts><package name="default" namespace="/" extends="struts-default"><action name="multiFile" class="action.action"><param name="savePath">/upload</param><interceptor-ref name="fileUpload"><param name="allowedTypes">text/plain,image/jpeg</param><param name="maxmumSize">81920</param></interceptor-ref><interceptor-ref name="defaultStack"></interceptor-ref><result>/success.jsp</result><result name="input">index.jsp</result></action></package></struts>//index.jsp<s:form action="multiFile" enctype="multipart/form-data" method="post"><s:file name="multiFile" label="选择文档" /><br><s:file name="multiFile" label="选择文档" /><br><s:file name="multiFile" label="选择文档" /><br><s:submit value="上传" /><s:reset value="重置" /></s:form>//success.jsp<s:iterator var="fileName" value="multiFileFileName" status="st">文件名:<s:property value="fileName"/>&emsp;&emsp;文件类型:<s:property value="multiFileContentType[#st.getIndex()]"/><br></s:iterator>//文件下载//index.jsp<a href="download">struts2.ppt</a>//struts.xml<action name="download" class="action.action"><result type="stream"><param name="contentType">application/vnd.ms-powerpoint</param><param name="contentDisposition">attachment;filename="Struts2.ppt"</param><param name="inputName">downloadFile</param></result></action>//actionpublic class action extends ActionSupport {private static final long serialVersionUID = 1L;public InputStream getDownloadFile() throws Exception{return ServletActionContext.getServletContext().getResourceAsStream("/upload/Struts2.ppt");}@Overridepublic String execute() throws Exception {return super.execute();}}//struts2+jdbc的CRUD实例srcactionUserAction.javaUserAction-userAdd-validation.xml    //Action名字-别名-validation.xml //别名是struts.xml中作用<action>的名字biz //业务层UserBiz.javaUserBizImpl.javadaoBaseDao.javaUserDao.javaUserDaoImpl.javaentityUser.javastruts.xmlWebContentaddUser.jspdetailUser.jspindex.jspupdateUser.jsp//UserActionpublic class UserAction extends ActionSupport {private static final long serialVersionUID = 1L;private List<User> list;public List<User> getList() {return list;}public void setList(List<User> list) {this.list = list;}//显示全部public String toList() throws Exception{UserBiz userBiz = new UserBizImpl();list = userBiz.getAllUser();return "toList";}private String [] sexs = new String[]{"男","女"};//跳转public String[] getSexs() {return sexs;}public void setSexs(String[] sexs) {this.sexs = sexs;}public String toAdd() throws Exception{return "toAdd";}private User user;public User getUser() {return user;}public void setUser(User user) {this.user = user;}//添加public String add() throws Exception{UserBiz userBize = new UserBizImpl();userBize.addUser(user);return this.toList();}//更新跳转public String toUpdate() throws Exception{UserBiz userBize = new UserBizImpl();user = userBize.getUserById(user.getId());return "toUpdate";}//更新public String update() throws Exception{UserBiz userBize = new UserBizImpl();userBize.updateUser(user);return this.toList();}//删除public String delete() throws Exception{UserBiz userBize = new UserBizImpl();userBize.deleteUser(user.getId());return this.toList();}//详细页public String toDetail() throws Exception{UserBiz userBize = new UserBizImpl();user = userBize.getUserById(user.getId());return "toDetail";}}//UserAction-userAdd-validation.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="default" namespace="/" extends="struts-default"><action name="userToList" class="action.UserAction" method="toList"><result name="toList">/index.jsp</result></action><action name="userToAdd" class="action.UserAction" method="toAdd"><result name="toAdd">/addUser.jsp</result></action><action name="userAdd" class="action.UserAction" method="add"><result name="toList">/index.jsp</result><result name="input">/addUser.jsp</result></action><action name="userToUpdate" class="action.UserAction" method="toUpdate"><result name="toUpdate">/updateUser.jsp</result></action><action name="userUpdate" class="action.UserAction" method="update"><result name="toList">/index.jsp</result></action><action name="userDelete" class="action.UserAction" method="delete"><result name="toList">/index.jsp</result></action><action name="userToDetail" class="action.UserAction" method="toDetail"><result name="toDetail">/detailUser.jsp</result></action></package></struts>//UserBizpublic interface UserBiz {public List<User> getAllUser();public User getUserById(int id);public int addUser(User u);public int updateUser(User u);public int deleteUser(int id);}//UserBizImplpublic class UserBizImpl implements UserBiz {UserDao userDao = new UserDaoImpl();@Overridepublic List<User> getAllUser() {return userDao.getAllUser();}@Overridepublic User getUserById(int id) {return userDao.getUserById(id);}@Overridepublic int addUser(User u) {return userDao.addUser(u);}@Overridepublic int updateUser(User u) {return userDao.updateUser(u);}@Overridepublic int deleteUser(int id) {return userDao.deleteUser(id);}}//BaseDaopublic class BaseDao {public Connection getConnection(){Connection conn=null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection("jdbc:mysql:///user?auseUnicode=true&characterEncoding=utf8","root","root");System.out.println("连接成功");} catch (Exception e) {System.out.println("连接失败");}return conn;}public void closeAll(Connection conn,PreparedStatement pstmt,ResultSet rs){if(rs!=null){try {rs.close();} catch (Exception e) {}}if(pstmt!=null){try {pstmt.close();} catch (Exception e) {}}if(conn!=null){try {conn.close();} catch (Exception e) {}}}}//UserDaopublic interface UserDao {public List<User> getAllUser();public User getUserById(int id);public int addUser(User u);public int updateUser(User u);public int deleteUser(int id);}//UserDaoImplpublic class UserDaoImpl extends BaseDao implements UserDao{Connection conn=null;PreparedStatement pstmt =null;ResultSet rs=null;@Overridepublic List<User> getAllUser() {ArrayList<User> arrayList = new ArrayList<User>();String sql = "select * from userinfo order by id";try {conn = this.getConnection();pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery();User u = null;while(rs.next()){u = new User();u.setId(rs.getInt("id"));u.setName(rs.getString("name"));u.setSex(rs.getString("sex"));u.setAge(rs.getInt("age"));u.setTelephone(rs.getString("telephone"));u.setSchool(rs.getString("school"));arrayList.add(u);}} catch (Exception e) {}finally{this.closeAll(conn, pstmt, rs);}return arrayList;}@Overridepublic User getUserById(int id) {User user =null;String sql= "select * from userinfo where id=" + id;try {conn = this.getConnection();pstmt = conn.prepareStatement(sql);rs = pstmt.executeQuery();user = new User();if(rs.next()){user.setId(rs.getInt("id"));user.setName(rs.getString("name"));user.setSex(rs.getString("sex"));user.setAge(rs.getInt("age"));user.setTelephone(rs.getString("telephone"));user.setSchool(rs.getString("school"));}} catch (Exception e) {}finally{this.closeAll(conn, pstmt, rs);}return user;}@Overridepublic int addUser(User u) {int result= 0;String sql ="insert into userinfo(name,sex,age,"+ "telephone,school) values(?,?,?,?,?)";try {conn = this.getConnection();pstmt = conn.prepareStatement(sql);pstmt.setString(1, u.getName());pstmt.setString(2, u.getSex());pstmt.setInt(3, u.getAge());pstmt.setString(4, u.getTelephone());pstmt.setString(5, u.getSchool());result = pstmt.executeUpdate();if(result!=0){System.out.println("添加了一条消息");}} catch (Exception e) {}finally{this.closeAll(conn, pstmt, rs);}return result;}@Overridepublic int updateUser(User u) {int result = 0;String sql = "update userinfo set name=?,sex=?,age=?,"+ "telephone=?,school=?  where id=" + u.getId();try {conn = this.getConnection();pstmt = conn.prepareStatement(sql);pstmt.setString(1, u.getName());pstmt.setString(2, u.getSex());pstmt.setInt(3, u.getAge());pstmt.setString(4, u.getTelephone());pstmt.setString(5, u.getSchool());result = pstmt.executeUpdate();if(result!=0){System.out.println("修改了一条消息");}} catch (Exception e) {}finally{this.closeAll(conn, pstmt, rs);}return result;}@Overridepublic int deleteUser(int id) {int result = 0;String sql="delete from userinfo where id = ?";try {conn = this.getConnection();pstmt =  conn.prepareStatement(sql);pstmt.setInt(1, id);result = pstmt.executeUpdate();if(result!=0){System.out.println("删除了id为"+ id +"的记录");}} catch (Exception e) {}finally{this.closeAll(conn, pstmt, rs);}return result;}}//Userpublic class User {private int id;private String name;private String sex;private int age;private String telephone;private String school;//geter seter}//struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN""http://struts.apache.org/dtds/struts-2.3.dtd"><struts><package name="default" namespace="/" extends="struts-default"><action name="userToList" class="action.UserAction" method="toList"><result name="toList">/index.jsp</result></action><action name="userToAdd" class="action.UserAction" method="toAdd"><result name="toAdd">/addUser.jsp</result></action><action name="userAdd" class="action.UserAction" method="add"><result name="toList">/index.jsp</result><result name="input">/addUser.jsp</result></action><action name="userToUpdate" class="action.UserAction" method="toUpdate"><result name="toUpdate">/updateUser.jsp</result></action><action name="userUpdate" class="action.UserAction" method="update"><result name="toList">/index.jsp</result></action><action name="userDelete" class="action.UserAction" method="delete"><result name="toList">/index.jsp</result></action><action name="userToDetail" class="action.UserAction" method="toDetail"><result name="toDetail">/detailUser.jsp</result></action></package></struts>//addUser.jsp<div align="center"><h3>添加用户信息</h3><s:form action="userAdd" method="post"><table width="300" border="1" bordercolor="#99CCFF" bgcolor="#FFFFEE"><s:textfield name="user.name" label="姓名"/><s:select label="性别" name="user.sex" list="sexs"/><s:textfield name="user.age" label="年龄"/><s:textfield name="user.telephone" label="电话"/><s:textfield name="user.school" label="学校"/><s:submit value="添加" align="center" /></table></s:form></div>//detailUser.jsp<div align="center"><s:debug></s:debug><h3>显示用户详细信息</h3><s:textfield name="user.id" label="ID号" disabled="true"/><br><br><s:textfield name="user.name" label="姓名" disabled="true"/><br><br><s:textfield name="user.sex" label="性别" disabled="true"/><br><br><s:textfield name="user.age" label="年龄" disabled="true"/><br><br><s:textfield name="user.telephone" label="电话" disabled="true"/><br><br><s:textfield name="user.school" label="学校" disabled="true"/><br><br><a href="userToList">返回</a></div>//index.jsp<div align="center"><h3>用户信息列表</h3><a href="userToList">刷新</a><table width="620"><tr><td align="right"><a href="userToAdd"> 增加用户</a></td></tr></table><table width="640" border="1" align="center" bordercolor="#99CCFF"><tr><td>ID号</td><td>姓名</td><td>性别</td><td>年龄</td><td>电话</td><td>学校</td><td>删除</td><td>修改</td></tr><s:iterator value="list"><tr><td><s:property value="id"/> </td><td><a href="userToDetail?user.id=<s:property value='id'/>"><s:property value="name"/></a> </td><td><s:property value="sex"/> </td><td><s:property value="age"/> </td><td><s:property value="telephone"/> </td><td><s:property value="school"/> </td><td><a href="javascript:if(confirm('确定要删除吗?'))window.location.reload('userDelete?user.id=<s:property value='id'/>')">删除</a></td><td><input type="button" name="Submit" value="修改" onclick="javascript:location.replace('userToUpdate?user.id=<s:property value='id'/>')"/> </td></tr></s:iterator></table></div>//updateUser.jsp<s:form action="userUpdate" method="post"><table width="300" border="1" bordercolor="#99CCFF"><s:textfield name="user.id" label="ID号" disabled="true"></s:textfield><s:textfield name="user.name" label="姓名"></s:textfield><s:select label="性别" name="user.sex" list="sexs"></s:select><s:textfield name="user.age" label="年龄"></s:textfield><s:textfield name="user.telephone" label="电话"></s:textfield><s:textfield name="user.school" label="学校"></s:textfield><s:submit value="修改" align="center" ></s:submit></table></s:form>//sql/*Navicat MySQL Data TransferSource Server         : localhost_3306Source Server Version : 50712Source Host           : localhost:3306Source Database       : userTarget Server Type    : MYSQLTarget Server Version : 50712File Encoding         : 65001Date: 2016-05-18 23:09:00*/SET FOREIGN_KEY_CHECKS=0;-- ------------------------------ Table structure for `userinfo`-- ----------------------------DROP TABLE IF EXISTS `userinfo`;CREATE TABLE `userinfo` (`id` int(5) NOT NULL AUTO_INCREMENT,`name` varchar(10) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`sex` varchar(2) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,`age` int(3) NOT NULL,`telephone` varchar(15) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,`school` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8;-- ------------------------------ Records of userinfo-- ----------------------------INSERT INTO `userinfo` VALUES ('2', '李天', '男', '22', '13022369874', '南开大学');INSERT INTO `userinfo` VALUES ('3', '章然', '女', '22', '15896455286', '北京大学');INSERT INTO `userinfo` VALUES ('4', '李四', '男', '19', '18654356324', '清华大学');INSERT INTO `userinfo` VALUES ('6', '王五', '女', '24', '15626565234', '深圳大学');INSERT INTO `userinfo` VALUES ('7', '赵六', '男', '20', '14534445254', '兰州大学');INSERT INTO `userinfo` VALUES ('16', '猪八', '男', '23', '28292920', '南开大学');INSERT INTO `userinfo` VALUES ('17', '猪八', '男', '23', '28292920', '南开大学');INSERT INTO `userinfo` VALUES ('18', '猪八', '男', '23', '28292920', '南开大学');INSERT INTO `userinfo` VALUES ('19', '晓10', '男', '23', '2131231', '新疆大学');//hibernate//hibernate-core-4.3.9.Final.jar:核心类库//antlr-2.7.7.jar:语言转换工具,实现HQL到SQL//dom4j-1.6.1.jar:是一个Java的XML API//javassist-3.18.1-GA.jar:开源分析,编辑,创建Java字节码的类库//hibernate-commons-annotations-4.0.5.Final.jar:反射代码,用于支持注解//hibernate-jpa-2.1-api-1.0.0.Final.jar:对JPA规范支持//jboss-logging-3.1.3.GA.jar:JBOSS日志框架//jboss-transaction-api_1.2_spec-1.0.0.Final.jar:指定事物,事物处理。分布式事物处理系统标准,java接口
//对象接口含义//(瞬时对象):持久化类的没有与Session相关联的实例//(持久化对象):带有持久化状态、具有业务功能的单线程对象//SessionFactory接口:生成Session工厂,负责创建Session对象,需要使用ConnectionProvider//Session接口:用于执行被持久化对象的CRUD操作,Session对象非线程安全//TransactionFactory接口:生成Transaction工厂//Transaction接口:用来指定原子操作单元范围对象。他通过抽象将应用底层具体的JDBC、JTA以及CORBA事务隔离开//ConnectionProvider:生成JDBC的工厂。他通过抽象将应用从底层的Datasource或DriverManager分离
//主键生成器策略//increment:对象标识符由Hibernate递增方式生成,如果有多个应用实例向同一张表插入数据时,会出现重复//identity:对象标识符由底层数据库的自增主键生成,要求数据库底层支持//sequence:对象标识符由底层数据库生成,要求支持序列//hilo:对象标识符由Hibernate按照高低位算法生成,默认选用hibernate_unique_key表next_hi,算法生成的标识符仅一个定的数据库中唯一//native:根据底层数据库对自动生成标识符的支持能力,选择identity、sequence或hilo适合跨数据库平台开发//assigned:对象标识符由应用程序产生,如果不指定<generator>节点,默认使用该生成器策略
//Hibernate对象3种状态,瞬时态、持久态,脱管态;
//持久态的对象也称PO,瞬时对象和脱管对象也称VO
//能使Hibernate对象由瞬时态或托管态转变为持久态的方法://save():将对象由瞬时态转变为持久态//load()或get():获得的对象的状态处于持久态//find():获得的List集合中的对象状态处于持久态//update()、saveOrUpdate()和lock()方法:可将托管态对象转变为持久态
//能使Hibernate对象由持久态转变为瞬时态的方法//close():调用后Session的缓存会被清空,缓存中所有持久态对象状态都转变为托管态//evict():可将Session缓存中一个指定的持久态对象删除,使其转变为托管态对象
//hiberate初步
srcentityUsers.javaUsers.hbm.xmlmainHibernateSessionFactory.javaTestAddUser.javaTestDelete.javaTestUpdate.javaTestUser.javahibernate.cfg.xml//Userspublic class Users implements Serializable {private static final long serialVersionUID = 1L;private Integer id;private String loginName;private String loginPwd;private String name;private String address;private String phone;private String mail;//geter seter方法}//Users.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-18 23:20:25 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Users" table="users" ><id name="id" type="java.lang.Integer"><column name="Id" /><generator class="native" /></id><property name="loginName" type="java.lang.String"><column name="LoginName" length="50" /></property><property name="loginPwd" type="java.lang.String"><column name="LoginPwd" length="16" /></property><property name="name" type="java.lang.String"><column name="Name" /></property><property name="address" type="java.lang.String"><column name="Address" /></property><property name="phone" type="java.lang.String"><column name="Phone" /></property><property name="mail" type="java.lang.String"><column name="Mail" /></property></class></hibernate-mapping>//HibernateSessionFactory.javapublic class HibernateSessionFactory {private static String CONFIG_FILE_LOCATION = "/hibernate.cfg.xml";private static final ThreadLocal<Session> sessionThreadLocal =new ThreadLocal<Session>();private static Configuration configuration = new Configuration();private static SessionFactory sessionFactory;private static String configFile = CONFIG_FILE_LOCATION;static{try {configuration.configure();ServiceRegistry buildServiceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();sessionFactory = configuration.buildSessionFactory(buildServiceRegistry);} catch (Exception e) {}}private HibernateSessionFactory(){}private static void rebuildSessionFactory(){synchronized (sessionFactory) {try{configuration.configure(configFile);ServiceRegistry buildServiceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();SessionFactory buildSessionFactory = configuration.buildSessionFactory(buildServiceRegistry);}catch(Exception e){}}}public static Session getSession(){Session session = (Session)sessionThreadLocal.get();try{if(session == null || !session.isOpen()){if(sessionFactory == null){rebuildSessionFactory();}}session = (sessionFactory!=null)?sessionFactory.openSession():null;sessionThreadLocal.set(session);}catch(Exception e){}return session;}public static void closeSession(){Session session = (Session)sessionThreadLocal.get();sessionThreadLocal.set(null);try{if(session != null || session.isOpen()){session.close();}session = (sessionFactory!=null)?sessionFactory.openSession():null;sessionThreadLocal.set(session);}catch(Exception e){}}public static void setConfigFile(String configFile){HibernateSessionFactory.configFile = configFile;sessionFactory = null;}public static Configuration getConfiguration(){return configuration;}}//TestAddUserpublic class TestAddUser {public static void main(String[] args) {new TestAddUser().addUser();}private void addUser() {Users user = new Users();user.setLoginName("zhangsan");user.setLoginPwd("123456");user.setName("张三");user.setAddress("江苏南京");user.setPhone("123456789");user.setMail("123456@qq.com");Session session = HibernateSessionFactory.getSession();Transaction tx = null;try {tx= session.beginTransaction();session.save(user);tx.commit();} catch (Exception e) {if(tx!=null){tx.rollback();}}finally{HibernateSessionFactory.closeSession();}}}//TestDeletepublic class TestDelete {public static void main(String[] args) {new TestDelete().testDelete(3);}private void testDelete(int i) {Session session = HibernateSessionFactory.getSession();Transaction tx = null;Users user = (Users) session.get(Users.class, i);try {tx = session.beginTransaction();session.delete(user);tx.commit();} catch (Exception e) {if (tx != null) {tx.rollback();}} finally {HibernateSessionFactory.closeSession();}}}//TestUpdatepublic class TestUpdate {public static void main(String[] args) {new TestUpdate().testUpdate(3);}private void testUpdate(int i){Session session = HibernateSessionFactory.getSession();Transaction tx = null;Users user = (Users) session.get(Users.class,i);user.setLoginName("popopo");try {tx= session.beginTransaction();session.update(user);tx.commit();} catch (Exception e) {if(tx!=null){tx.rollback();}}finally{HibernateSessionFactory.closeSession();}}}//TestUserpublic class TestUser {@Testpublic void testGet(){new TestUser().getUserById(2);}@Testpublic void testLoad(){new TestUser().loadUserById(1);}private void loadUserById(int i) {Session session = HibernateSessionFactory.getSession();Users user = (Users) session.load(Users.class, i);System.out.println(user.getLoginName()+"住在"+user.getAddress());HibernateSessionFactory.closeSession();}private void getUserById(int i) {Session session = HibernateSessionFactory.getSession();Users user = (Users) session.get(Users.class, i);System.out.println(user.getLoginName()+"住在"+user.getAddress());HibernateSessionFactory.closeSession();}}//    hibernate.cfg.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 数据库基本信息 --><property name="connection.username">root</property><property name="connection.password">root</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql:///bookshop?auseUnicode=true&amp;characterEncoding=utf8</property><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 执行操作时是否在控制台打印SQL --><property name="show_sql">true</property><!-- 是否对SQL进行格式化 --><property name="format_sql">true</property><!-- 自动生成数据表策略 --><property name="hbm2ddl.auto">update</property><!-- 指定关联的hbm.xml文件 --><mapping resource="entity/Users.hbm.xml"/></session-factory></hibernate-configuration>//注解//在cfg.xml中添加<!-- 指定关联的class文件 --><mapping class="entity.Users"/>//在实体类中加入注解(注意persistence包下)@Entity@Table(name="users",catalog="bookshop")@Id@GeneratedValue@Column(name="Id", unique=true,nullable=false)//省略其他//注解含义//Entity:标识当前是实体BEAN,需要持久化//Table:实现数据表与持久化映射,catalog数据库名,name表名//Id:持久类的Id属性,与@GeneratedValue配合使用//GeneratedValue:指定ID表示生成器//Column:指定属性对应的数据库表中的字段,name字段名,unique指定是否唯一,nullable指定是否可为Null//Hibernate的关系映射//懒加载:延迟加载需要等到访问时才加载指定对象,如果Session实例关闭之前没有加载关联对象,Session关闭后再访问时,//就会抛出LazyInitializationException(懒加载异常),需要在<many-to-one>设置lazy属性//单向多对一public class Books {public int Id;public String Title;public String Author;public Publishers publishers;public String PublisherDate;public String ISBN;public String WordsCount;public String UnitPrice;public String ContentDescription;//geter seter toString}public class Publishers {public int Id;public String Name;//geter、seter toString}//hbm.xml省略//注意在Books.hbm.xml添加多对一映射<many-to-one name="publishers" column="PUBLISHERID" class="entity.Publishers" lazy="false" />//BaseHibernateDAOpublic class BaseHibernateDAO {protected void add(Object object){Transaction tran=null;Session session=HibernateSessionFactory.getSession();try{tran=session.beginTransaction();session.save(object);tran.commit();}catch (Exception e) {if(tran!=null){tran.rollback();}e.printStackTrace();}finally{HibernateSessionFactory.closeSession();}        }       protected Object get(Class cla,Serializable id){Object object=null;Session session=HibernateSessionFactory.getSession();try{object=session.get(cla, id);}catch (Exception e) {e.printStackTrace();}finally{HibernateSessionFactory.closeSession();}return object;}       protected void delete(Object object){Transaction tran=null;Session session=HibernateSessionFactory.getSession();try{tran=session.beginTransaction();session.delete(object);tran.commit();}catch (Exception e) {if(tran!=null){tran.rollback();}e.printStackTrace();}finally{HibernateSessionFactory.closeSession();}}       protected void update(Object object){Transaction tran=null;Session session=HibernateSessionFactory.getSession();try{tran=session.beginTransaction();session.update(object);tran.commit();}catch (Exception e) {if(tran!=null){tran.rollback();}e.printStackTrace();}finally{HibernateSessionFactory.closeSession();}}protected List search(Class cla,Object condition){Session session=null;List list=null;try {session=HibernateSessionFactory.getSession();        list=session.createCriteria(cla).add(Example.create(condition)).list();} catch (Exception e) {e.printStackTrace();} finally{HibernateSessionFactory.closeSession();}return list;   }}//TestManyToOnepublic class TestManyToOne extends BaseHibernateDAO  {public static void main(String[] args) {TestManyToOne testManyToOne = new TestManyToOne();testManyToOne.testManyToOne();}public void testManyToOne(){Books books = (Books)get(Books.class, 1);System.out.println(books.toString());}}//单向一对多//修改Publisherspublic class Publishers {public int Id;public String Name;public Set bks = new HashSet();//geter seter tostring}//修改Publishers.hbm.xml<set name="bks" lazy="false"><key column="PUBLISHERID"/><one-to-many class="entity.Books" /></set>//TestOneToManypublic class TestOneToMany extends BaseHibernateDAO {public static void main(String[] args) {new TestOneToMany().testOneToMany();}public void testOneToMany(){Publishers publishers = (Publishers)get(Publishers.class, 1);System.out.println(publishers.toString());Iterator iterator = publishers.getBks().iterator();while (iterator.hasNext()) {Books books = (Books)iterator.next();System.out.println(books.toString());}}}//双向多对一(建议交给多的一方管理)//单向一对多和单向多对一,两者结合起来,形成了双向关联,双向多对一也称双向一对多//cascade属性值//all:所有情况下都进行级联操作//none:所有情况下不进行级联操作//save-update:save或者update时进行级联操作//delete:delete时进行级联操作public class Publishers {public int Id;public String Name;public Set bks = new HashSet();//geter、seter tostring}public class Books {public int Id;public String Title;public String Author;public Publishers publishers;public String PublisherDate;public String ISBN;public String WordsCount;public String UnitPrice;public String ContentDescription;//geter、seter tostring}//Books.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-30 4:52:45 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Books" table="books"><id name="Id" type="int"><column name="ID" /><generator class="native" /></id><property name="Title" type="java.lang.String"><column name="TITLE" /></property><property name="Author" type="java.lang.String"><column name="AUTHOR" /></property><property name="PublisherDate" type="java.lang.String"><column name="PUBLISHERDATE" /></property><property name="ISBN" type="java.lang.String"><column name="ISBN" /></property><property name="WordsCount" type="java.lang.String"><column name="WORDSCOUNT" /></property><property name="UnitPrice" type="java.lang.String"><column name="UNITPRICE" /></property><property name="ContentDescription" type="java.lang.String"><column name="CONTENTDESCRIPTION" /></property><many-to-one name="publishers" column="PUBLISHERID" class="entity.Publishers" lazy="false" cascade="save-update" insert="true" update="true" not-null="true"/></class></hibernate-mapping>   //Publishers.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-30 4:52:45 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Publishers" table="publishers"><id name="Id" type="int"><column name="ID" /><generator class="native" /></id><property name="Name" type="java.lang.String"><column name="NAME" /></property><set name="bks" lazy="false" cascade="all" inverse="true"><key column="PUBLISHERID" not-null="true"/><one-to-many class="entity.Books" /></set></class></hibernate-mapping>//BaseHibernateDAOpublic class BaseHibernateDAO {protected void add(Object object){Transaction tran=null;Session session=HibernateSessionFactory.getSession();try{tran=session.beginTransaction();session.save(object);tran.commit();}catch (Exception e) {if(tran!=null){tran.rollback();}e.printStackTrace();}finally{HibernateSessionFactory.closeSession();}     }       protected Object get(Class cla,Serializable id){Object object=null;Session session=HibernateSessionFactory.getSession();try{object=session.get(cla, id);}catch (Exception e) {e.printStackTrace();}finally{HibernateSessionFactory.closeSession();}return object;}       protected void delete(Object object){Transaction tran=null;Session session=HibernateSessionFactory.getSession();try{tran=session.beginTransaction();session.delete(object);tran.commit();}catch (Exception e) {if(tran!=null){tran.rollback();}e.printStackTrace();}finally{HibernateSessionFactory.closeSession();}}       protected void update(Object object){Transaction tran=null;Session session=HibernateSessionFactory.getSession();try{tran=session.beginTransaction();session.update(object);tran.commit();}catch (Exception e) {if(tran!=null){tran.rollback();}e.printStackTrace();}finally{HibernateSessionFactory.closeSession();}}protected List search(Class cla,Object condition){Session session=null;List list=null;try {session=HibernateSessionFactory.getSession();        list=session.createCriteria(cla).add(Example.create(condition)).list();} catch (Exception e) {e.printStackTrace();} finally{HibernateSessionFactory.closeSession();}return list;   }}//TestM2OAndO2Mpublic class TestM2OAndO2M extends BaseHibernateDAO{@Testpublic void testAdd_4(){Publishers publishers = new Publishers();publishers.setName("高等教育出版社");Books books = new Books();books.setTitle("通信研究");books.setAuthor("王金龙");Books books2 = new Books();books2.setTitle("脉冲系统");books2.setAuthor("耿茂洋");books.setPublishers(publishers);books2.setPublishers(publishers);add(books);add(books2);}@Test//删除多的一方public void testDelete(){Books books = (Books)get(Books.class,6);delete(books);}@Test//删除一的一方//必须将以的一方cascade属性设置allpublic void testDelete_1(){Publishers publishers = (Publishers)get(Publishers.class, 13);delete(publishers);}@Testpublic void testUpdate(){Books books = (Books)get(Books.class, 1);Publishers publishers = (Publishers)get(Publishers.class, 1);Publishers publishers1 = (Publishers)get(Publishers.class, 3);publishers.getBks().remove(books);publishers1.getBks().add(books);books.setPublishers(publishers1);update(books);}}//hibernate.cfg.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hibernate-configuration PUBLIC"-//Hibernate/Hibernate Configuration DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!-- 数据库基本信息 --><property name="connection.username">root</property><property name="connection.password">root</property><property name="connection.driver_class">com.mysql.jdbc.Driver</property><property name="connection.url">jdbc:mysql:///bookshop?auseUnicode=true&amp;characterEncoding=utf8</property><property name="dialect">org.hibernate.dialect.MySQLDialect</property><!-- 执行操作时是否在控制台打印SQL --><property name="show_sql">true</property><!-- 自动生成数据表策略 --><property name="hbm2ddl.auto">update</property><!-- 指定关联的hbm.xml文件 --><mapping resource="entity/Books.hbm.xml"/><mapping resource="entity/Publishers.hbm.xml"/></session-factory></hibernate-configuration>//双向一对一//基于外键public class Identitycard {private Integer id;private String cardNo;private People people;//geter、seter }public class People {private Integer id;private String name;private String sex;private Integer age;private Identitycard identitycard;//geter seter}//Identitycard.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-30 13:50:46 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Identitycard" table="identitycard"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="cardNo" type="java.lang.String"><column name="CARDNO" /></property><one-to-one name="people" class="entity.People" property-ref="identitycard"lazy="false"/></class></hibernate-mapping>//People.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-30 13:50:46 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.People" table="people"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="name" type="java.lang.String"><column name="NAME" /></property><property name="sex" type="java.lang.String"><column name="SEX" /></property><property name="age" type="java.lang.Integer"><column name="AGE" /></property><many-to-one name="identitycard" class="entity.Identitycard"column="CARDID" cascade="all" unique="true" lazy="false" /></class></hibernate-mapping>//TestOne20neBasedFkpublic class TestOne20neBasedFk extends BaseHibernateDAO {@Testpublic void getPeopleById(){People people = (People)get(People.class, 1);System.out.println(people.getName()+"---"+people.getIdentitycard().getCardNo());}@Testpublic void getIdentityCardById(){Identitycard identitycard  = (Identitycard)get(Identitycard.class, 1);System.out.println(identitycard.getCardNo()+"---"+identitycard.getPeople().getName());}@Testpublic void addPeople(){People people = new People();Identitycard identitycard = new Identitycard();people.setName("TOM");people.setAge(30);people.setSex("男");people.setIdentitycard(identitycard);identitycard.setCardNo("456789");identitycard.setPeople(people);add(people);}@Testpublic void deletePeopleById(){People people = (People)get(People.class, 2);delete(people);}}//基于主键public class IdentitycardZj {private Integer id;private String cardNo;private PeopleZj peopleZj;//geter seter tostring}public class PeopleZj {private Integer id;private String name;private String sex;private Integer age;private IdentitycardZj identitycardZj;//geter seter tostring }//IdentitycardZj.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-31 11:53:22 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.IdentitycardZj" table="IDENTITYCARDZJ"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="cardNo" type="java.lang.String"><column name="CARDNO" /></property><one-to-one name="peopleZj" class="entity.PeopleZj" lazy="false" cascade="all"/></class></hibernate-mapping>//PeopleZj.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-31 11:53:22 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.PeopleZj" table="PEOPLEZJ"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native"></generator></id><property name="name" type="java.lang.String"><column name="NAME" /></property><property name="sex" type="java.lang.String"><column name="SEX" /></property><property name="age" type="java.lang.Integer"><column name="AGE" /></property><one-to-one name="identitycardZj" class="entity.IdentitycardZj"constrained="true" lazy="false"/></class></hibernate-mapping>//TestOne20neBasedPkpublic class TestOne20neBasedPk extends BaseHibernateDAO {@Testpublic void getPeopleZjById(){PeopleZj peoPleZj = (PeopleZj)get(PeopleZj.class, 1);System.out.println(peoPleZj.getName()+"---"+peoPleZj.getIdentitycardZj().getCardNo());}@Testpublic void addPeopleZj(){PeopleZj peopleZj = new PeopleZj();IdentitycardZj identitycardZj = new IdentitycardZj();identitycardZj.setCardNo("456789");peopleZj.setName("carry");peopleZj.setAge(30);peopleZj.setSex("男");peopleZj.setIdentitycardZj(identitycardZj);identitycardZj.setPeopleZj(peopleZj);add(identitycardZj);}@Testpublic void deleteIdentitycardZjById(){IdentitycardZj identitycardZj = (IdentitycardZj)get(IdentitycardZj.class, 1);delete(identitycardZj);}}//多对多public class Course {private Integer courseId;private String courseName;private Set students = new HashSet();//geter seter tostring}public class Student {private Integer studentId;private String studentName;private Set courses = new HashSet();//geter seter tostring}//Course.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-31 16:27:20 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Course" table="COURSE"><id name="courseId" type="java.lang.Integer"><column name="COURSEID" /><generator class="native" /></id><property name="courseName" type="java.lang.String"><column name="COURSENAME" /></property><set name="students" table="sc" inverse="true" lazy="false"><key><column name="CID" not-null="true"/></key><many-to-many column="SID" class="entity.Student" /></set></class></hibernate-mapping>//Student.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-5-31 16:27:20 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Student" table="STUDENT"><id name="studentId" type="java.lang.Integer"><column name="STUDENTID" /><generator class="native" /></id><property name="studentName" type="java.lang.String"><column name="STUDENTNAME" /></property><set name="courses" table="sc" inverse="false" lazy="false" cascade="save-update"><key><column name="SID" not-null="true"/></key><many-to-many column="CID" class="entity.Course"/></set></class></hibernate-mapping>//TestManyToManypublic class TestManyToMany extends BaseHibernateDAO{@Testpublic void testAdd_1(){Student s1 = new Student();s1.setStudentName("韦小宝");Student s2 = new Student();s2.setStudentName("令狐冲");Course c1 = new Course();c1.setCourseName("数据结构");Course c2 = new Course();c2.setCourseName("操作系统");Course c3 = new Course();c3.setCourseName("计算机组成原理");Course c4 = new Course();c4.setCourseName("离散数学");s1.getCourses().add(c1);s1.getCourses().add(c2);s2.getCourses().add(c1);s2.getCourses().add(c3);s2.getCourses().add(c4);add(s1);add(s2);}@Testpublic void testAdd_2(){Student s1 = new Student();s1.setStudentName("东方不败");Course c = (Course)get(Course.class, 10);s1.getCourses().add(c);add(s1);}@Testpublic void testAdd_3(){Student s1 = (Student)get(Student.class, 10);Student s2 = (Student)get(Student.class, 12);Course c1 = new Course();c1.setCourseName("编程原理");s1.getCourses().add(c1);s2.getCourses().add(c1);update(s1);update(s2);}@Testpublic void testDelete_1(){Student student = (Student)get(Student.class,12);Iterator courses = student.getCourses().iterator();while (courses.hasNext()) {Course course = (Course) courses.next();course.getStudents().remove(student);}delete(student);}}//注解//一对一双向//IdentitycardZj@Entity@Table(name = "identitycard_zj", catalog = "bookshop")public class IdentitycardZj implements java.io.Serializable {private Integer id;private String cardNo;private PeopleZj peopleZj;      public IdentitycardZj() {}public IdentitycardZj(String cardNo) {this.cardNo = cardNo;}@Id@GeneratedValue@Column(name = "Id", unique = true, nullable = false)public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}@Column(name = "CardNo", length = 18)public String getCardNo() {return this.cardNo;}public void setCardNo(String cardNo) {this.cardNo = cardNo;}@OneToOne(cascade=CascadeType.ALL)@PrimaryKeyJoinColumnpublic PeopleZj getPeopleZj() {return peopleZj;}public void setPeopleZj(PeopleZj peopleZj) {this.peopleZj = peopleZj;}}//PeopleZj@Entity@Table(name = "people_zj", catalog = "bookshop")public class PeopleZj implements java.io.Serializable {private Integer id;private String name;private String sex;private Integer age;private IdentitycardZj identitycardZj;public PeopleZj() {}public PeopleZj(String name, String sex, Integer age) {this.name = name;this.sex = sex;this.age = age;}@GenericGenerator(name = "generator", strategy = "foreign",parameters=@Parameter(name="property",value="identitycardZj"))@Id@GeneratedValue(generator = "generator")@Column(name = "Id", unique = true, nullable = false)public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}@Column(name = "Name", length = 10)public String getName() {return this.name;}public void setName(String name) {this.name = name;}@Column(name = "Sex", length = 4)public String getSex() {return this.sex;}public void setSex(String sex) {this.sex = sex;}@Column(name = "Age")public Integer getAge() {return this.age;}public void setAge(Integer age) {this.age = age;}@OneToOne(mappedBy="peopleZj",optional=false)public IdentitycardZj getIdentitycardZj() {return identitycardZj;}public void setIdentitycardZj(IdentitycardZj identitycardZj) {this.identitycardZj = identitycardZj;}}//多对多双向//Course@Entity@Table(name = "course", catalog = "bookshop")public class Course implements java.io.Serializable {private Integer courseId;private String courseName;private Set<Student> students=new HashSet<Student>();     public Course() {}public Course(String courseName) {this.courseName = courseName;}@Id@GeneratedValue@Column(name = "CourseId", unique = true, nullable = false)public Integer getCourseId() {return this.courseId;}public void setCourseId(Integer courseId) {this.courseId = courseId;}@Column(name = "CourseName", length = 16)public String getCourseName() {return this.courseName;}public void setCourseName(String courseName) {this.courseName = courseName;}@ManyToMany(mappedBy="courses",fetch=FetchType.EAGER)public Set<Student> getStudents() {return students;}public void setStudents(Set<Student> students) {this.students = students;}}//Student@Entity@Table(name = "student", catalog = "bookshop")public class Student implements java.io.Serializable {private Integer studentId;private String studentName; private Set<Course> courses=new HashSet<Course>(); public Student() {}public Student(String studentName) {this.studentName = studentName;}@Id@GeneratedValue@Column(name = "StudentId", unique = true, nullable = false)public Integer getStudentId() {return this.studentId;}public void setStudentId(Integer studentId) {this.studentId = studentId;}@Column(name = "StudentName", length = 16)public String getStudentName() {return this.studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}@ManyToMany(fetch=FetchType.EAGER)@Cascade(value={CascadeType.SAVE_UPDATE}) @JoinTable(name="sc",joinColumns={@JoinColumn(name="Sid")},inverseJoinColumns={@JoinColumn(name="Cid")})public Set<Course> getCourses() {return courses;}public void setCourses(Set<Course> courses) {this.courses = courses;}}//多对一双向//Books@Entity@Table(name = "books", catalog = "bookshop")public class Books implements java.io.Serializable {private Integer id;private String title;private String author;    private Integer unitPrice;  private Publishers publishers;  @ManyToOne(fetch=FetchType.EAGER)@Cascade(value={CascadeType.SAVE_UPDATE}) @JoinColumn(name="PublisherId")public Publishers getPublishers() {return publishers;}public void setPublishers(Publishers publishers) {this.publishers = publishers;}public Books() {}public Books(String title, String author, Integer publisherId) {this.title = title;this.author = author;        }public Books(String title, String author, Integer publisherId,Integer unitPrice) {this.title = title;this.author = author;       this.unitPrice = unitPrice;}@Id@GeneratedValue@Column(name = "Id", unique = true, nullable = false)public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}@Column(name = "Title", nullable = false, length = 50)public String getTitle() {return this.title;}public void setTitle(String title) {this.title = title;}@Column(name = "Author", nullable = false, length = 16)public String getAuthor() {return this.author;}public void setAuthor(String author) {this.author = author;}@Column(name = "UnitPrice", precision = 8, scale = 0)public Integer getUnitPrice() {return this.unitPrice;}public void setUnitPrice(Integer unitPrice) {this.unitPrice = unitPrice;}}//Publishers@Entity@Table(name = "publishers", catalog = "bookshop")public class Publishers implements java.io.Serializable {private Integer id;private String name;private Set<Books> bks=new HashSet<Books>();@OneToMany(mappedBy="publishers",fetch=FetchType.EAGER)@Cascade(value={CascadeType.DELETE}) public Set<Books> getBks() {return bks;}public void setBks(Set<Books> bks) {this.bks = bks;}public Publishers() {}public Publishers(String name) {this.name = name;}@Id@GeneratedValue@Column(name = "Id", unique = true, nullable = false)public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}@Column(name = "Name", nullable = false, length = 16)public String getName() {return this.name;}public void setName(String name) {this.name = name;}}
//hibernate检索方式//HQL:官方推荐的查询语言//QBC:Hibernate提供的接口//HQL查询与JDBC查询相比://直接征地实体类和属性查询,不用写sql//查询结果是直接保存在LIST中的对象,不用再次封装//可以通过配置dialect属性,对不同数据库自动生成不同的用于执行的SQL语句//hibernate提供HQL最为广泛,主要功能//支持属性查询//支持参数查询//支持关联查询//支持分页查询//提供内置聚集函数//基本查询public class TestHQL {/** 1-8sqlCREATE TABLE `books` (`BOOKID` int(11) NOT NULL AUTO_INCREMENT,`BOOKNAME` varchar(255) DEFAULT NULL,`BOOKAUTHOR` varchar(255) DEFAULT NULL,`BOOKPRICE` varchar(255) DEFAULT NULL,PRIMARY KEY (`BOOKID`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;-- ------------------------------ Records of books-- ----------------------------INSERT INTO `books` VALUES ('1', 'JAVA入门', 'TOM', '100');INSERT INTO `books` VALUES ('2', 'PHP入门', 'MARY', '120');INSERT INTO `books` VALUES ('3', 'Hibernate入门', 'TOM', '115');*实体类*public class Books {private Integer bookId;private String bookName;private String bookAuthor;private String bookprice;//seter geter 注意构造方法}*///查询所有图书对象@Testpublic void testHql_1(){Session session = HibernateSessionFactory.getSession();String hql = "from Books";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books books = (Books) iterator.next();System.out.println(books.getBookName()+"-"+books.getBookAuthor()+"-"+books.getBookprice());}}//对查询结果进行排序@Testpublic void testHql_2(){Session session = HibernateSessionFactory.getSession();String hql = "from Books as b order by b.bookprice desc";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books books = (Books) iterator.next();System.out.println(books.getBookName()+"-"+books.getBookAuthor()+"-"+books.getBookprice());}}//检索图书对象的部分属性@Testpublic void testHql_3(){Session session = HibernateSessionFactory.getSession();String hql = "select b.bookName,b.bookAuthor from Books as b";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object[] object = (Object[]) iterator.next();System.out.println(object[0]+"-"+object[1]);}}//聚集函数@Testpublic void testHql_4(){Session session = HibernateSessionFactory.getSession();//统计所有书String hql = "select count(b) from Books as b";Query createQuery = session.createQuery(hql);Long count = (Long) createQuery.uniqueResult();//统计书的平均金额String hql1 = "select avg(b.bookprice) from Books as b";Query createQuery1 = session.createQuery(hql1);Double money = (Double) createQuery1.uniqueResult();//统计最贵和最便宜的图书String hql2 = "select min(b.bookprice),max(b.bookprice) from Books as b";Query createQuery2 = session.createQuery(hql2);Object[] price = (Object[]) createQuery2.uniqueResult();System.out.println("记录总数"+count.toString()+"平均金额"+money.toString()+"书价最低为"+price[0].toString()+"书价最高为"+price[1].toString());}//分组查询@Testpublic void testHql_5(){Session session = HibernateSessionFactory.getSession();String hql = "select b.bookAuthor,count(*) from Books as b group by "+ "b.bookAuthor";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object[] object = (Object[]) iterator.next();System.out.println("图书作者:"+object[0]+"  图书总数:"+object[1]);}}//动态实例查询@Testpublic void testHql_6(){Session session = HibernateSessionFactory.getSession();String hql = "select new Books(b.bookName,b.bookAuthor)  from Books as b ";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books books = (Books) iterator.next();System.out.println(books.getBookName()+"  "+books.getBookAuthor());}}//分页查询@Testpublic void testHql_7(){Session session = HibernateSessionFactory.getSession();//升序String hql = "from Books as b order by b.bookName asc";Query createQuery = session.createQuery(hql);//从第一个对象开始createQuery.setFirstResult(0);//从查询结果中一次返回3个对象createQuery.setMaxResults(3);//执行查询List list = createQuery.list();//遍历查询结果Iterator iterator = list.iterator();while (iterator.hasNext()) {Books books = (Books) iterator.next();System.out.println(books.getBookName()+"  "+books.getBookAuthor()+"  "+books.getBookprice());}}/*public void testHql_7(int pageIndex,int pageSize){Session session = HibernateSessionFactory.getSession();//升序String hql = "from Books as b order by b.bookName asc";Query createQuery = session.createQuery(hql);int startIndex = (pageIndex-1)*pageSize;createQuery.setFirstResult(startIndex);createQuery.setMaxResults(pageSize);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books books = (Books) iterator.next();System.out.println(books.getBookName()+"  "+books.getBookAuthor()+"  "+books.getBookprice());}}*///条件查询/*按参数位置*/@Testpublic void testHql_8(){Session session = HibernateSessionFactory.getSession();String hql = "from Books books where books.bookName like ?";Query createQuery = session.createQuery(hql);createQuery.setString(0, "%JAVA%");List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books books = (Books) iterator.next();System.out.println(books.getBookName()+"  "+books.getBookAuthor());}}/**setString:映射类型为字符串的参数赋值*setDate:映射类型为Date的参数赋值*setDouble:映射类型为double的参数赋值*setBoolean:映射类型为boolean的参数赋值*setInteger:映射类型为int的参数赋值*setTime:映射类型为Date的参数赋值*//*testHql_10-testHql_18INSERT INTO `books` VALUES ('1', '(美)Stanley B。', 'C++ Primer中文版', '56', '2');INSERT INTO `books` VALUES ('2', '(美)瓦格纳 著', 'Effective C# 中', '45', '2');INSERT INTO `books` VALUES ('3', '(美)克尼汉', 'C程序设计语言', '30', '3');INSERT INTO `publishers` VALUES ('1', '清华大学出版社');INSERT INTO `publishers` VALUES ('2', '人民邮电出版社');INSERT INTO `publishers` VALUES ('3', '机械工业出版社');*///Books@Entity@Table(name = "books", catalog = "bookshop")public class Books implements java.io.Serializable {private Integer id;private String title;private String author;   private Integer unitPrice;  private Publishers publishers;  @ManyToOne(fetch=FetchType.EAGER)@Cascade(value={CascadeType.SAVE_UPDATE}) @JoinColumn(name="PublisherId")public Publishers getPublishers() {return publishers;}public void setPublishers(Publishers publishers) {this.publishers = publishers;}public Books() {}public Books(String title, String author, Integer publisherId) {this.title = title;this.author = author;        }public Books(String title, String author, Integer publisherId,Integer unitPrice) {this.title = title;this.author = author;       this.unitPrice = unitPrice;}@Id@GeneratedValue@Column(name = "Id", unique = true, nullable = false)public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}@Column(name = "Title", nullable = false, length = 50)public String getTitle() {return this.title;}public void setTitle(String title) {this.title = title;}@Column(name = "Author", nullable = false, length = 16)public String getAuthor() {return this.author;}public void setAuthor(String author) {this.author = author;}@Column(name = "UnitPrice", precision = 8, scale = 0)public Integer getUnitPrice() {return this.unitPrice;}public void setUnitPrice(Integer unitPrice) {this.unitPrice = unitPrice;}}//Publishers@Entity@Table(name = "publishers", catalog = "bookshop")public class Publishers implements java.io.Serializable {private Integer id;private String name;private Set<Books> bks=new HashSet<Books>();@OneToMany(mappedBy="publishers",fetch=FetchType.EAGER)@Cascade(value={CascadeType.DELETE}) public Set<Books> getBks() {return bks;}public void setBks(Set<Books> bks) {this.bks = bks;}public Publishers() {}public Publishers(String name) {this.name = name;}@Id@GeneratedValue@Column(name = "Id", unique = true, nullable = false)public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}@Column(name = "Name", nullable = false, length = 16)public String getName() {return this.name;}public void setName(String name) {this.name = name;}}    //内连接@Testpublic void testHql_10(){Session session = HibernateSessionFactory.getSession();//String hql = "from Books b inner join b.publishers p where p.name='清华大学出版社'";String hql = "select b from Books b inner join b.publishers p where p.name='清华大学出版社'";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object[] obj = (Object[]) iterator.next();Books book = (Books)obj[0];Publishers publisher = (Publishers) obj[1];System.out.println("书名:"+book.getTitle()+"作者:"+book.getAuthor()+"单价:"+book.getUnitPrice()+"出版社:"+publisher.getName());}}//隐身内连接@Testpublic void testHql_11(){Session session = HibernateSessionFactory.getSession();String hql = "select b from Books b,Publishers p where"+ " b.publishers=p and p.name='清华大学出版社'";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books book = (Books) iterator.next();System.out.println("书名:"+book.getTitle()+"作者:"+book.getAuthor()+"单价:"+book.getUnitPrice());}}//左外连接@Testpublic void testHql_12(){Session session = HibernateSessionFactory.getSession();String hql = "from Books b left join b.publishers p where p.name='清华大学出版社'";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object[] obj = (Object[]) iterator.next();Books book = (Books)obj[0];Publishers publisher = (Publishers) obj[1];System.out.println("书名:"+book.getTitle()+"作者:"+book.getAuthor()+"单价:"+book.getUnitPrice()+"出版社:"+publisher.getName());}}//左外连接@Testpublic void testHql_13(){Session session = HibernateSessionFactory.getSession();String hql = "from Books b right join b.publishers p where p.name='清华大学出版社'";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object[] obj = (Object[]) iterator.next();Books book = (Books)obj[0];Publishers publisher = (Publishers) obj[1];System.out.println("书名:"+book.getTitle()+"作者:"+book.getAuthor()+"单价:"+book.getUnitPrice()+"出版社:"+publisher.getName());}}//交叉连接:相互之间毫无关系的对象@Testpublic void testHql_14(){Session session = HibernateSessionFactory.getSession();String hql = "from Books b,Publishers p where p.id=b.id";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object[] obj = (Object[]) iterator.next();Books book = (Books)obj[0];Publishers publisher = (Publishers) obj[1];System.out.println("书名:"+book.getTitle()+"作者:"+book.getAuthor()+"单价:"+book.getUnitPrice()+"出版社:"+publisher.getName());}}//相关子查询@Testpublic void testHql_15(){Session session = HibernateSessionFactory.getSession();String hql = "from Publishers p where (select count(*) from p.bks)>1";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Publishers publisher = (Publishers) iterator.next();System.out.println("出版社:"+publisher.getName()+"   图书数量:"+publisher.getBks().size());}}//无关子查询@Testpublic void testHql_16(){Session session = HibernateSessionFactory.getSession();String hql = "from Books b where b.unitPrice<(select avg(b1.unitPrice) from Books b1)";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books book = (Books) iterator.next();System.out.println("书名:"+book.getTitle()+"  单价:"+book.getUnitPrice());}}//与子查询相关的关键字/*all:子查询语句返回的所有记录any:子查询语句返回的任意一条记录some:any关键字相同in:是否出现子查询返回的所有记录exists:子查询是否至少返回一条记录*///exists关键字的子查询@Testpublic void testHql_17(){Session session = HibernateSessionFactory.getSession();String hql = "from Publishers p where exists(select b from p.bks b where b.unitPrice>55) ";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Publishers publisher = (Publishers) iterator.next();System.out.println("出版社:"+publisher.getName());}}//in关键字的子查询@Testpublic void testHql_18(){Session session = HibernateSessionFactory.getSession();String hql = "from Publishers p where 2 in(select count(b) from p.bks b) ";Query createQuery = session.createQuery(hql);List list = createQuery.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Publishers publisher = (Publishers) iterator.next();System.out.println("出版社:"+publisher.getName());}}}//QBC//Restrictions类提供的方法//Restrictions.eq:等于//Restrictions.allEq:使用Map//Restrictions.gt:大于//Restrictions.ge:大于等于//Restrictions.lt:小于//Restrictions.le:小于等于//Restrictions.between:BETWEEN子句//Restrictions.like:LIKE子句//Restrictions.in:in子句//Restrictions.and:and关系//Restrictions.or:or关系//Restrictions.sqlRestriction:SQL限定查询//简单查询@Testpublic void testCriteria_1(){Session session = HibernateSessionFactory.getSession();Criteria createCriteria = session.createCriteria(Books.class);createCriteria.addOrder(Order.asc("id"));List list = createCriteria.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books book = (Books) iterator.next();System.out.println("书名:"+book.getTitle()+" 作者:"+book.getAuthor()+" 单价:"+book.getUnitPrice());}}//分组查询@Testpublic void testCriteria_2(){Session session = HibernateSessionFactory.getSession();Criteria createCriteria = session.createCriteria(Books.class);ProjectionList projectionList = Projections.projectionList();projectionList.add(Projections.groupProperty("publishers"));projectionList.add(Projections.rowCount());projectionList.add(Projections.sum("unitPrice"));createCriteria.setProjection(projectionList);List list = createCriteria.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object[] object = (Object[]) iterator.next();Publishers publisher = (Publishers)object[0];System.out.println("出版社:"+publisher.getName()+" 总数:"+object[1]+" 总和:"+object[2]);}}//内置聚集函数@Testpublic void testCriteria_3(){Session session = HibernateSessionFactory.getSession();Criteria createCriteria = session.createCriteria(Books.class);ProjectionList projectionList = Projections.projectionList();projectionList.add(Projections.sum("unitPrice"));projectionList.add(Projections.avg("unitPrice"));projectionList.add(Projections.max("unitPrice"));projectionList.add(Projections.min("unitPrice"));createCriteria.setProjection(projectionList);List list = createCriteria.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Object[] object = (Object[]) iterator.next();System.out.println("单价总和:"+object[0]+" 平均单价:"+object[1]+" 最大单价:"+object[2]+" 最小单价:"+object[3]);}}//组合查询@Testpublic void testCriteria_4(){Session session = HibernateSessionFactory.getSession();Books condition = new Books();condition.setTitle("C++");//condition.setAuthor("B");Criteria createCriteria = session.createCriteria(Books.class);if(condition!=null){if(condition.getTitle()!=null&&!condition.getTitle().equals("")){createCriteria.add(Restrictions.like("title", condition.getTitle(),MatchMode.ANYWHERE));}if(condition.getAuthor()!=null&&!condition.getAuthor().equals("")){createCriteria.add(Restrictions.like("author", condition.getAuthor(),MatchMode.ANYWHERE));}}List list = createCriteria.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books book = (Books) iterator.next();System.out.println("书名:"+book.getTitle()+" 作者:"+book.getAuthor()+" 单价:"+book.getUnitPrice());}}//MatchMode包含的常量//MatchMode.ANYWHERE:模糊匹配//MatchMode.EXACT:精确匹配//MatchMode.START:某个字符开头匹配//MatchMode.END:某个字符结尾匹配//关联查询@Testpublic void testCriteria_5(){Session session = HibernateSessionFactory.getSession();List list = session.createCriteria(Books.class).add(Restrictions.like("title","C",MatchMode.ANYWHERE)).createCriteria("publishers").add(Restrictions.like("name", "人民邮电出版社")).list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books book = (Books) iterator.next();System.out.println("书名:"+book.getTitle()+" 作者:"+book.getAuthor()+" 单价:"+book.getUnitPrice());}}//分页查询@Testpublic void testCriteria_6(){Session session = HibernateSessionFactory.getSession();Criteria createCriteria = session.createCriteria(Books.class);createCriteria.setFirstResult(0);createCriteria.setMaxResults(4);List list = createCriteria.list();Iterator iterator = list.iterator();while (iterator.hasNext()) {Books book = (Books) iterator.next();System.out.println("书名:"+book.getTitle()+" 作者:"+book.getAuthor()+" 单价:"+book.getUnitPrice());}}
//Hibernate进阶//批量插入//批量插入@Testpublic void testBatchAddByCache(){Session session = null;Transaction tx = null;try {session = HibernateSessionFactory.getSession();tx = session.beginTransaction();for(int i=0;i<100000;i++){Users user = new Users();user.setLoginName("u"+i);user.setLoginPwd("123456");session.save(user);if(i%1000==0){    //清理session缓存session.flush();session.clear();}}tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();}finally{session.close();}}//配置文件中加入<!-- 设置批量尺寸 --><property name="hibernate.jdbc.batch_size">1000</property><!-- 关闭二级缓存 --><property name="hibernate.cache.use_second_level_cache">false</property>//绕过Hibernate直接调用JDBC API批量插入@Testpublic void testBatchAddByJDBC(){Session session = null;Transaction tx = null;try {session = HibernateSessionFactory.getSession();tx = session.beginTransaction();//调用WORK对象的execute方法session.doWork(new Work(){public void execute(Connection connection)throws SQLException{PreparedStatement ps = connection.prepareStatement("insert into users(loginName,loginPwd) values(?,?)");for(int i=0;i<100000;i++){ps.setString(1, "u"+i);ps.setString(2, "123456");ps.addBatch();}ps.executeBatch();}});tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();}}//使用hibernate直接进行批量更新@Testpublic void testBatchUpdateByCache(){Session session = null;Transaction tx = null;try {session = HibernateSessionFactory.getSession();tx = session.beginTransaction();Query createQuery = session.createQuery("update Users set loginPwd='111111'");createQuery.executeUpdate();tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();}finally{session.close();}}//绕过Hibernate直接调用JDBC API批量更新@Testpublic void testBatchUpdateByJDBC(){Session session = null;Transaction tx = null;try {session = HibernateSessionFactory.getSession();tx = session.beginTransaction();//调用WORK对象的execute方法session.doWork(new Work(){public void execute(Connection connection)throws SQLException{Statement st = connection.createStatement();st.executeUpdate("update Users set loginPwd='222222'");}});tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();}}//使用hibernate直接进行批量删除@Testpublic void testBatchDeleteByCache(){Session session = null;Transaction tx = null;try {session = HibernateSessionFactory.getSession();tx = session.beginTransaction();Query createQuery = session.createQuery("delete Users where id>576051");createQuery.executeUpdate();tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();}finally{session.close();}}//绕过Hibernate直接调用JDBC API批量删除@Testpublic void testBatchDeleteByJDBC(){Session session = null;Transaction tx = null;try {session = HibernateSessionFactory.getSession();tx = session.beginTransaction();//调用WORK对象的execute方法session.doWork(new Work(){public void execute(Connection connection)throws SQLException{Statement st = connection.createStatement();st.executeUpdate("delete from Users where id > 0");}});tx.commit();} catch (Exception e) {e.printStackTrace();tx.rollback();}}//Hibernate事务//原子性 一致性 隔离性 持久性//5种并发问题//第一类丢失更新:同时操作一个数据,撤销一个事务,把其他事务已提交的更新数据覆盖,对其他事务来说造成数据丢失//第二类丢失更新:同时操作一个数据,事务A将修改结果成功提交后,对事务B已提交的修改结果进行覆盖,对事务B造成数据丢失//脏读:同时操作一个数据,事务A读到事务B未提交的更新数据,且对数据进行操作,如果事务B撤销更新后,事务A所操作的数据变成脏数据//不可重复读:同时操作一个数据,事务A对同一行数据重复读取两次,每次读取的结果不同。有可能第二次读取数据的时候原始数据被事务B更改,并成功提交//幻象读:同时操作一个数据,事务A执行两次查询,第二次查询结果比第一次查询多出一行,这是因为两次查询之间事务B插入了新数据造成的//4个事务隔离级别//序列化(8级):提供严格的事务隔离,隔离级别不允许事务并行执行,只允许一个接着一个执行。有效防止脏读,不可重复读和幻象读//可重复读取(4级):可以访问其他事务成功提交的新插入数据,不能访问成功修改数据,读数据的事务禁止写事务,写事务则禁止其他事务,有效防止不可重复读和脏读//读已提交数据(2级):可以访问其他事务成功提交的新插入数据,又可访问成功修改数据,读数据的事务允许其他事务继续访问该行数据,但是未提交的写事务将会禁止//其他事务访问该数据。防止脏读//读未提交数据(1级):可以访问未提交新插入的数据,有可以访问未提交修改的数据,如果开始了写数据,则不允许另一个事务同时进行写操作,但可以读操作。//防止第一类丢失更新//推荐隔离级别设置2,虽然隔离级别会导致不可重复读、幻象读和第二类丢失更新这些并发问题,但是通过在应用程序中采用悲观锁或乐观锁来加以控制                  //悲观锁://Lock.NONE:如果缓存中存在对象,直接返回该对象的引用,否则通过select语句到数据库中加载该对象,这是锁的默认设置//LockMode.READ:不管是否存在对象,总是通过select语句到数据库中加载对象,如果映射文件中设置版本元素,就执行版本检查,比较是否与数据库中的对象版本一致//LookMode.UPGRADE:不管是否存在对象,总是通过select语句到数据库中加载对象,如果映射文件中设置版本元素,就执行版本检查,比较是否与数据库中的对象版本一致,//如果支持悲观锁,就执行select...for update语句,如果不知道,就执行select语句//LockMode.UPGRADE_NOWAIT:与LookMode.UPGRADE具有同样的功能,此外对ORACLE支持update nowait的数据库,执行select。。for update nowait语句,nowait表明如果//该select语句的事务不能立即获得悲观锁,那么不会等待其他事务释放锁,而是立刻抛出锁定异常//LockMode.WRITE:保持对象会自动使用这种锁定模式,仅供HIberenate内部使用,应用程序中不应该使用它//LockMode.FORCE:强制更新数据库中的对象的版本属性,从而表明当前事务已经更新这个对象//设定锁模式的方法有://调用Session.load时指定锁定模式//调用Session.lock//调用Query.setLockMode//Accountpublic class Account {private Integer Id;private String AccountNo;private String Balance;}//TransactionApublic class TransactionA extends TimerTask {@Overridepublic void run() {Transaction tx = null;Session session = null;try{session = HibernateSessionFactory.getSession();tx= session.beginTransaction();System.out.println("取款事务开始");Query createQuery = session.createQuery("from Account a where id=2");createQuery.setLockMode("a", LockMode.UPGRADE_NOWAIT);Account account = (Account) createQuery.uniqueResult();System.out.println("查询到存款余额"+account.getBalance());account.setBalance(Integer.parseInt(account.getBalance())-100+"");System.out.println("取出100元,存款余额改为:"+account.getBalance());session.update(account);tx.commit();}catch(Exception e){e.printStackTrace();tx.rollback();}finally{session.close();}}}//TransactionBpublic class TransactionB extends TimerTask {@Overridepublic void run() {Transaction tx = null;Session session  = null;try{session = HibernateSessionFactory.getSession();tx = session.beginTransaction();System.out.println("转账事务开始");Query createQuery = session.createQuery("from Account a where id=2");createQuery.setLockMode("a", LockMode.UPGRADE_NOWAIT);Account account = (Account) createQuery.uniqueResult();createQuery.setLockMode("account", LockMode.UPGRADE_NOWAIT);System.out.println("查询到存款余额"+account.getBalance());account.setBalance(Integer.parseInt(account.getBalance())+100+"");System.out.println("汇入100元,存款余额改为:"+account.getBalance());session.update(account);tx.commit();}catch(Exception e){e.printStackTrace();tx.rollback();}finally{session.close();}}}//TestHibernateLockpublic class TestHibernateLock {public static void main(String[] args) {new TestHibernateLock().testPessimisticLocking();}//悲观锁,通过定时器启动事务A和事务Bprivate void testPessimisticLocking(){Timer timer = new Timer();timer.schedule(new TransactionA(), 0);Timer timer2 = new Timer();timer2.schedule(new TransactionB(), 0);}}//乐观锁public class Account {private Integer Id;private String AccountNo;private String Balance;private Integer Version;} //TransactionCpublic class TransactionC extends TimerTask {@Overridepublic void run() {Transaction tx = null;Session session = null;try{session = HibernateSessionFactory.getSession();tx= session.beginTransaction();System.out.println("取款事务开始");Account a1 = (Account) session.get(Account.class, 1);System.out.println("查询到存款余额"+a1.getBalance());System.out.println("事务C中的ID为1的账号版本号为"+a1.getVersion());a1.setBalance(Integer.parseInt(a1.getBalance())-100+"");System.out.println("取出100元,存款余额改为:"+a1.getBalance());session.update(a1);tx.commit();}catch(Exception e){tx.rollback();System.out.println("【错误信息】"+e.getMessage());System.out.println("账户信息已被其他事务修改,本事务被撤销,请重新开始取款事务");Timer timer = new Timer();timer.schedule(new TransactionC(), 0);}finally{session.close();}}}//TransactionDpublic class TransactionD extends TimerTask {@Overridepublic void run() {Transaction tx = null;Session session = null;try{session = HibernateSessionFactory.getSession();tx= session.beginTransaction();System.out.println("转账事务开始");Account a1 = (Account) session.get(Account.class, 1);System.out.println("查询到存款余额"+a1.getBalance());System.out.println("事务C中的ID为1的账号版本号为"+a1.getVersion());a1.setBalance(Integer.parseInt(a1.getBalance())+100+"");System.out.println("汇入100元,存款余额改为:"+a1.getBalance());session.update(a1);tx.commit();}catch(Exception e){tx.rollback();System.out.println("【错误信息】"+e.getMessage());System.out.println("账户信息已被其他事务修改,本事务被撤销,请重新开始取款事务");Timer timer = new Timer();timer.schedule(new TransactionD(), 0);}finally{session.close();}}}//TestHibernateLockpublic class TestHibernateLock {public static void main(String[] args) {new TestHibernateLock().testOptLocking();}//乐观锁,通过定时器启动事务A和事务Bprivate void testOptLocking(){Timer timer = new Timer();timer.schedule(new TransactionC(), 0);Timer timer2 = new Timer();timer2.schedule(new TransactionD(), 0);}}
//Hibernate 缓存//事务范围:缓存只能被当前事务访问,事务结束,缓存的生命周期也结束了//进程范围:缓存被进程内的所有事务共享,进程结束,缓存的生命周期结束//集群范围:缓存被一个或多个计算机的进程共享//第一级缓存//get查询测试@Testpublic void testGet_1(){Session session = HibernateSessionFactory.getSession();Users user = (Users) session.get(Users.class, 1);System.out.println(user.getLoginName());Users user2 = (Users) session.get(Users.class, 1);System.out.println(user2.getLoginName());HibernateSessionFactory.closeSession();}//开启两个Session中发出两次get查询@Testpublic void testGet_2(){Session session1 = HibernateSessionFactory.getSession();Users user = (Users) session1.get(Users.class, 1);System.out.println(user.getLoginName());HibernateSessionFactory.closeSession();//第二个Session session2 = HibernateSessionFactory.getSession();Users user2 = (Users) session2.get(Users.class, 1);System.out.println(user2.getLoginName());HibernateSessionFactory.closeSession();}//iterate查询@Testpublic void testIterator1(){Session session1 = HibernateSessionFactory.getSession();Users user = (Users) session1.createQuery("from Users u where u.id=1").iterate().next();System.out.println(user.getLoginName());Users user2 = (Users) session1.createQuery("from Users u where u.id=1").iterate().next();System.out.println(user2.getLoginName());HibernateSessionFactory.closeSession();}//iterate查询属性测试@Testpublic void testIterator_2(){Session session = HibernateSessionFactory.getSession();String loginName1 = (String) session.createQuery("select u.loginName from Users u where u.id =1").iterate().next();System.out.println(loginName1);String loginName2 = (String) session.createQuery("select u.loginName from Users u where u.id =1").iterate().next();System.out.println(loginName2);}//在一个Session中先Save,在执行load查询@Testpublic void testSave_Load(){Session session = HibernateSessionFactory.getSession();Transaction beginTransaction = session.beginTransaction();Users users = new Users();users.setLoginName("新用户");Serializable id = session.save(users);beginTransaction.commit();Users users1 = (Users) session.load(Users.class, id);System.out.println(users.getLoginName());HibernateSessionFactory.closeSession();}//clear方法@Testpublic void testClear(){Session session = HibernateSessionFactory.getSession();Users users = (Users) session.load(Users.class, 1);System.out.println(users.getLoginName());session.clear();Users users2 = (Users) session.load(Users.class, 1);System.out.println(users2.getLoginName());HibernateSessionFactory.closeSession();}//Hibernate中的二级缓存//常用二级缓存插件包EHCache、OSCache、SwarmCache和JBossCache//Hibernate中使用EHCache配置//引入EHCache相关jar包 ehcache-core-2.4.3  hibernate-ehcache-4.3.9.Final slf4j-api-1.6.1//在src下创建EHCache配置文件ehcache.xml<ehcache><diskStore path="java.io.tmpdir"/><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"/><cache name="sampleCache1"maxElementsInMemory="10000"eternal="false"timeToIdleSeconds="300"timeToLiveSeconds="600"overflowToDisk="true"/><cache name="sampleCache2"maxElementsInMemory="1000"eternal="true"timeToIdleSeconds="0"timeToLiveSeconds="0"overflowToDisk="false"/> </ehcache>//在Hibernate配置文件里启用EHCache(cfg.xml)<!-- 启用二级缓存 --><property name="hibernate.cache.use_second_level_cache">true</property><!-- 设置二级缓存插件EHCache的Provider类 --><property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>//配置那些实体类需要二级缓存//方式一:在hbm.xml中加入<cache useage="read-write">标签//read-only 只读并发访问策略//read-write 读写型并发访问策略//nonstrict-read-write 表示非严格读写型并发访问策略//Ehcache插件不支持transaction事务型并发访问策略//方式二:(推荐)//在cfg.xml文件中使用<class-cache>元素//测试二级缓存@Testpublic void testGet(){Session session = HibernateSessionFactory.getSession();Users user = (Users) session.get(Users.class, 1);System.out.println(user.getLoginName());HibernateSessionFactory.closeSession();Session session2 = HibernateSessionFactory.getSession();Users user2 = (Users) session2.get(Users.class, 1);System.out.println(user2.getLoginName());HibernateSessionFactory.closeSession();}//查询缓存//1、<property name="hibernate.cache.use_query_cache">true</property>//2、在程序中添加query.setCacheable(true)//数据库连接池//在javax.naming的包中提供Context接口,该接口提供两种常用的方法//void bind(String name,Object object):该方法用于将名称绑定到对象,所有中间和目标上下文都存在//Object lookup(String name):该方法用于检索指定的名字绑定的对象
//Spring //非侵入式:业务逻辑层是纯净的,不能出现与业务相关的代码//容器:提供容器的功能,可以管理对象的生命周期、对象与对象之间的依赖关系//IOC:控制反转//AOP:面向切面编程//spring-aop-3.2.2.RELEASE:面向切面支持,提供AOP实现//spring-asm-3.0.5.RELEASE:独立的asm.jar//spring-aspects-3.2.2.RELEASE: 对AspectJ整合//spring-beans-3.2.2.RELEASE:IOC依赖注入//spring-context-3.2.2.RELEASE:基础IOC功能上的扩展服务      //spring-core-3.2.2.RELEASE:核心工具包       //spring-expression-3.2.2.RELEASE:表达式语言     //spring-instrument-3.2.2.RELEASE:服务器代理接口//spring-jdbc-3.2.2.RELEASE:jdbc简单封装//spring-jms-3.2.2.RELEASE:JMS API使用而做的简单封装//spring-orm-3.2.2.RELEASE:ORM映射支持//spring-oxm-3.2.2.RELEASE:Object/xmi的映射支持    //spring-test-3.2.2.RELEASE:对JUnit等测试框架所做的简易封装      //spring-tx-3.2.2.RELEASE:为JDBC、Hibernate、JDO、JPA等提供一致的声明式和编程式事务管理//spring-web-3.2.2.RELEASE:SpringWEB工具包//spring-webmvc-3.2.2.RELEASE:SpringMVC核心包//spring-webmvc-portlet-3.2.2.RELEASE:SpringMVC增强//依赖注入//UserBizpublic interface UserBiz {public boolean login(String username,String password);}//UserBizImpl.javapublic class UserBizImpl implements UserBiz {UserDao userDao;public void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic boolean login(String username, String password) {return userDao.login(username, password);}}  //UserDaopublic interface UserDao {public boolean login(String username,String password);}      //UserDaoImplpublic class UserDaoImpl implements UserDao {@Overridepublic boolean login(String username, String password) {if(username.equals("admin")&&password.equals("123123")){return true;}return false;}}        //Testpublic class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserBiz userBiz = (UserBiz) context.getBean("userBiz");boolean flag = userBiz.login("admin", "123123");if (flag) {System.out.println("登录成功");}else {System.out.println("登录失败");}}}        //applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="userDao" class="dao.UserDaoImpl"></bean><bean id="userBiz" class="biz.UserBizImpl"><property name="userDao" ref="userDao"></property>   </bean></beans>     //Bean工厂的ApplicationContext//基于ContextLoaderListener//基于ContextLoaderServlet//bean的作用域//singleton(单例模式):一个Bean对应一个对象实例//prototype(原型模式):一个Bean对应多个对象实例//request:一次HTTP请求,返回的该Bean同一个实例,不同用户请求,返回不同//session:在一次http session中,容器会返回该bean的同一个实例//global session:在一个全局的HTTP SESSION中容器会返回该Bean的同一个实例
//基于XML的Bean的装配//beans:整个配置文件的跟节点//bean:定义一个bean的实例化信息//constructor-arg:标记的子标记,用以传入构造参数进行实例化//property:bean标记的子标记,用于调用Bean实例中的Set方法完成属性的赋值,完成依赖注入//ref:作为property、constructor-arg等标记的子标记,其bean属性用于指定对Bean工厂中某个Bean实例的引用//value:作为property、constructor-arg等标记的子标记,用于指定一个常量值//list:用于封装List或数组类型属性的依赖注入//set:用于封装Set类型属性的依赖注入//map:用于封装Map类型属性的依赖注入//entry:通常作为map标记的子标记,用于设置键值对//Userspublic class Users {private String loginName;private String loginPwd;public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}public Users(String loginName, String loginPwd) {super();this.loginName = loginName;this.loginPwd = loginPwd;}public Users() {this.loginPwd = String.valueOf(new Random().nextInt(100000));}}//XmlBeanAssemblepublic class XmlBeanAssemble {List myList1;List myList2;Set mySet;Map myMap;public void init(){System.out.println("初始化方法init被调用");}public void destroy(){System.out.println("销毁方法被调用");}public void show(){System.out.println("原型模式, zhangsan两次获得密码分别是:");for(Object obj:myList1){System.out.println(((Users)obj).getLoginPwd());}System.out.println("单例模式, zhangsan两次获得密码分别是:");for(Object obj:myList2){System.out.println(((Users)obj).getLoginPwd() );}for(Object obj:mySet){if(obj instanceof Users){System.out.println(((Users)obj).getLoginName()+"正在学习框架");}else {System.out.println(obj+"\t");}}for(Object obj:myMap.keySet()){System.out.println(obj.toString()+":"+myMap.get(obj));}}public List getMyList1() {return myList1;}public void setMyList1(List myList1) {this.myList1 = myList1;}public List getMyList2() {return myList2;}public void setMyList2(List myList2) {this.myList2 = myList2;}public Set getMySet() {return mySet;}public void setMySet(Set mySet) {this.mySet = mySet;}public Map getMyMap() {return myMap;}public void setMyMap(Map myMap) {this.myMap = myMap;}}   //Testpublic class Test {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");XmlBeanAssemble xba = (XmlBeanAssemble) ctx.getBean("xba");xba.show();((ClassPathXmlApplicationContext)ctx).destroy();}}   //applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="user1" class="shw.Users" scope="prototype"><property name="loginName" value="zhangsan"></property></bean><bean id="user2" class="shw.Users"><property name="loginName" value="zhangsan"></property></bean><bean id="user3" class="shw.Users"><constructor-arg index="0" value="lisi"></constructor-arg><constructor-arg index="1" value="123456"></constructor-arg></bean><bean id="xba" class="shw.XmlBeanAssemble" init-method="init" destroy-method="destroy"><property name="myList1"><list><ref bean="user1"/><ref bean="user1"/></list></property><property name="myList2"><list><ref bean="user2"/><ref bean="user2"/></list></property><property name="mySet"><set><ref bean="user3"/><value>Struts 2</value><value>Spring 3</value></set></property>  <property name="myMap"><map><entry key="Struts 2"><value>支持MVC模式</value></entry><entry key="Spring 3"><value>充当组件粘合剂</value></entry></map></property></bean></beans>
//基于Annotation的Bean装配//Autowired:自动配置工作//Resource:自动配置工作//Qualfier:与Autowired配合使用//Testpublic class Test {public static void main(String[] args) {new Test().springDI();}@Autowiredpublic void springDI() {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserBiz userBiz = (UserBiz) context.getBean("userBiz");boolean flag = userBiz.login("admin", "123123");if (flag) {System.out.println("登录成功");} else {System.out.println("登录失败");}}}//UserBizpublic interface UserBiz {public boolean login(String username, String password);}//UserBizImplpublic class UserBizImpl implements UserBiz {@AutowiredUserDao userDao;@Autowiredpublic void setUserDao(UserDao userDao) {this.userDao = userDao;}@Overridepublic boolean login(String username, String password) {return userDao.login(username, password);}}//UserDaopublic interface UserDao {public boolean login(String username, String password);}//public class UserDaoImpl implements UserDao {@Overridepublic boolean login(String username, String password) {if (username.equals("admin") && password.equals("123123")) {return true;}return false;}}//UserDaoImplpublic class UserDaoImpl implements UserDao {@Overridepublic boolean login(String username, String password) {if (username.equals("admin") && password.equals("123123")) {return true;}return false;}}//applicationContext.xml<?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"><bean id="userDao" class="shw.UserDaoImpl"></bean><bean id="userBiz" class="shw.UserBizImpl"></bean><context:annotation-config></context:annotation-config></beans>
//基于代理类proxyFactoryBean的AOP实现//target:代理对象//proxyInterfaces:代理所要实现的接口//interceptorNames:需要植入目标对象的Bean的列表//singleton:返回的代理是否是单实例//前置通知和后置通知//LogAdvicepublic class LogAdvice implements MethodBeforeAdvice,AfterReturningAdvice{@Overridepublic void before(Method method, Object[] args, Object target)throws Throwable {String name = target.getClass().getName();String name2 = method.getName();System.out.println("前置通知"+name+"类的"+name2+"方法开始执行");}@Overridepublic void afterReturning(Object returnValue, Method method, Object[] args,Object target) throws Throwable {String name = target.getClass().getName();String name2 = method.getName();System.out.println("后置通知"+name+"类的"+name2+"方法结束执行");}public void afterThrowing(Method method, Object[] args,  Object target,Throwable exeptionClass){String name = target.getClass().getName();String name2 = method.getName();System.out.println("异常通知"+name+"类的"+name2+"方法发生异常");}}//Testpublic class Test {public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");UserBiz userBiz = (UserBiz) context.getBean("ub");userBiz.addUser("zhangsan","123");userBiz.delUser(1);throw new RuntimeException("这是特意抛出的异常信息");}}//UserBizpublic interface UserBiz {public void addUser(String username,String password);public void delUser(int id);}//UserBizImplpublic class UserBizImpl implements UserBiz {UserDAO userDAO;public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic void addUser(String username, String password) {userDAO.addUser(username, password);}@Overridepublic void delUser(int id) {userDAO.delUser(id);}}//UserDAOpublic interface UserDAO {public void addUser(String username,String password);public void delUser(int id);}//UserDAOImplpublic class UserDAOImpl implements UserDAO {@Overridepublic void addUser(String username, String password) {System.out.println(username+"用户添加成功");}@Overridepublic void delUser(int id) {System.out.println("编号为"+id+"的用户被删除");}}//applicationContext.xml<?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:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"><bean id="userDAO" class="shw.UserDAOImpl"></bean><bean id="userBiz" class="shw.UserBizImpl"><property name="userDAO" ref="userDAO"></property></bean><bean id="logAdvice" class="shw.LogAdvice"></bean><bean id="ub" class="org.springframework.aop.framework.ProxyFactoryBean"><property name="proxyInterfaces"><value>shw.UserBiz</value></property><property name="interceptorNames"><list><value>logAdvice</value></list></property><property name="target" ref="userBiz"></property></bean></beans>
//基于Schema的AOP实现//AllLogAdvicepublic class AllLogAdvice {private Logger logger=Logger.getLogger(AllLogAdvice.class);//此方法将作为前置通知public void myBeforeAdvice(JoinPoint jionpoint){//获取被调用的类名String targetClassName=jionpoint.getTarget().getClass().getName();//获取被调用的方法名String targetMethodName=jionpoint.getSignature().getName();//日志格式字符串String logInfoText="前置通知:"+targetClassName+"类的"+targetMethodName+"方法开始执行";//将日志信息写入配置的文件中logger.info(logInfoText);}//此方法将作为后置通知public void myAfterReturnAdvice(JoinPoint jionpoint){//获取被调用的类名String targetClassName=jionpoint.getTarget().getClass().getName();//获取被调用的方法名String targetMethodName=jionpoint.getSignature().getName();//日志格式字符串String logInfoText="后置通知:"+targetClassName+"类的"+targetMethodName+"方法开始执行";//将日志信息写入配置的文件中logger.info(logInfoText);}//此方法将作为异常通知public void myThrowingAdvice(JoinPoint jionpoint,Exception e){//获取被调用的类名String targetClassName=jionpoint.getTarget().getClass().getName();//获取被调用的方法名String targetMethodName=jionpoint.getSignature().getName();//日志格式字符串String logInfoText="异常通知:执行"+targetClassName+"类的"+targetMethodName+"方法时发生异常";//将日志信息写入配置的文件中logger.info(logInfoText);}//此方法将作为环绕通知public void myAroundAdvice(ProceedingJoinPoint jionpoint) throws Throwable{long beginTime=System.currentTimeMillis();jionpoint.proceed();     long endTime=System.currentTimeMillis();//获取被调用的方法名String targetMethodName=jionpoint.getSignature().getName();//日志格式字符串String logInfoText="环绕通知:"+targetMethodName+"方法调用前时间"+beginTime+"毫秒,"+"调用后时间"+endTime+"毫秒";//将日志信息写入配置的文件中logger.info(logInfoText);}}//applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd "><!-- 配置创建UserDAOImpl的实例 --><bean id="userDAO" class="com.shw.dao.UserDAOImpl">  </bean><!-- 配置创建UserBizImpl的实例 --><bean id="userBiz" class="com.shw.biz.UserBizImpl"><!-- 依赖注入数据访问层组件 --><property name="userDAO" ref="userDAO" /></bean><!-- 定义日志通知,将日志切面交给Spring容器管理 --><bean id="allLogAdvice" class="com.shw.aop.AllLogAdvice"></bean>  <!-- 进行aop配置 --><aop:config>    <!-- 配置日志切面 --><aop:aspect id="logaop" ref="allLogAdvice">          <!-- 定义切入点,切入点采用正则表达式execution(* com.shw.biz.UserBiz.*(..)),含义是对com.shw.biz.UserBiz中的所有方法,都进行拦截    -->   <aop:pointcut id="logpointcut" expression="execution(* com.shw.biz.UserBiz.*(..))" /><!-- 将LogAdvice日志通知中的myBeforeAdvice方法指定为前置通知 --><aop:before method="myBeforeAdvice" pointcut-ref="logpointcut"/><!-- 将LogAdvice日志通知中的myAfterReturnAdvice方法指定为后置通知 --><aop:after-returning method="myAfterReturnAdvice" pointcut-ref="logpointcut"/><!-- 将LogAdvice日志通知中的方法指定为异常通知 --><aop:after-throwing method="myThrowingAdvice" pointcut-ref="logpointcut" throwing="e" /><!-- 将LogAdvice日志通知中的方法指定为环绕通知 --><aop:around method="myAroundAdvice" pointcut-ref="logpointcut"/></aop:aspect></aop:config></beans>//UserBizpublic interface UserBiz {public void addUser(String username,String password);public void delUser(int id);}//UserBizImplpublic class UserBizImpl implements UserBiz {UserDAO userDAO;public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic void addUser(String username, String password) {userDAO.addUser(username, password);}@Overridepublic void delUser(int id) {userDAO.delUser(id);}}//UserDAOpublic interface UserDAO {public void addUser(String username,String password);public void delUser(int id);}//UserDAOImplpublic class UserDAOImpl implements UserDAO {@Overridepublic void addUser(String username, String password) {System.out.println(username+"用户添加成功");}@Overridepublic void delUser(int id) {System.out.println("编号为"+id+"的用户被删除");}}//SchemaAOPTestpublic class SchemaAOPTest {public static void main(String[] args) {//加载applicationContext.xml配置ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");//获取配置中的UserBizImpl实例UserBiz userBiz =(UserBiz)context.getBean("userBiz"); userBiz.addUser("zhangsan", "123");userBiz.delUser(1);}}
//基于@AspectJ注解的AOP实现//AspectJ:定义一个切面//Pointcut:定义一个切入点//Before:定义一个前置通知//AfterReturning:定义一个后置通知//AfterThrowing:定义一个异常通知//Around:定义一个环绕通知////日志切面@Aspectpublic class AllLogAdviceByAnnotation {private Logger logger=Logger.getLogger(AllLogAdviceByAnnotation.class);@Pointcut("execution(* com.shw.biz.UserBiz.*(..))")//定义切入点名字private void allMethod(){}//定义前置通知@Before("allMethod()")public void myBeforeAdvice(JoinPoint jionpoint){//获取被调用的类名String targetClassName=jionpoint.getTarget().getClass().getName();//获取被调用的方法名String targetMethodName=jionpoint.getSignature().getName();//日志格式字符串        String logInfoText="前置通知:"+targetClassName+"类的"+targetMethodName+"方法开始执行";//将日志信息写入配置的文件中logger.info(logInfoText);}//定义后置通知@AfterReturning("allMethod()")public void myAfterReturnAdvice(JoinPoint jionpoint){//获取被调用的类名String targetClassName=jionpoint.getTarget().getClass().getName();//获取被调用的方法名String targetMethodName=jionpoint.getSignature().getName();//日志格式字符串String logInfoText="后置通知:"+targetClassName+"类的"+targetMethodName+"方法开始执行";//将日志信息写入配置的文件中logger.info(logInfoText);}//定义异常通知@AfterThrowing(pointcut="allMethod()",throwing="e")public void myThrowingAdvice(JoinPoint jionpoint,Exception e){//获取被调用的类名String targetClassName=jionpoint.getTarget().getClass().getName();//获取被调用的方法名String targetMethodName=jionpoint.getSignature().getName();//日志格式字符串String logInfoText="异常通知:执行"+targetClassName+"类的"+targetMethodName+"方法时发生异常";//将日志信息写入配置的文件中logger.info(logInfoText);}//定义环绕通知@Around("allMethod()")public void myAroundAdvice(ProceedingJoinPoint jionpoint) throws Throwable{long beginTime=System.currentTimeMillis();jionpoint.proceed();       long endTime=System.currentTimeMillis();//获取被调用的方法名String targetMethodName=jionpoint.getSignature().getName();//日志格式字符串String logInfoText="环绕通知:"+targetMethodName+"方法调用前时间"+beginTime+"毫秒,"+"调用后时间"+endTime+"毫秒";//将日志信息写入配置的文件中logger.info(logInfoText);}}//applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd"> <!-- 配置创建UserDAOImpl的实例 --><bean id="userDAO" class="com.shw.dao.UserDAOImpl">     </bean><!-- 配置创建UserBizImpl的实例 --><bean id="userBiz" class="com.shw.biz.UserBizImpl"><!-- 依赖注入数据访问层组件 --><property name="userDAO" ref="userDAO" />   </bean><!-- 开启基于@AspectJ切面的注解处理器 --><aop:aspectj-autoproxy /><!-- 将日志通知AllLogAdviceByAnnotation交给Spring容器管理 --><bean class="com.shw.aop.AllLogAdviceByAnnotation" /></beans>//AnnotationAopTestpublic class AnnotationAopTest {public static void main(String[] args) {//加载applicationContext.xml配置ApplicationContext context=new ClassPathXmlApplicationContext("annotationAop.xml");//获取配置中的UserBizImpl实例UserBiz userBiz =(UserBiz)context.getBean("userBiz");  userBiz.addUser("zhangsan", "123");userBiz.delUser(1);}}
//Spring整合hiberante和struts2//目录结构srcactionUserManagerAction.javabizUserBiz.javaUserBizImpl.javadaoUserDAO.javaUserDAOImpl.javaentityUsers.javaUsers.hbm.xmltestTestSpringHibernate.javaapplicationContext.xml   struts.xml  WebContentMETA-INFWEB-INFlibweb.xmlerror.jsplogin.jspsuccess.jsp//UserManagerActionpublic class UserManagerAction extends ActionSupport {private String loginName;private String loginPwd;public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}UserBiz userBiz;  public void setUserBiz(UserBiz userBiz) {this.userBiz = userBiz;}public String execute() throws Exception {Users condition=new Users();condition.setLoginName(loginName);condition.setLoginPwd(loginPwd);     List list=userBiz.login(condition);if(list.size()>0){return "success"; }else{return "error";   }        }}      //UserBizpublic interface UserBiz {public List login(Users condition);}     //UserBizImpl.java      public class UserBizImpl implements UserBiz {UserDAO userDAO;   public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic List login(Users condition) {    return userDAO.search(condition);}}//UserDAO        public interface UserDAO {public List search(Users condition);}//UserDAOImpl        public class UserDAOImpl implements UserDAO {SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic List search(Users condition) {List list=null;Session session=sessionFactory.getCurrentSession();Transaction tx=session.beginTransaction();try{Criteria c=session.createCriteria(Users.class);Example example=Example.create(condition);c.add(example);            list= c.list();      tx.commit();      }catch(Exception e){tx.rollback();    }return list;}}//Users        public class Users implements java.io.Serializable {private Integer id;private String loginName;private String loginPwd;public Users() {}public Users(String loginName, String loginPwd, String name,String address, String phone, String mail) {this.loginName = loginName;this.loginPwd = loginPwd;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getLoginName() {return this.loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return this.loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}}//applicationContext.xml       <?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-6-12 23:51:39 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Users" table="USERS"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="loginName" type="java.lang.String"><column name="LOGINNAME" /></property><property name="loginPwd" type="java.lang.String"><column name="LOGINPWD" /></property></class></hibernate-mapping>//struts.xml        <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><!-- 设置Web应用的默认编码集为gbk --><constant name="struts.i18n.encoding" value="gbk" /><package name="default" extends="struts-default"><!-- 定义dolgon的Action,class属性使用Spring配置文件中 定义的相应的Bean实例名称--><action name="doLogin" class="umAction">   <!-- 定义处理结果和资源之间的映射关系 --><result name="error">error.jsp</result><result name="success">success.jsp</result></action></package>  </struts>  //web.xml      <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><!-- 指定以Listerner方式启动Spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 指定Spring配置文件的位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><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></web-app>//error.jsp     <body>登录失败!</body>//login.jsp           <body><s:form action="doLogin.action"><table><tr><s:textfield name="loginName" label="用户名" /></tr><tr><s:textfield name="loginPwd" label="密码" /></tr><tr><s:submit value="确认" /></tr></table></s:form></body>//success.jsp  <body>登录成功!</body>
//基于注解的spring整合struts和Hibernate     //目录结构srcactionUserManagerAction.javabizUserBiz.javaUserBizImpl.javadaoUserDAO.javaUserDAOImpl.javaentityUsers.javaapplicationContext.xml   struts.xml  WebContentMETA-INFWEB-INFlibweb.xmlerror.jsplogin.jspsuccess.jsp        //UserManagerAction     @Controller @Scope("prototype")public class UserManagerAction extends ActionSupport {private String loginName;private String loginPwd;  @ResourceUserBiz userBiz;  public void setUserBiz(UserBiz userBiz) {this.userBiz = userBiz;}@Action(value="/checkLogin",results={@Result(name="success",location="/success.jsp"),@Result(name="error",location="/error.jsp")})public String checkLogin() throws Exception {Users condition=new Users();condition.setLoginName(loginName);condition.setLoginPwd(loginPwd);     List list=userBiz.login(condition);if(list.size()>0){return "success"; }else{return "error"; }}public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}}//UserBiz.java      public interface UserBiz {public List login(Users condition);}//UserBizImpl.java        @Service("userBiz")public class UserBizImpl implements UserBiz {@ResourceUserDAO userDAO;   public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic List login(Users condition) {return userDAO.search(condition);}}//UserDAO        public interface UserDAO {public List search(Users condition);}//UserDAOImpl        @Repository("userDAO")public class UserDAOImpl implements UserDAO {@ResourceSessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Override   public List search(Users condition) {List list=null;Transaction tx=null;Session session=sessionFactory.getCurrentSession();try{tx=session.beginTransaction();Criteria c=session.createCriteria(Users.class);Example example=Example.create(condition);c.add(example); list= c.list();tx.commit();}catch(Exception e) {tx.rollback();}return list;}}//Users.java      @Entity@Table(name = "users", catalog = "java")public class Users implements java.io.Serializable {private Integer id;private String loginName;private String loginPwd;public Users() {}public Users(String loginName, String loginPwd, String name,String address, String phone, String mail) {this.loginName = loginName;this.loginPwd = loginPwd;}@Id@GeneratedValue@Column(name = "Id", unique = true, nullable = false)public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}@Column(name = "LoginName", length = 50)public String getLoginName() {return this.loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}@Column(name = "LoginPwd", length = 16)public String getLoginPwd() {return this.loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}}//applicationContext.xml        <?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:context="http://www.springframework.org/schema/context"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd"><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><!-- 指定连接数据库的JDBC驱动 --><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql:///java"></property><property name="username" value="root"></property><property name="password" value="123456"></property></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop><prop key="hbm2ddl.auto">update</prop><prop key="hibernate.current_session_context_class">thread</prop></props></property><property name="annotatedClasses"><list><value>entity.Users</value></list></property></bean><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 开启注解处理器 --><context:annotation-config /><!-- 开启Spring的Bean自动扫描机制来检查与管理Bean实例 --><context:component-scan base-package="*" /><tx:annotation-driven transaction-manager="transactionManager" /></beans>//struts.xml        <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><constant name="struts.i18n.encoding" value="gbk"></constant></struts>   //web.xml      <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><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></web-app>//error.jsp        <body>登录失败!</body>//login.jsp       <body><s:form action="checkLogin.action"><table><tr>        <s:textfield name="loginName" label="用户名"  /> </tr><tr><s:textfield name="loginPwd" label="密码"  /> </tr><tr><s:submit value="确认"  /> </tr>         </table></s:form>    </body>//success.jsp        <body>登录成功!</body>
//Spring3声明式事务管理//QEQUIRED:当前方法必须运行在一个事务中,如果一个现有的事务正在运行中,该方法运行在这个事务中,否则,开始一个新的事务//REQUIRESNEW:表示当前方法必须运行在自己的事务里//SUPPORTS:表示当前方法不需要事务处理环境,但是如果有一个事务正在运行的话,则这个方法也可以运行在这个事务中//MANDATORY:表示当前方法必须运行在一个事务上下文中,否则就抛出异常//NEVER:表示当前方法不应该运行在一个事务上下文中,否则就抛出异常//目录结构srcactionAccountManager.javaUserManagerAction.javabizAccountBiz.javaAccountBizImpl.javaUserBiz.javaUserBizImpl.javadaoAccountDAO.javaAccountDAOImpl.javaUserDAO.javaUserDAOImpl.javaentityAccount.javaUsers.javaAccount.hbm.xmlUsers.hbm.xmltestTestSpringHibernate.javaapplicationContext.xmlstruts.xmlWebContentWEB-INFweb.xmlerror.jsperror1.jspindex.jsplogin.jspsuccess.jsp success1.jsp    transfer.jsp    //AccountManager.javapublic class AccountManager extends ActionSupport {//使用AccountBiz接口声明对象,并添加set方法用于依赖注入AccountBiz accountBiz;    public void setAccountBiz(AccountBiz accountBiz) {this.accountBiz = accountBiz;}//定义属性,用于封装表单数据private String ac1;private String ac2;private String amount;@Overridepublic String execute() throws Exception {Account a1=null;Account a2=null;//获取账号ac1的账户对象,并更新对象中的账户余额属性        List list1=accountBiz.getAccountByAccountNo(ac1);if(list1.size()>0){a1=(Account) list1.get(0);a1.setBalance(new Long(a1.getBalance().longValue()-Long.parseLong(amount)) );    }           //获取账号ac2的账户对象,并更新对象中的账户余额属性     List list2=accountBiz.getAccountByAccountNo(ac2);if(list2.size()>0){a2=(Account) list2.get(0);a2.setBalance(new Long(a2.getBalance().longValue()+Long.parseLong(amount)) );}try {//执行转账操作accountBiz.transfer(a1, a2);} catch (Exception e) {// 转账失败return "error";}     //转账成功return "success";}public String getAc1() {return ac1;}public void setAc1(String ac1) {this.ac1 = ac1;}public String getAc2() {return ac2;}public void setAc2(String ac2) {this.ac2 = ac2;}public String getAmount() {return amount;}public void setAmount(String amount) {this.amount = amount;} }//UserManagerAction.javapublic class UserManagerAction extends ActionSupport {//定义用于保存用户登录表单参数的两个属性private String loginName;private String loginPwd;public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}//使用UserBiz声明一个属性,并添加set方法用于依赖注入UserBiz userBiz;    public void setUserBiz(UserBiz userBiz) {this.userBiz = userBiz;}//重载execute方法用来处理登录请求public String execute() throws Exception {// TODO Auto-generated method stubUsers condition=new Users();condition.setLoginName(loginName);condition.setLoginPwd(loginPwd);      List list=userBiz.login(condition);if(list.size()>0){//登录成功,转到success.jsp页面return "success"; }else{//登录失败,转到error.jsp页面return "error";   }        }}//AccountBiz.javapublic interface AccountBiz {//根据账号获取账户对象public List getAccountByAccountNo(String accountNo);//转账public void transfer(Account a1,Account a2);}//AccountBizImpl.java//使用@Transactional注解实现事务管理@Transactionalpublic class AccountBizImpl implements AccountBiz {//用AccountDAO接口声明对象,并添加set方法用于依赖注入AccountDAO accountDAO;public void setAccountDAO(AccountDAO accountDAO) {this.accountDAO = accountDAO;}@Overridepublic List getAccountByAccountNo(String accountNo) {return accountDAO.getAccountByAccountNo(accountNo);}@Overridepublic void transfer(Account a1, Account a2) {accountDAO.transfer(a1, a2);}}//UserBiz.javapublic interface UserBiz {public List login(Users condition);}//UserBizImpl.java//使用@Transactional注解实现事务管理@Transactionalpublic class UserBizImpl implements UserBiz {//使用UserDAO接口声明对象,并添加set方法用于依赖注入UserDAO userDAO;    public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic List login(Users condition) {    return userDAO.search(condition);}}//AccountDAO.javapublic interface AccountDAO {//根据账号获取账户对象public List getAccountByAccountNo(String accountNo);//转账public void transfer(Account a1,Account a2);}//AccountDAOImpl.javapublic class AccountDAOImpl implements AccountDAO {//声明属性sessionFactory,用于接受LocalSessionFactoryBean类实例sessionFactory注入SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic List getAccountByAccountNo(String accountNo) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Account.class);c.add(Restrictions.eq("accountNo", accountNo));return c.list();      }@Overridepublic void transfer(Account a1, Account a2) {Session session=sessionFactory.getCurrentSession();session.update(a1);session.update(a2);}}//UserDAO.javapublic interface UserDAO {public List search(Users condition);}//UserDAOImpl.javapublic class UserDAOImpl implements UserDAO {//声明属性sessionFactory,用于接受LocalSessionFactoryBean类实例sessionFactory注入SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic List search(Users condition) {List list=null;//通过sessionFactory获得SessionSession session=sessionFactory.getCurrentSession();       //创建Criteria对象Criteria c=session.createCriteria(Users.class);//使用Example工具类创建示例对象Example example=Example.create(condition);//为Criteria对象指定示例对象example作为查询条件       c.add(example);         list= c.list();      //执行查询,获得结果return list;}}//Account.javapublic class Account implements java.io.Serializable {private Integer id;private String accountNo;private Long balance;public Account() {}public Account(String accountNo, Long balance) {this.accountNo = accountNo;this.balance = balance;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getAccountNo() {return this.accountNo;}public void setAccountNo(String accountNo) {this.accountNo = accountNo;}public Long getBalance() {return this.balance;}public void setBalance(Long balance) {this.balance = balance;}}//Users.javapublic class Users implements java.io.Serializable {private Integer id;private String loginName;private String loginPwd;public Users() {}public Users(String loginName, String loginPwd, String name,String address, String phone, String mail) {this.loginName = loginName;this.loginPwd = loginPwd;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getLoginName() {return this.loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return this.loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}}//Account.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-6-13 14:50:55 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Account" table="ACCOUNT"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="accountNo" type="java.lang.String"><column name="ACCOUNTNO" /></property><property name="balance" type="java.lang.Long"><column name="BALANCE" /></property></class></hibernate-mapping>//Users.hbm.xml<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"><!-- Generated 2016-6-13 14:50:55 by Hibernate Tools 3.4.0.CR1 --><hibernate-mapping><class name="entity.Users" table="USERS"><id name="id" type="java.lang.Integer"><column name="ID" /><generator class="native" /></id><property name="loginName" type="java.lang.String"><column name="LOGINNAME" /></property><property name="loginPwd" type="java.lang.String"><column name="LOGINPWD" /></property></class></hibernate-mapping>//TestSpringHibernate.javapublic class TestSpringHibernate {public static void main(String[] args) {ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");//获取配置中的实例UserBiz userBiz =(UserBiz)context.getBean("userBiz");Users conditon=new Users();conditon.setLoginName("admin");conditon.setLoginPwd("123456");List list=userBiz.login(conditon);if(list.size()>0){System.out.println("登陆成功");}else{System.out.println("登陆失败");} }}//applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"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.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd"><!-- 定义BasicDataSource数据源 --><bean id="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 指定连接数据库的JDBC驱动 --><property name="driverClass"value="com.mysql.jdbc.Driver"></property><!-- 指定数据库所用的url--><property name="jdbcUrl"value="jdbc:mysql:java"></property><!-- 指定连接数据库的用户名 --><property name="user" value="root"></property><!-- 指定连接数据库的密码 --><property name="password" value="root"></property></bean><!-- 定义Hibernate的SessionFactory --><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!-- 将上面定义的数据源dataSource注入到LocalSessionFactoryBean类的sessionFactory属性  --><property name="dataSource"><ref bean="dataSource" /></property><!-- 设置Hibernate的相关属性 --><property name="hibernateProperties"><props><!-- 设置Hibernate的数据库方言 --><prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop><!-- 自动建表--><prop key="hbm2ddl.auto">update</prop><!-- 输出sQL --><prop key="show_sql">true</prop></props></property><property name="mappingResources"><list><value>entity/Users.hbm.xml</value><value>entity/Account.hbm.xml</value></list></property></bean><!-- 声明Hibernate事务管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义事务通知  --><tx:advice id="txAdvice" transaction-manager="transactionManager">   <!-- 指定事务传播规则 --><tx:attributes>           <!-- 对所有方法应用REQUIRED事务规则 --><tx:method name="*" propagation="REQUIRED" ></tx:method></tx:attributes></tx:advice><!-- 定义切面,并将事务通知和切面组合(定义哪些方法应用事务规则)--><aop:config>   <!-- 对biz包下的所有类的所有方法都应用事务规则 --><aop:pointcut id="bizMethods" expression="execution(* com.ssh2.biz.*.*(..))" />     <!-- 将事务通知和切面组合 --><aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" /></aop:config><!-- 开启注解处理器 --><context:annotation-config /><!-- 基于@Transactional注解方式的事务管理 --><tx:annotation-driven transaction-manager="transactionManager" /><!-- 定义UserDAOImpl类实例,并将已经创建LocalSessionFactoryBean的实例sessionFactory依赖注入给UserDAOImpl类中的sessionFactory属性 --><bean id="userDAO" class="dao.UserDAOImpl">   <property name="sessionFactory" ref="sessionFactory"/></bean><!-- 定义UserBizImpl类实例,并给UserBizImpl类中的userDAO注入值 --><bean id="userBiz" class="biz.UserBizImpl"><property name="userDAO" ref="userDAO" /></bean><!-- 部署Struts 2的负责用户管理的控制器UserManagerAction --><bean id="umAction" class="action.UserManagerAction" scope="prototype"><property name="userBiz" ref="userBiz" /></bean><!-- 定义AccountDAOImpl类实例,并将已经创建LocalSessionFactoryBean的实例    --><bean id="accountDAO" class="dao.AccountDAOImpl">    <property name="sessionFactory" ref="sessionFactory"/></bean><!-- 定义AccountBizImpl类实例,并给AccountBizImpl类中的accountDAO属性注入值 --><bean id="accountBiz" class="biz.AccountBizImpl">    <property name="accountDAO" ref="accountDAO" /></bean><!-- 部署Struts 2的负责账户管理的控制器AccountManager,并给AccountManager类中的accountBiz属性注入值 --><bean id="amAction" class="action.AccountManager" scope=""><property name="accountBiz" ref="accountBiz" /></bean></beans>    //struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><!-- 设置Web应用的默认编码集为gbk --><constant name="struts.i18n.encoding" value="gbk" /><package name="default" extends="struts-default"><!-- 定义dolgon的Action,class属性使用Spring配置文件中 定义的相应的Bean实例名称--><action name="doLogin" class="umAction">   <!-- 定义处理结果和资源之间的映射关系 --><result name="error">error.jsp</result><result name="success">success.jsp</result></action>      <!-- 定义doTransfer的Action,class属性使用Spring配置文件中定义的AccountManager类的Bean实例名称 --><action name="doTransfer" class="amAction">    <!-- 定义处理结果和资源之间的映射关系 --><result name="error">error1.jsp</result><result name="success">success1.jsp</result></action></package>    </struts>    //web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><!-- 指定以Listerner方式启动Spring --><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><!-- 指定Spring配置文件的位置 --><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><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></web-app>//error.jsp<body>登录失败!</body>//error1.jsp<body>转账失败!</body>//login.jsp<body><s:form action="doLogin.action"><table><tr><s:textfield name="loginName" label="用户名" /></tr><tr><s:textfield name="loginPwd" label="密码" /></tr><tr><s:submit value="确认" /></tr></table></s:form></body>//success.jsp    <body>登录成功!</body>//success1.jsp    <body>转账成功!</body>//transfer.jsp            <body><s:form action="doTransfer.action"><table align="center"><tr><s:textfield name="ac1" label="账户1" /></tr><tr><s:textfield name="ac2" label="账户2" /></tr><tr><s:textfield name="amount" label="转账金额" /></tr><tr><s:submit value="转账" /></tr></table></s:form></body>
//Spring Web//目录结构srcentityUsers.javawebLoginController.javaRegController.javaUserController.javaapplicationContext.xmlviews.properties WebContentMETA-INFWEB-INF   lib spring-servlet.xml  web.xml login.jsp   register.jsp    show.jsp    success.jsp //Users.javapublic class Users implements java.io.Serializable {private String userName;private String userPwd;private String regTime;  private String hobby;   public Users() {}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd = userPwd;}public String getRegTime() {return regTime;}public void setRegTime(String regTime) {this.regTime = regTime;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;} }//LoginController.javapublic class LoginController extends AbstractCommandController {@Overrideprotected ModelAndView handle(HttpServletRequest request,HttpServletResponse response, Object command, BindException exception)throws Exception {//获取用户对象Users user=(Users)command; //创建一个指定视图逻辑名的ModelAndView实例ModelAndView mav=new ModelAndView("success");  //给mav实例指定数据模型mav.addObject("user", user);//返回mav实例return mav;}}//RegController.javapublic class RegController extends SimpleFormController {@Overrideprotected ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)throws Exception {//获取用户对象Users user=(Users)command;        //创建一个指定视图逻辑名的ModelAndView实例ModelAndView mav=new ModelAndView("show");   //给mav实例指定数据模型mav.addObject("user", user);//返回mav实例return mav;}//进行数据格式转换@Overrideprotected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));}//为注册表单中"爱好下拉列表"提供数据列表@Overrideprotected Map referenceData(HttpServletRequest request) throws Exception {Map<String, Object> model=new HashMap<String, Object>();model.put("hobbyList", new String[]{"Swimming","Running"});return model;}}//UserController.javapublic class UserController extends MultiActionController {//处理登录请求public ModelAndView login(HttpServletRequest request,HttpServletResponse response, Users user)throws Exception {       //创建一个指定视图逻辑名的ModelAndView实例ModelAndView mav=new ModelAndView("success");    //给mav实例指定数据模型mav.addObject("user", user);//返回mav实例return mav;}//处理显示注册页面请求public ModelAndView toReg(HttpServletRequest request,HttpServletResponse response)throws Exception {Map<String, Object> model=new HashMap<String, Object>();model.put("hobbyList", new String[]{"Swimming","Running"});ModelAndView mav=new ModelAndView("register",model);      return mav;}    //处理注册请求public ModelAndView doReg(HttpServletRequest request,HttpServletResponse response, Users user)throws Exception {//创建一个指定视图逻辑名的ModelAndView实例ModelAndView mav=new ModelAndView("show");   //给mav实例指定数据模型mav.addObject("user", user);        return mav;     }//进行数据格式转换@Overrideprotected void initBinder(HttpServletRequest request,ServletRequestDataBinder binder) throws Exception {binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));}}//applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"></beans>//views.properties  success.(class)=org.springframework.web.servlet.view.JstlView success.url=success.jsp//spring-servlet.xml <?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"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.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" ><!-- 定义控制器LoginController --><bean id="loginController" class="web.LoginController"><!--设置请求数据的封装类型,执行到该控制器时就会自动将数据封装成Users --><property name="commandClass" value="entity.Users" /></bean><!-- 定义控制器RegController --><bean id="regController" class="web.RegController"><!--设置请求数据的封装类型,执行到该控制器时就会自动将数据封装成Users --><property name="commandClass" value="entity.Users" /><!-- 指定表单录入页面 --><property name="formView" value="register" /><!-- 指定注册成功页面 --><property name="successView" value="show" /></bean>  <!-- 定义控制器UserController --><bean id="userController" class="web.UserController"><property name="methodNameResolver" ref="methodNameResolver" /></bean><!--配置UserController使用的方法对应策略ParameterMethodNameResolver,用于解析请求中的特定参数的值,将该值作为方法名调用  --><bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver"><property name="paramName" value="method" /></bean><!-- 配置处理器映射采用SimpleUrlHandlerMapping -->      <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" ><!-- props底下的prop标签内填写的key都是符合转发条件的url值,之后跟的是bean的ID,  如果输入的url值与key值中的url匹配,则执行对应beanID绑定的Controller -->        <property name="mappings"><props><prop key="login.do">loginController</prop><prop key="reg.do">regController</prop><prop key="user.do">userController</prop></props></property></bean><!-- 配置视图解析器,使用InternalResourceViewResolver类作为视图解析器Controller回传ModelAndView,DispatcherServlet将其交给ViewResolver解析 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 属性prefix和suffix分别指定视图文件所在的路径和后缀 --><property name="prefix" value="/" /><property name="suffix" value=".jsp" /></bean> <!-- <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /><bean name="/lc.do" class="web.LoginController"><property name="commandClass" value="entity.Users" /></bean>   --><!-- <bean id="myViewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">  <property name="basename" value="views"/>  </bean>--></beans>//web.xml <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><welcome-file-list><welcome-file>login.jsp</welcome-file></welcome-file-list><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><servlet><servlet-name>spring</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>spring</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>  </web-app>//login.jsp <body><form action="user.do?method=login" method="post">用户名:<input type="text" name="userName" /> 密码:<input type="text"name="userPwd" /> <input type="submit" value="登录"></form></body>//register.jsp  <body><form action="user.do?method=doReg" method="post"><table><tr><td>用户名:</td><td><input type="text" name="userName" /></td></tr><tr><td>密码:</td><td><input type="text" name="userPwd" /></td></tr><tr><td>注册时间:</td><td><input type="text" name="regTime" /></td></tr><tr><td>爱好:</td><td><select name="hobby"><c:forEach items="${hobbyList }" var="hobby"><option value=${hobby}>${hobby }</option></c:forEach></select></td></tr><tr><td></td><td><input type="submit" value="注册"></td></tr></table></form></body>//show.jsp <body>您的注册信息如下: 用户名:${user.userName }<br> 密码:${user.userName }<br> 注册时间为: ${user.regTime }<br> 个人爱好:${user.hobby }<br></body>//success.jsp           <body>欢迎您: ${user.userName }</body>
//基于注解的Spring MVC//目录结构srcentityUsers.javawebFileUpload.javaUserController.javaapplicationContext.xmlmess_en_US.properties  mess_zh_CN.properties   WebContent      META-INF    WEB-INF libannomvc-servlet.xmlweb.xmllogin.jsp  register.jsp    result.jsp  show.jsp    success.jsp //Users.javapublic class Users {private String userName;private String userPwd;private String regTime;  private String hobby;   public Users() {}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getUserPwd() {return userPwd;}public void setUserPwd(String userPwd) {this.userPwd = userPwd;}public String getRegTime() {return regTime;}public void setRegTime(String regTime) {this.regTime = regTime;}public String getHobby() {return hobby;}public void setHobby(String hobby) {this.hobby = hobby;}}//FileUpload.java@Controllerpublic class FileUpload {@RequestMapping(value = "/upload")     public String upload(@RequestParam(value="file", required=false) MultipartFile file, HttpServletRequest request, ModelMap model) {  //服务器端upload文件夹物理路径String path = request.getSession().getServletContext().getRealPath("upload"); //获取文件名String fileName = file.getOriginalFilename();  //实例化一个File对象,表示目标文件(含物理路径)File targetFile = new File(path, fileName);  if(!targetFile.exists()){  targetFile.mkdirs();  }try {  //将上传文件写到服务器上指定的文件file.transferTo(targetFile);  } catch (Exception e) {  e.printStackTrace();  }  model.put("fileUrl", request.getContextPath()+"/upload/"+fileName);  return "result";  }  }//UserController.java@Controller@RequestMapping("/user")//将ModelMap中名为user的属性放到Session中,以便这个属性可以跨请求访问@SessionAttributes("user")public class UserController {//处理登录请求@RequestMapping(value="/login")public String login(Users user,ModelMap model){//将user对象以user为键放入到model中model.put("user", user);return "success";}//@RequestMapping(value="/toReg")//@RequestMapping(value="/reg",method=RequestMethod.GET)@RequestMapping(params="method=toReg")//获取"爱好"下拉列表数据,显示注册页面public String toReg(ModelMap model){model.put("hobbyList", new String[]{"Swimming","Running"});return "register";}//日期格式转换@InitBinderpublic void initBinder(WebDataBinder binder){binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd"), true));}//处理注册请求//@RequestMapping(value="/doReg")  //@RequestMapping(value="/reg",method=RequestMethod.POST)  @RequestMapping(params="method=doReg")public String doReg(Users user, ModelMap model){ //将user对象以user为键放入到model中model.put("user", user);return "redirect:/show.jsp";}}//applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"><!-- 资源文件绑定器 -->         <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> <property name="basename" value="mess" /> </bean></beans>//mess_en_US.properties   username=UserNamepassword=Password//mess_zh_CN.propertiesusername=\u7528\u6237\u540Dpassword=\u5BC6\u7801//annomvc-servlet.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:p="http://www.springframework.org/schema/p"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd" >   <!-- 用来扫描该包内被@Repository、@Service和@Controller的注解类,然后注册到工厂中 --><context:component-scan base-package="com.annotationspringmvc.web" /><!-- 配置视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/" /><property name="suffix" value=".jsp" /></bean><!-- 支持上传文件 -->  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  <!-- 设置上传文件的最大尺寸为1MB -->  <property name="maxUploadSize">  <value>1048576</value>  </property> </bean></beans>//web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><servlet><servlet-name>annomvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>annomvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping>  <!-- 字符过滤器 -->   <filter>   <filter-name>encodingFilter</filter-name>   <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>   <init-param>   <param-name>encoding</param-name>   <param-value>gbk</param-value>   </init-param>   </filter>   <filter-mapping>   <filter-name>encodingFilter</filter-name>   <url-pattern>/*</url-pattern>  */ </filter-mapping>  </web-app>//login.jsp  <body><form action="user/login.do" method="post">用户名 <input type="text" name="userName" /> 密码 <input type="text"name="userPwd" /> <input type="submit" value="登录"></form></body>//register.jsp    <body><form action="user.do?method=doReg" method="post"><table><tr><td>用户名:</td><td><input type="text" name="userName" /></td></tr><tr><td>密码:</td><td><input type="text" name="userPwd" /></td></tr><tr><td>注册时间:</td><td><input type="text" name="regTime" /></td></tr><tr><td>爱好:</td><td><select name="hobby"><c:forEach items="${hobbyList }" var="hobby"><option value=${hobby}>${hobby }</option></c:forEach></select></td></tr><tr><td></td><td><input type="submit" value="注册"></td></tr></table></form></body>//result.jsp   <body>文件名:${fileUrl }</body>//show.jsp   <body>您的注册信息如下: 用户名:${user.userName }<br> 密码:${user.userName }<br> 注册时间为: ${user.regTime }<br> 个人爱好:${user.hobby }<br></body>//success.jsp       <body>欢迎您: ${user.userName }</body>
//新闻发布系统//目录结构srccom.newsactionAdminAction.javaNewsinfoAction.javaTopicAction.javabizimplAdminBizImpl.javaNewsinfoBizImpl.javaTopicBizImpl.javaAdminBiz.javaNewsinfoBiz.javaTopicBiz.javadaoimplAdminDAOImpl.javaNewsinfoDAOImpl.javaTopicDAOImpl.javaAdminDAO.javaNewsinfoDAO.javaTopicDAO.javaentityAdmin.javaNewsinfo.javaPager.javaTopic.javaAdmin.hbm.xmlNewsinfo.hbm.xmlTopic.hbm.xmlapplicationContext.xmlstruts.xmlWebContent   CSSadmin.cssmain.cssread.cssindex-elementsindex_sidebar.jspindex_top.jspnewspagesconsole_elementleft.htmltop.jspadmin.jspnews_add.jspnews_modify.jsptopic_add.jsptopic_list.jsptopic_modify.jspWEB-INFweb.xmlindex.jspnews_read.jspsql//AdminAction.javapublic class AdminAction extends ActionSupport implements SessionAware {//定义用于保存用户登录表单参数的两个属性private String loginName;private String loginPwd;public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}//使用AdminBiz声明一个属性,并添加set方法用于依赖注入AdminBiz adminBiz;    public void setAdminBiz(AdminBiz adminBiz) {this.adminBiz = adminBiz;}//处理登录请求public String validateLogin() throws Exception {         Admin condition=new Admin();condition.setLoginName(loginName);condition.setLoginPwd(loginPwd);     List list=adminBiz.login(condition);if(list.size()>0){//将Admin对象存入Sessionsession.put("admin", list.get(0));           }return "index"; }//注销public String loginout() throws Exception {if(session.get("admin")!=null){session.remove("admin");         }return "index";}Map<String, Object> session;@Overridepublic void setSession(Map<String, Object> session) {this.session=session;            }}//NewsinfoAction.javapublic class NewsinfoAction extends ActionSupport implements RequestAware,SessionAware {/*Integer tid;     //封装表单传递的主题编号public int getTid() {return tid;}public void setTid(int tid) {this.tid = tid;}*/int id;   //封装表单传递的新闻编号public int getId() {return id;}public void setId(int id) {this.id = id;}/*public String title;  //封装分页超链接传递来的新闻标题参数public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}*/Newsinfo newsinfo; //封装表单参数public Newsinfo getNewsinfo() {return newsinfo;}public void setNewsinfo(Newsinfo newsinfo) {this.newsinfo = newsinfo;}//主题业务逻辑接口TopicBiz topicBiz;public void setTopicBiz(TopicBiz topicBiz) {this.topicBiz = topicBiz;} //新闻业务逻辑接口NewsinfoBiz newsinfoBiz;public void setNewsinfoBiz(NewsinfoBiz newsinfoBiz) {this.newsinfoBiz = newsinfoBiz;}//分页实体类private Pager pager;public Pager getPager() {return pager;}public void setPager(Pager pager) {this.pager = pager;}Map<String, Object> request;@Overridepublic void setRequest(Map<String, Object> request) {this.request=request;     }Map<String, Object> session;@Overridepublic void setSession(Map<String, Object> session) {this.session=session;              }   //根据条件和页码获取新闻列表,再转到新闻浏览首页index.jsppublic String index() throws Exception {int curPage=1;if(pager!=null)curPage=pager.getCurPage();List newsinfoList=null;if(newsinfo==null){//如何没有指定查询条件,获取指定页码的新闻列表newsinfoList=newsinfoBiz.getAllNewsinfoByPage(curPage,10);//再获得所有新闻总数,用来初始化分页类Pager对象pager=newsinfoBiz.getPagerOfAllNewsinfo(10);          }else{//如果指定了查询条件,根据条件获取指定页码的新闻列表newsinfoList=newsinfoBiz.getNewsinfoByConditionAndPage(newsinfo, curPage, 10);//再根据条件获得所属新闻总数,用来初始化分页类Pager对象pager=newsinfoBiz.getPagerOfNewsinfo(newsinfo,10);            }//设置Pager对象中的待显示页页码pager.setCurPage(curPage);//将待显示的当前页新闻列表存入request范围request.put("newsinfoList", newsinfoList);//获取所有主题List topicList=topicBiz.getAllTopics();//将主题列表存入request范围request.put("topicList", topicList);return "index";}//从国内新闻和国际新闻中各获取5条记录,再转到index_sidebar.jsp页面public String indexsidebar() throws Exception {  //获取5条国内新闻Newsinfo conditon =new Newsinfo();Topic topic =new Topic();topic.setId(1);conditon.setTopic(topic);     List domesticNewsList=newsinfoBiz.getNewsinfoByConditionAndPage(conditon, 1,5);//获取5条国际新闻topic.setId(2);conditon.setTopic(topic);List internationalNewsList=newsinfoBiz.getNewsinfoByConditionAndPage(conditon, 1,5);request.put("domesticNewsList", domesticNewsList);request.put("internationalNewsList", internationalNewsList);return "index_sidebar";} //浏览新闻内容public String newsread() throws Exception { //根据新闻编号获取新闻Newsinfo newsinfo=newsinfoBiz.getNewsinfoById(id);//将新闻存入request范围request.put("newsinfo", newsinfo);//获取5条国内新闻Newsinfo conditon =new Newsinfo();Topic topic =new Topic();topic.setId(1);conditon.setTopic(topic);List domesticNewsList=newsinfoBiz.getNewsinfoByConditionAndPage(conditon, 1,5);//获取5条国际新闻topic.setId(2);conditon.setTopic(topic);List internationalNewsList=newsinfoBiz.getNewsinfoByConditionAndPage(conditon, 1,5);request.put("domesticNewsList", domesticNewsList);request.put("internationalNewsList", internationalNewsList);//获取所有主题,并存入request范围List topicList=topicBiz.getAllTopics();request.put("topicList", topicList);//转到新闻内容浏览页return "news_read";}  //获取主题列表,再转到新闻添加页public String toNewsAdd() throws Exception {            List topicList=topicBiz.getAllTopics();request.put("topicList", topicList);return "news_add";} //执行新闻添加public String doNewsAdd() throws Exception {//从session中获取Admin对象Admin admin=(Admin)session.get("admin");newsinfo.setAuthor(admin.getLoginName());newsinfo.setCreateDate(new Date());newsinfoBiz.addNews(newsinfo);return "admin";}//获取指定页的新闻列表,再转到新闻管理页public String admin() throws Exception {List newsinfoList=null;int curPage=1;if(pager!=null)curPage=pager.getCurPage();if(newsinfo==null){//如何没有指定查询条件,获取指定页码的新闻列表newsinfoList=newsinfoBiz.getAllNewsinfoByPage(curPage,10);//再获得所有新闻总数,用来初始化分页类Pager对象pager=newsinfoBiz.getPagerOfAllNewsinfo(10);}else{//如果指定了查询条件,根据条件获取指定页码的新闻列表newsinfoList=newsinfoBiz.getNewsinfoByConditionAndPage(newsinfo, curPage, 10);//再根据条件获得所属新闻总数,用来初始化分页类Pager对象pager=newsinfoBiz.getPagerOfNewsinfo(newsinfo,10);            }//设置Pager对象中的待显示页页码pager.setCurPage(curPage);//将待显示的当前页新闻列表存入request范围request.put("newsinfoList", newsinfoList);//获取所有主题List topicList=topicBiz.getAllTopics();//将主题列表存入request范围request.put("topicList", topicList);return "admin";}//执行新闻删除public String deleteNews() throws Exception {newsinfoBiz.deleteNews(id);return "admin";}//根据新闻编号获取新闻,并获取主题列表,再转到新闻修改页public String toNewsModify() throws Exception {//根据新闻编号获取新闻Newsinfo newsinfo=newsinfoBiz.getNewsinfoById(id);//将要修改的新闻存入requestrequest.put("newsinfo", newsinfo);//获取主题列表List topicList=topicBiz.getAllTopics();//将主题列表存入requestrequest.put("topicList", topicList);//转到新闻修改页return "news_modify";}//执行新闻修改public String doNewsModify() throws Exception {//从session中获取Admin对象Admin admin=(Admin)session.get("admin");newsinfo.setAuthor(admin.getLoginName());newsinfo.setCreateDate(new Date());newsinfoBiz.updateNews(newsinfo);return "admin";}}//TopicAction.javapublic class TopicAction extends ActionSupport implements RequestAware {TopicBiz topicBiz;public void setTopicBiz(TopicBiz topicBiz) {this.topicBiz = topicBiz;}  Map<String, Object> request;@Overridepublic void setRequest(Map<String, Object> request) {this.request=request;       }Topic topic;   //封装表单参数public Topic getTopic() {return topic;}public void setTopic(Topic topic) {this.topic = topic;}//添加主题public String addtopic() throws Exception {topicBiz.addTopic(topic);return "admin";}//获取主题列表,再转到主题编辑页 public String topiclist() throws Exception {List topicList=topicBiz.getAllTopics();request.put("topicList", topicList);return "topic_list";}//删除主题public String deletetopic() throws Exception {topicBiz.deleteTopic(topic.getId());return "topiclist";}//根据主题编号获取主题,再转到主题修改页public String toTopicModify() throws Exception {Topic modifyTopic=topicBiz.getTopicById(topic.getId());request.put("modifyTopic", modifyTopic);return "topic_modify";}//执行主题修改public String doTopicModify() throws Exception {topicBiz.updateTopic(topic);return "topiclist";}}//AdminBizImpl.javapublic class AdminBizImpl implements AdminBiz {//使用AdminDAO接口声明属性adminDAO,并添加set方法用于依赖注入AdminDAO adminDAO;       public void setAdminDAO(AdminDAO adminDAO) {this.adminDAO = adminDAO;}@Overridepublic List login(Admin condition) {       return adminDAO.search(condition);}}//NewsinfoBizImpl.javapublic class NewsinfoBizImpl implements NewsinfoBiz {NewsinfoDAO newsinfoDAO;     public void setNewsinfoDAO(NewsinfoDAO newsinfoDAO) {this.newsinfoDAO = newsinfoDAO;}//获取指定页码的新闻列表@Overridepublic List getAllNewsinfoByPage(int page,int pageSize){return newsinfoDAO.getAllNewsinfoByPage(page,pageSize);}//获取所有新闻数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性@Overridepublic Pager getPagerOfAllNewsinfo(int pageSize) {int count= newsinfoDAO.getCountOfAllNewsinfo();//使用分页类Pager定义对象Pager pager=new Pager();//设置pager对象中的perPageRows属性,表示每页显示的记录数pager.setPerPageRows(pageSize);//设置pager对象中的rowCount属性,表示记录总数pager.setRowCount(count);//返回pager对象return pager;}    //根据主题编号、新闻标题等条件和指定页码获取新闻列表@Overridepublic List getNewsinfoByConditionAndPage(Newsinfo condition,int page,int pageSize) {return newsinfoDAO.getNewsinfoByConditionAndPage(condition, page, pageSize);}//根据主题、新闻标题等条件获取新闻数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性@Overridepublic Pager getPagerOfNewsinfo(Newsinfo condition,int pageSize) {int count= newsinfoDAO.getCountOfNewsinfo(condition);//使用分页类Pager定义对象Pager pager=new Pager();//设置pager对象中的perPageRows属性,表示每页显示的记录数pager.setPerPageRows(pageSize);//设置pager对象中的rowCount属性,表示记录总数pager.setRowCount(count);//返回pager对象return pager;}//根据新闻编号获取新闻@Overridepublic Newsinfo getNewsinfoById(int id) {return newsinfoDAO.getNewsinfoById(id);}//添加新闻@Overridepublic void addNews(Newsinfo newsinfo) {newsinfoDAO.addNews(newsinfo);}//删除新闻@Overridepublic void deleteNews(int id) {Newsinfo newsinfo=newsinfoDAO.getNewsinfoById(id);newsinfoDAO.deleteNewsinfo(newsinfo);        }//修改新闻@Overridepublic void updateNews(Newsinfo newsinfo) {newsinfoDAO.updateNews(newsinfo);}}//TopicBizImpl.javapublic class TopicBizImpl implements TopicBiz {TopicDAO topicDAO; public void setTopicDAO(TopicDAO topicDAO) {this.topicDAO = topicDAO;}//获取所有主题@Overridepublic List getAllTopics() {       return topicDAO.getAllTopics();}//通过名称获取主题@Overridepublic List getTopicByName(String name) {return topicDAO.getTopicByName(name);}//通过编号删除主题@Overridepublic void deleteTopic(int id) {    Topic topic=topicDAO.getTopicById(id);topicDAO.deleteTopic(topic);}@Overridepublic int countTopics() {// TODO Auto-generated method stubreturn 0;}//更改主题@Overridepublic void updateTopic(Topic topic) {topicDAO.updateTopic(topic);}//添加主题@Overridepublic void addTopic(Topic topic) {topicDAO.addTopic(topic);}//根据编号获取主题@Overridepublic Topic getTopicById(int id) {return topicDAO.getTopicById(id);}}//AdminBiz.javapublic interface AdminBiz {public List login(Admin condition);}//NewsinfoBiz.javapublic interface NewsinfoBiz {//获取指定页码的新闻列表public List getAllNewsinfoByPage(int page,int pageSize);//获取所有新闻数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性public Pager getPagerOfAllNewsinfo(int pageSize);      //根据主题编号、新闻标题等条件和指定页码获取新闻列表public List getNewsinfoByConditionAndPage(Newsinfo condition,int page,int pageSize);   //根据主题、新闻标题等条件获取新闻数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性public Pager getPagerOfNewsinfo(Newsinfo condition,int pageSize);       //根据新闻编号获取新闻public Newsinfo getNewsinfoById(int id);//添加新闻public void addNews(Newsinfo newsinfo);//修改新闻public void updateNews(Newsinfo newsinfo);//删除新闻public void deleteNews(int id);    }//TopicBiz.javapublic interface TopicBiz {/*//获取所有一级标题public List getFirstTitle();//一级标题发布public void addFirstleveltitle(Firstleveltitle firstleveltitle);//删除指定编号的一级标题public void delFirstleveltitle(int id);*///获取所有主题public List getAllTopics();//通过名称获取主题public List getTopicByName(String name);//通过编号删除主题public void deleteTopic(int id);  //返回主题数目public int countTopics();//更新主题public void updateTopic(Topic topic);//添加主题public void addTopic(Topic topic);//通过编号获取主题public Topic getTopicById(int id);    }//AdminDAOImpl.javapublic class AdminDAOImpl implements AdminDAO {SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic List search(Admin condition) {List list=null;//通过sessionFactory获得SessionSession session=sessionFactory.getCurrentSession();//创建Criteria对象Criteria c=session.createCriteria(Admin.class);//使用Example工具类创建示例对象Example example=Example.create(condition);//为Criteria对象指定示例对象example作为查询条件       c.add(example);         list= c.list();      //执行查询,获得结果        return list;}}//NewsinfoDAOImpl.javapublic class NewsinfoDAOImpl implements NewsinfoDAO {SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}//获取所有新闻列表@Overridepublic List getAllNewsinfo() {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Newsinfo.class);return c.list();}//获取所有新闻数量@Overridepublic Integer getCountOfAllNewsinfo() {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Newsinfo.class);return c.list().size();}//根据指定页码获取新闻列表@Overridepublic List getAllNewsinfoByPage(int page,int pageSize) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Newsinfo.class);c.setFirstResult(pageSize*(page-1));c.setMaxResults(pageSize);c.addOrder(Order.desc("createDate"));return c.list();}//根据新闻编号获取新闻@Overridepublic Newsinfo getNewsinfoById(int id) {Session session=sessionFactory.getCurrentSession();Newsinfo newsinfo=(Newsinfo)session.get(Newsinfo.class, id);return newsinfo;}//根据主题、新闻标题等条件获取所属新闻数量@Overridepublic Integer getCountOfNewsinfo(Newsinfo condition){Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Newsinfo.class);if(condition!=null){if((condition.getTopic()!=null) && (condition.getTopic().getId()!=null))c.add(Restrictions.eq("topic.id", condition.getTopic().getId()));if((condition.getTitle()!=null) && !("".equals(condition.getTitle())))c.add(Restrictions.like("title", condition.getTitle(),MatchMode.ANYWHERE));}return c.list().size();}//根据主题编号、新闻标题等条件和指定页码获取新闻列表@Overridepublic List getNewsinfoByConditionAndPage(Newsinfo condition,int page,int pageSize) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Newsinfo.class);if(condition!=null){if((condition.getTopic()!=null) && (condition.getTopic().getId()!=null))c.add(Restrictions.eq("topic.id", condition.getTopic().getId()));if((condition.getTitle()!=null) && !("".equals(condition.getTitle())))c.add(Restrictions.like("title", condition.getTitle(),MatchMode.ANYWHERE));}c.setFirstResult(pageSize*(page-1));c.setMaxResults(pageSize);c.addOrder(Order.desc("createDate"));return c.list();}//删除新闻@Overridepublic void deleteNewsinfo(Newsinfo newsinfo) {Session session=sessionFactory.getCurrentSession();session.delete(newsinfo);}//添加新闻@Overridepublic void addNews(Newsinfo newsinfo) {Session session=sessionFactory.getCurrentSession();session.saveOrUpdate(newsinfo);      }//修改新闻@Overridepublic void updateNews(Newsinfo newsinfo) {Session session=sessionFactory.getCurrentSession();session.saveOrUpdate(newsinfo);         }}//TopicDAOImpl.javapublic class TopicDAOImpl implements TopicDAO {SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}//获取所有主题@Overridepublic List getAllTopics() {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Topic.class);return c.list();}//通过名称获取主题@Overridepublic List getTopicByName(String name) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Topic.class);c.add(Restrictions.eq("name", name));return c.list();}//通过编号获取主题@Overridepublic Topic getTopicById(int id) {Session session=sessionFactory.getCurrentSession();Topic topic=(Topic)session.get(Topic.class, id);return topic;}//删除主题@Overridepublic void deleteTopic(Topic topic) {Session session=sessionFactory.getCurrentSession();session.delete(topic);}@Overridepublic int countTopics() {// TODO Auto-generated method stubreturn 0;}//修改主题@Overridepublic void updateTopic(Topic topic) {Session session=sessionFactory.getCurrentSession();session.saveOrUpdate(topic);}//添加主题@Overridepublic void addTopic(Topic topic) {Session session=sessionFactory.getCurrentSession();session.saveOrUpdate(topic);}   }//AdminDAO.javapublic interface AdminDAO {public List search(Admin condition);}//NewsinfoDAO.javapublic interface NewsinfoDAO {        //添加新闻public void addNews(Newsinfo newsinfo);//更新新闻public void updateNews(Newsinfo newsinfo);//获取所有新闻列表public List getAllNewsinfo();//获取所有新闻数量public Integer getCountOfAllNewsinfo();   //根据指定页码获取新闻列表public List getAllNewsinfoByPage(int page,int pageSize);//根据新闻编号获取新闻public Newsinfo getNewsinfoById(int id);//根据主题、新闻标题等条件获取所属新闻数量public Integer getCountOfNewsinfo(Newsinfo condition);  //根据主题编号、新闻标题等条件和指定页码获取新闻列表public List getNewsinfoByConditionAndPage(Newsinfo conditon,int page,int pageSize);    //删除新闻对象public void deleteNewsinfo(Newsinfo newsinfo);    }//TopicDAO.javapublic interface TopicDAO {//获取所有主题public List getAllTopics();//通过名称获取主题public List getTopicByName(String name);//通过编号获取主题public Topic getTopicById(int id);    //删除主题public void deleteTopic(Topic topic); //返回主题数目public int countTopics();//更新主题public void updateTopic(Topic topic);//添加主题public void addTopic(Topic topic);}//Admin.javapublic class Admin implements java.io.Serializable {private Integer id;private String loginName;private String loginPwd;public Admin() {}public Admin(String loginName, String loginPwd) {this.loginName = loginName;this.loginPwd = loginPwd;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getLoginName() {return this.loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return this.loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}}//Newsinfo.javapublic class Newsinfo implements java.io.Serializable {private Integer id;private Topic topic;private String title;private String author;private Date createDate;private String content;private String summary;public Newsinfo() {}public Newsinfo(Topic topic, String title, String author,Date createDate, String content, String summary) {this.topic = topic;this.title = title;this.author = author;this.createDate = createDate;this.content = content;this.summary = summary;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public Topic getTopic() {return this.topic;}public void setTopic(Topic topic) {this.topic = topic;}public String getTitle() {return this.title;}public void setTitle(String title) {this.title = title;}public String getAuthor() {return this.author;}public void setAuthor(String author) {this.author = author;}public Date getCreateDate() {return this.createDate;}public void setCreateDate(Date createDate) {this.createDate = createDate;}public String getContent() {return this.content;}public void setContent(String content) {this.content = content;}public String getSummary() {return this.summary;}public void setSummary(String summary) {this.summary = summary;}}//Pager.javapublic class Pager {private int curPage;//待显示页private int perPageRows ;//每页显示的记录数  private int rowCount; //记录总数  private int pageCount; //总页数     public int getCurPage() {return curPage;}public void setCurPage(int currentPage) {this.curPage = currentPage;}public int getPerPageRows() {return perPageRows;}public void setPerPageRows(int perPageRows) {this.perPageRows = perPageRows;}public int getRowCount() {return rowCount;}public void setRowCount(int rowCount) {this.rowCount = rowCount;}public int getPageCount() {return (rowCount+perPageRows-1)/perPageRows;}}//Topic.javapublic class Topic implements java.io.Serializable {private Integer id;private String name;private Set newsinfos = new HashSet(0);public Topic() {}public Topic(String name, Set newsinfos) {this.name = name;this.newsinfos = newsinfos;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Set getNewsinfos() {return this.newsinfos;}public void setNewsinfos(Set newsinfos) {this.newsinfos = newsinfos;}}//Admin.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.news.entity.Admin" table="admin" catalog="news"><id name="id" type="java.lang.Integer"><column name="Id" /><generator class="native"></generator></id><property name="loginName" type="java.lang.String"><column name="LoginName" length="20" not-null="true" /></property><property name="loginPwd" type="java.lang.String"><column name="LoginPwd" length="20" not-null="true" /></property></class></hibernate-mapping>//Newsinfo.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.news.entity.Newsinfo" table="newsinfo" catalog="news"><id name="id" type="java.lang.Integer"><column name="Id" /><generator class="native"></generator></id><many-to-one name="topic" class="com.news.entity.Topic" fetch="select" lazy="false"><column name="Tid" /></many-to-one><property name="title" type="java.lang.String"><column name="Title" length="100" /></property><property name="author" type="java.lang.String"><column name="Author" length="10" /></property><property name="createDate" type="java.util.Date"><column name="CreateDate" length="19" /></property><property name="content" type="java.lang.String"><column name="Content" length="1000" /></property><property name="summary" type="java.lang.String"><column name="Summary" length="300" /></property></class></hibernate-mapping>//Topic.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.news.entity.Topic" table="topic" catalog="news"><id name="id" type="java.lang.Integer"><column name="Id" /><generator class="native"></generator></id><property name="name" type="java.lang.String"><column name="Name" length="10" /></property><set name="newsinfos" inverse="true" lazy="false" cascade="delete"><key><column name="Tid" /></key><one-to-many class="com.news.entity.Newsinfo" /></set></class></hibernate-mapping>//applicationContext.xml<?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop" xmlns:p="http://www.springframework.org/schema/p"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.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/news"></property><property name="username" value="root"></property><property name="password" value="root"></property></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop></props></property><property name="mappingResources"><list><value>com/news/entity/Admin.hbm.xml</value><value>com/news/entity/Topic.hbm.xml</value><value>com/news/entity/Newsinfo.hbm.xml</value></list></property></bean><!--  定义事务通知    --> <tx:advice id="txAdvice" transaction-manager="transactionManager">     <tx:attributes>   <tx:method name="*" propagation="REQUIRED" /> </tx:attributes></tx:advice><!--定义切面,并将事务通知和切面组合(定义哪些方法应用事务规则) --><aop:config><!-- 对com.news.biz包下的所有类的所有方法都应用事务规则 --><aop:pointcut id="bizMethods" expression="execution(* com.news.biz.*.*(..))" /> <!--  将事务通知和切面组合   --> <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" /> </aop:config><!-- 声明Hibernate事务管理器 --><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><tx:annotation-driven transaction-manager="transactionManager" /><!-- 定义TopicDAOImpl类--><bean id="topicDAO" class="com.news.dao.impl.TopicDAOImpl">     <property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义TopicBizImpl类,并为其属性topicDAO注入值--><bean id="topicBiz" class="com.news.biz.impl.TopicBizImpl">   <property name="topicDAO" ref="topicDAO" /></bean><!-- 定义TopicAction,并为其属性topicBiz注入值 --><bean name="topicAction" class="com.news.action.TopicAction" scope="prototype">      <property name="topicBiz" ref="topicBiz" /></bean><!-- 定义NewsinfoDAOImpl类--><bean id="newsinfoDAO" class="com.news.dao.impl.NewsinfoDAOImpl">   <property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义NewsinfoBizImpl类,并为其属性newsinfoDAO注入值--><bean id="newsinfoBiz" class="com.news.biz.impl.NewsinfoBizImpl">   <property name="newsinfoDAO" ref="newsinfoDAO" /></bean><!-- 定义NewinfoAction,并为其中属性topicBiz和"newsinfoBiz"注入值 --><bean name="newsinfoAction" class="com.news.action.NewsinfoAction" scope="prototype">   <property name="topicBiz" ref="topicBiz" /><property name="newsinfoBiz" ref="newsinfoBiz" /></bean><!-- 定义AdminDAOImpl类--><bean id="adminDAO" class="com.news.dao.impl.AdminDAOImpl">   <property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义AdminBizImpl类,并为其adminDAO属性注入值--><bean id="adminBiz" class="com.news.biz.impl.AdminBizImpl">   <property name="adminDAO" ref="adminDAO" /></bean><!-- 定义AdminAction,并为其中属性AdminAction注入值 --><bean name="adminAction" class="com.news.action.AdminAction" scope="prototype"><property name="adminBiz" ref="adminBiz" /></bean></beans>//struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><constant name="struts.i18n.encoding" value="gbk"></constant><!-- 定义一个名称为news的包,继承struts 2的默认包,指定命名空间为"/" --><package name="news" namespace="/" extends="struts-default">  <!-- 为NewsinfoAction类中的indexsidebar()方法配置映射 --><action name="indexsidebar" class="newsinfoAction" method="indexsidebar"><result name="index_sidebar">index-elements/index_sidebar.jsp</result>          </action>     <!-- 为NewsinfoAction类中的index方法配置映射 --><action name="index" class="newsinfoAction" method="index"><result name="index">/index.jsp</result>           </action> <!-- 为NewsinfoAction类中的newsread()方法配置映射,浏览新闻内容 --><action name="newsread" class="newsinfoAction" method="newsread"><result name="news_read">/news_read.jsp</result>          </action><!--为NewsinfoAction类中的toNewsAdd()方法配置映射,显示新闻添加页   --><action name="toNewsAdd" class="newsinfoAction" method="toNewsAdd"><result name="news_add">newspages/news_add.jsp</result>           </action><!-- 为NewsinfoAction类中的doNewsAdd()方法配置映射,执行新闻添加 --><action name="doNewsAdd" class="newsinfoAction" method="doNewsAdd"><result name="admin" type="redirectAction">admin</result>            </action><!-- 显示新闻管理页 --><action name="admin" class="newsinfoAction" method="admin"><result name="admin">newspages/admin.jsp</result>         </action><!--为NewsinfoAction类中的deleteNews()方法配置映射,执行新闻删除   --><action name="deleteNews" class="newsinfoAction" method="deleteNews"><result name="admin" type="redirectAction">admin</result>            </action>     <!--为NewsinfoAction类中的toNewsModify()方法配置映射,显示新闻修改页   --><action name="toNewsModify" class="newsinfoAction" method="toNewsModify"><result name="news_modify">newspages/news_modify.jsp</result>           </action><!--为NewsinfoAction类中的doNewsModify()方法配置映射,执行新闻修改   --><action name="doNewsModify" class="newsinfoAction" method="doNewsModify"><result name="admin" type="redirectAction">admin</result>          </action><!--为TopicAction类中的addtopic()方法配置映射,添加主题   --><action name="addtopic" class="topicAction" method="addtopic"><result name="admin" type="redirectAction">admin</result>          </action><!--为TopicAction类中的topiclist()方法配置映射,显示主题编辑页   --><action name="topiclist" class="topicAction" method="topiclist"><result name="topic_list">newspages/topic_list.jsp</result>         </action><!--为TopicAction类中的deletetopic()方法配置映射,删除主题   --><action name="deletetopic" class="topicAction" method="deletetopic"><result name="topiclist" type="redirectAction">topiclist</result>         </action><!--为TopicAction类中的toTopicModify()方法配置映射,显示主题修改页   --><action name="toTopicModify" class="topicAction" method="toTopicModify"><result name="topic_modify">newspages/topic_modify.jsp</result>         </action><!--为TopicAction类中的doTopicModify()方法配置映射,执行主题修改请求   --><action name="doTopicModify" class="topicAction" method="doTopicModify"><result name="topiclist" type="redirectAction">topiclist</result>           </action><!-- 采用通配符为SecondleveltitleAction类的所有方法配置映射 --><action name="*" class="adminAction" method="{1}"><result name="index" type="redirectAction">index</result>    </action>  </package></struts>                //admin.css@charset "GBK";/* CSS Document */*{ margin:0; padding:0;}body{ font:12px/20px Tahoma;}table{ border-collapse:collapse;}img{ border:0;}li{ list-style:none;}a{ color:#333; text-decoration:underline;}a:hover{ color:#f00; text-decoration:underline;}#header{ clear:both; margin:0 auto; margin-top:15px; width:947px; height:116px; border:1px solid #dfdfdf; background:url(../Images/topbg.gif) repeat-x;}#welcome{ padding:6px 0 0 10px; height:30px;}#nav{ clear:both; padding:0 10px;}#logo{ float:left; background:#f00;}#a_b01{ float:right; width:781px; margin:4px 0 0 0; background:#f00;}#admin_bar{ clear:both; width:947px; margin:14px auto 0; height:25px; background:url(../Images/admin_bar.gif) repeat-x; border:1px #d5d9da solid; border-top:0;}#status{ float:left; width:550px; padding:2px 0 0 20px;}#channel{ float:right; width:360px;}#channel li{ float:left; width:66px; height:22px; line-height:22px; text-align:center; background:url(../Images/channel_bg.gif) no-repeat; margin:0 3px;}#channel li a{ color:#2a3668; text-decoration:none;}#channel li a:hover{ color:#f60; text-decoration:underline;}#channel li#name{ background:none; width:auto;}#main{ clear:both; width:947px; height:100%; overflow:hidden; margin:14px auto 0;}#opt_list{ float:left; width:130px; padding:10px 0 0 14px;}#opt_area{ float:right; width:770px; margin:14px 0 0 0;}#opt_type{ height:28px; padding:4px 0 0 18px; margin:0 0 20px 0; font:600 14px/24px Arial; background:url(../Images/opt_name.gif) no-repeat;}#opt_area p{ margin:10px 0;}.opt_input{ margin-left:6px; border:1px solid #999; height:18px; line-height:18px; width:200px;}.opt_sub{ height:25px; background:url(../Images/opt_sub.gif) repeat-x; text-align:center; border:1px solid #ceced0; font:12px/25px Arial; padding:0 6px; letter-spacing:3px;}.classlist{ clear:both; margin-top:10px;}.classlist li{ position:relative; line-height:22px; background:url(../Images/arrow.gif) no-repeat 0 10px; padding:0 130px 0 8px;}.classlist li.space{ background:none; height:22px;}.classlist li span{ position:absolute; top:-1px; *top:-4px; right:16px;}#site_link{ clear:both; width:947px; margin:35px auto 0; background:#e3e3e3; border-top:2px #0c7eb2 solid; height:26px; line-height:28px; text-align:center;}#site_link a{ color:#000; text-decoration:none;}#site_link a:hover{ color:#f00; text-decoration:underline;}#site_link span{ margin:0 6px;}#friend{ clear:both; width:947px; height:140px; margin:0 auto;}.friend_t{ height:24px; border:1px solid #b3b7ba; background:url(../Images/friend_t.gif) repeat-x; padding:4px 0 0 10px;}.friend_list{ height:110px; overflow:hidden; background:url(../images/firend_bg.gif) repeat-x; border:1px solid #bfd0d5; border-top:0;}.friend_list ul{ margin:14px 10px 0;}.friend_list li{ float:left; margin-right:10px; white-space:nowrap;}#footer{ clear:both; width:947px; margin:14px auto 0; text-align:center;}#footer p{ font:14px/24px Arial; color:#999;}#footer p.copyright{ color:#333; margin-top:15px;}//main.css@charset "GBK";/* CSS Document */*{ margin:0; padding:0;}body{ font:12px/20px Tahoma;}table{ border-collapse:collapse;}img{ border:0;}li{ list-style:none;}a{ color:#335884; text-decoration:none;}a:hover{ color:#f00; text-decoration:underline;}#header{ clear:both; position:relative; margin:0 auto; margin-top:15px; width:947px; height:116px; border:1px solid #dfdfdf; background:url(../Images/topbg.gif) repeat-x;}#top_login{ padding:6px 0 0 10px;}.login_input{ height:19px; line-height:19px; width:118px; border:none; background:url(../Images/login_input.gif) no-repeat; margin:0 14px 0 6px;}.login_sub{ width:51px; height:19px; border:none; background:url(../Images/login_sub.gif) no-repeat;}.login_link{ text-decoration:underline; margin:0 6px;}#friend_logo{ position:absolute; top:6px; right:6px;}#nav{ clear:both;}#logo{ float:left; width:145px; margin:8px 0 0 12px;}#mainnav{ float:right; margin:10px 10px 0 0 ;}#mainnav ul{ clear:both;}#mainnav ul li{ float:left; margin:0 2px; padding-left:6px; background:url(../Images/nav_leftdot.gif) no-repeat 0 8px; line-height:24px;}#mainnav ul li a{ color:#333;}#mainnav ul li.leftLineTop{ background-image:url(../Images/nav_leftline.gif);}#mainnav ul li.headLi{ background:none;}#container{ clear:both; width:947px; height:100%; overflow:hidden; margin:14px auto 0;}.sidebar{ float:left; width:157px;}.sidebar h1{ clear:both;}.side_list{ height:250px; background:url(../Images/sidebarbg.gif) no-repeat; margin:2px 0 12px;}.main{ float:right; width:787px;}.class_type{ background:url(../Images/class_bg.gif) no-repeat right 8px; height:40px; padding:0 0 0 14px;}.content{ float:left; width:780px; border-right:1px solid #eff0f4; margin:16px 0 0 10px;}.class_date{ font:12px/20px Arial; border-bottom:1px solid #d4d6d9; margin-right:10px;}#class_month{ font-weight:600;}#class_month a{ margin:0 7px; *margin:0 5px;}#class_day{ line-height:30px;}.classlist{ clear:both; margin-top:10px;}.classlist li{ position:relative; line-height:22px; background:url(../Images/arrow.gif) no-repeat 0 10px; padding:0 130px 0 8px;}.classlist li.space{ background:none; height:22px;}.classlist li span{ position:absolute; top:-1px; *top:-4px; right:16px;}.picnews{ float:right; width:250px; text-align:center; margin:16px 0 0 0;}.picnews li{ margin-bottom:10px;}#friend{ clear:both; width:947px; height:140px; margin:0 auto;}.friend_t{ height:24px; border:1px solid #b3b7ba; background:url(../Images/friend_t.gif) repeat-x; padding:4px 0 0 10px;}.friend_list{ height:110px; overflow:hidden; background:url(../images/firend_bg.gif) repeat-x; border:1px solid #bfd0d5; border-top:0;}.friend_list ul{ margin:14px 10px 0;}.friend_list li{ float:left; margin-right:10px; white-space:nowrap;}#footer{ clear:both; width:947px; margin:14px auto 0; text-align:center;}#footer p{ font:14px/24px Arial; color:#999;}#footer p.copyright{ color:#333; margin-top:15px;}//read.css@charset "GBK";/* CSS Document */*{ margin:0; padding:0;}body{ font:12px/20px Tahoma;}table{ border-collapse:collapse;}img{ border:0;}li{ list-style:none;}a{ color:#335884; text-decoration:none;}a:hover{ color:#f00; text-decoration:underline;}#header{ clear:both; position:relative; margin:0 auto; margin-top:15px; width:947px; height:116px; border:1px solid #dfdfdf; background:url(../Images/topbg.gif) repeat-x;}#top_login{ padding:6px 0 0 10px;}.login_input{ height:19px; line-height:19px; width:118px; border:none; background:url(../Images/login_input.gif) no-repeat; margin:0 14px 0 6px;}.login_sub{ width:51px; height:19px; border:none; background:url(../Images/login_sub.gif) no-repeat;}.login_link{ text-decoration:underline; margin:0 6px;}#friend_logo{ position:absolute; top:6px; right:6px;}#nav{ clear:both;}#logo{ float:left; width:145px; margin:8px 0 0 12px;}#mainnav{ float:right; margin:10px 10px 0 0 ;}#mainnav ul{ clear:both;}#mainnav ul li{ float:left; margin:0 2px; padding-left:6px; background:url(../Images/nav_leftdot.gif) no-repeat 0 8px; line-height:24px;}#mainnav ul li a{ color:#333;}#mainnav ul li.leftLineTop{ background-image:url(../Images/nav_leftline.gif);}#mainnav ul li.headLi{ background:none;}#container{ clear:both; width:947px; height:100%; overflow:hidden; margin:14px auto 0;}.sidebar{ float:left; width:157px;}.sidebar h1{ clear:both;}.side_list{ height:250px; background:url(../Images/sidebarbg.gif) no-repeat; margin:2px 0 12px;}.main{ float:right; width:787px;}.class_type{ background:url(../Images/class_bg.gif) no-repeat right 8px; height:40px; padding:0 0 0 14px;}.content{ float:right; width:787px; border-right:1px solid #eff0f4; margin:16px 0 0 10px;}.classlist{ clear:both; margin-top:10px;}.classlist li{ position:relative; line-height:22px; background:url(../Images/arrow.gif) no-repeat 0 10px; padding:0 130px 0 8px;}.classlist li.space{ background:none; height:22px;}.classlist li span{ position:absolute; top:-1px; *top:-4px; right:16px;}#friend{ clear:both; width:947px; height:140px; margin:0 auto;}.friend_t{ height:24px; border:1px solid #b3b7ba; background:url(../Images/friend_t.gif) repeat-x; padding:4px 0 0 10px;}.friend_list{ height:110px; overflow:hidden; background:url(../images/firend_bg.gif) repeat-x; border:1px solid #bfd0d5; border-top:0;}.friend_list ul{ margin:14px 10px 0;}.friend_list li{ float:left; margin-right:10px; white-space:nowrap;}#footer{ clear:both; width:947px; margin:14px auto 0; text-align:center;}#footer p{ font:14px/24px Arial; color:#999;}#footer p.copyright{ color:#333; margin-top:15px;}//index_sidebar.jsp<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%><%@ taglib uri='/struts-tags' prefix='s'%><div class="sidebar"><h1><img src="Images/title_1.gif" alt="国内新闻" /></h1><div class="side_list"><ul><!-- 循环显示5条国内新闻  --><s:iterator id="domesticNews" value="#request.domesticNewsList"><li><a href='newsread?id=${domesticNews.id }'><b>${domesticNews.title }</b></a></li><br></s:iterator></ul></div><h1><img src="Images/title_2.gif" alt="国际新闻" /></h1><div class="side_list"><ul><!-- 循环显示5条国际新闻  --><s:iterator id="internationalNews"value="#request.internationalNewsList"><li><a href='newsread?id=${internationalNews.id }'><b>${internationalNews.title }</b></a></li><br></s:iterator></ul></div></div>//index_top.jsp<%@ page language="java" pageEncoding="gbk"%><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%><%@ taglib uri='/struts-tags' prefix='s'%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=GBK" /><meta http-equiv="pragma" content="no-cache" /><meta http-equiv="cache-control" content="no-cache" /><title>新闻中国</title><link href="CSS/main.css" rel="stylesheet" type="text/css" /><script language="javascript">function check(){var loginName = document.getElementById("loginName");var loginPwd = document.getElementById("loginPwd");if(loginName.value == ""){alert("用户名不能为空!请重新填入!");loginName.focus();   return false;}else if(loginPwd.value == ""){alert("密码不能为空!请重新填入!");loginPwd.focus();return false;}return true;}function focusOnLogin(){var loginPwd = document.getElementById("loginPwd");if( loginPwd != null )loginPwd.focus();   }</script></head><body onload="focusOnLogin()"><div id="header"><div id="top_login"><s:if test="#session.admin==null"><form action="validateLogin" method="post" onsubmit="return check()"><label>用户名</label> <input type="text" id="loginName"name="loginName" value="" class="login_input" /> <label>密  码 </label> <input type="password" id="loginPwd"name="loginPwd" value="" class="login_input" /> <inputtype="submit" class="login_sub" value="登录" /> <label id="error"></label></form></s:if><s:if test="#session.admin!=null">欢迎您 :<s:property value="#session.admin.loginName" />  &nbsp; &nbsp; &nbsp;<ahref="/News/admin">登录控制台</a> &nbsp; <a href="loginout">退出</a></s:if></div><div id="nav"><table><tr><td><div id="logo"><img src="Images/logo.jpg" alt="新闻" /></div></td><td><img src="Images/a_b01.gif" alt="" /></td></tr></table><!--mainnav end--></div></div></body></html>//left.html<div id="opt_list"><ul><li><a href="/News/toNewsAdd">添加新闻</a></li><li><a href="/News/admin">编辑新闻</a></li><li><a href="newspages/topic_add.jsp">添加主题</a></li><li><a href="/News/topiclist">编辑主题</a></li></ul></div>//top.jsp<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %><%@ taglib uri='/struts-tags' prefix='s' %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html><meta http-equiv="pragma" content="no-cache" /><meta http-equiv="cache-control" content="no-cache" /><s:if test="#session.admin==null"><script type="text/javascript">alert("当前页面访问受限,请重新登录管理账户!");open("/News/index","_self"); </script></s:if><head><meta http-equiv="Content-Type" content="text/html; charset=GBK" /><title>新闻发布系统管理后台</title><link href="/News/CSS/admin.css" rel="stylesheet" type="text/css" /><div id="header"><div id="welcome">欢迎使用新闻管理系统!</div><div id="nav"><div id="logo"><img src="/News/Images/logo.jpg" alt="新闻中国" /></div><div id="a_b01"><img src="/News/Images/a_b01.gif" alt="" /></div></div></div><div id="admin_bar"><div id="status">Admin: 登录       <a href="/News/loginout">login out</a></div><div id="channel"> </div></div></head><body>//admin.jsp<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri='/struts-tags' prefix='s'%><jsp:include page="console_element/top.jsp" /><script language="javascript">function clickdel(){return confirm("删除请点击确认");} </script><div id="main"><jsp:include page="console_element/left.html" /><div id="opt_area"><s:form ation="admin" method="post" theme="simple">主题:<s:select name="newsinfo.topic.id"list="#request.topicList" listKey="id" listValue="name"cssClass="opt_input" />&nbsp;&nbsp; &nbsp;新闻标题:<s:textfield name="newsinfo.title" /><s:submit value="查询" /></s:form><ul class="classlist"><s:iterator id="news" value="#request.newsinfoList"><li>${news.title}<span>作者:${news.author}     <ahref='toNewsModify?id=${news.id}'>修改</a>     <a href='deleteNews?id=${news.id}' onclick='return clickdel()'>删除</a></span></li></s:iterator><s:if test="pager.curPage>1"><p align="center"><ahref='admin?pager.curPage=1&newsinfo.topic.id=${requestScope.newsinfo.topic.id}&newsinfo.title=${requestScope.newsinfo.title}'>首页</a><ahref='admin?pager.curPage=${pager.curPage-1 }&newsinfo.topic.id=${requestScope.newsinfo.topic.id}&newsinfo.title=${requestScope.newsinfo.title}'>上一页</a></p></s:if><s:if test="pager.curPage < pager.pageCount"><p align="center"><ahref='admin?pager.curPage=${pager.curPage+1}&newsinfo.topic.id=${requestScope.newsinfo.topic.id}&newsinfo.title=${requestScope.newsinfo.title}'>下一页</a><ahref='admin?pager.curPage=${pager.pageCount }&newsinfo.topic.id=${requestScope.newsinfo.topic.id}&newsinfo.title=${requestScope.newsinfo.title}'>尾页</a></p></s:if></ul></div></div>//news_add.jsp<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s' %><jsp:include page="console_element/top.jsp" /><script type="text/javascript">function check(){var title = document.getElementById("title");var author = document.getElementById("author");var summary = document.getElementById("summary");var content = document.getElementById("content");        if(title.value == ""){alert("标题不能为空!!");title.focus();return false;}else if(author.value == ""){alert("作者不能为空!!");author.focus();return false;}else if(summary.value == ""){alert("摘要不能为空!!");summary.focus();return false;}else if(content.value == ""){alert("内容不能为空!!");content.focus();return false;}       return true;}</script><div id="main"><jsp:include page="console_element/left.html" /><div id="opt_area"><h1 id="opt_type"> 添加新闻: </h1><s:form action="doNewsAdd" method="post" onsubmit="return check()"><p>        <s:select name="newsinfo.topic.id" label="主题" list="#request.topicList" listKey="id" listValue="name" cssClass="opt_input" /></p><p><s:textfield label="标题" name="newsinfo.title" cssClass="opt_input"  /></p>      <p><s:textarea label="摘要" name="newsinfo.summary" cols="40" rows="3" /></p><p><s:textarea label="内容" name="newsinfo.content" cols="70" rows="10" />        </p>   <br><p><s:submit value="提交" cssClass="opt_sub" align="center" />  </p> </s:form></div></div>//news_modify.jsp<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri='/struts-tags' prefix='s' %><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %><jsp:include page="console_element/top.jsp" /><script type="text/javascript">function check(){var title = document.getElementById("title");var author = document.getElementById("author");var summary = document.getElementById("summary");var content = document.getElementById("content");if(title.value == ""){alert("标题不能为空!!");title.focus();return false;}else if(author.value == ""){alert("作者不能为空!!");author.focus();return false;}else if(summary.value == ""){alert("摘要不能为空!!");summary.focus();return false;}else if(content.value == ""){alert("内容不能为空!!");content.focus();return false;}        return true;}</script><div id="main"><jsp:include page="console_element/left.html" /><div id="opt_area"><h1 id="opt_type"> 修改新闻: </h1><form action="/News/doNewsModify" method="post" onsubmit="return check()"><s:hidden name="newsinfo.id" value="%{#request.newsinfo.id}" /><p>        <s:select name="newsinfo.topic.id" label="主题" list="#request.topicList" listKey="id" listValue="name" value="%{#request.newsinfo.topic.id }" cssClass="opt_input" /></p><p><s:textfield label="标题" name="newsinfo.title" cssClass="opt_input" value="%{#request.newsinfo.title }"  /></p>      <p><s:textarea label="摘要" name="newsinfo.summary" value="%{#request.newsinfo.summary }" cols="40" rows="3"  /></p><p><s:textarea label="内容" name="newsinfo.content" value="%{#request.newsinfo.content }" cols="70" rows="10" />        </p>   <br><p><s:submit value="提交" cssClass="opt_sub" align="center" />  </p> </form>    </div></div>//topic_add.jsp<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><jsp:include page="console_element/top.jsp" /><%@ taglib uri='/struts-tags' prefix='s' %><script type="text/javascript">function check(){var name = document.getElementById("name");if(name.value == ""){alert("请输入主题名称!!");name.focus();return false;}        return true;}</script><div id="main"><jsp:include page="console_element/left.html" /><div id="opt_area"><h1 id="opt_type"> 添加主题: </h1><s:form action="/addtopic" method="post" onsubmit="return check()"><p><s:textfield label="主题名称" id="name" name="topic.name" cssClass="opt_input" /></p> <p><s:submit value="提交" cssClass="opt_sub" /></p>     </s:form></div></div>//topic_list.jsp<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %><%@ taglib uri='/struts-tags' prefix='s' %><jsp:include page="console_element/top.jsp" /><script language="javascript">function clickdel(){return confirm("删除后,主题下的文章也会删除,确认删除吗?");} </script><div id="main"><jsp:include page="console_element/left.html" /><div id="opt_area"><ul class="classlist">  <s:iterator id="topic" value="#request.topicList"><li>      ${topic.name}     <a href='toTopicModify?topic.id=${topic.id}'>修改</a>      <a href='deletetopic?topic.id=${topic.id}'  onclick='return clickdel()'>删除</a> </li></s:iterator></ul></div></div>//topic_modify.jsp<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><jsp:include page="console_element/top.jsp" /><%@ taglib uri='/struts-tags' prefix='s' %><script type="text/javascript">function check(){var name = document.getElementById("name");if(name.value == ""){alert("请输入主题名称!!");name.focus();return false;}      return true;}</script><div id="main"><jsp:include page="console_element/left.html" /><div id="opt_area"><h1 id="opt_type">修改主题: </h1><s:form action="/doTopicModify" method="post" onsubmit="return check()"><s:hidden name="topic.id" value="%{#request.modifyTopic.id}" /><p><s:textfield label="主题名称" id="name" name="topic.name" value="%{#request.modifyTopic.name }" cssClass="opt_input" /></p> <p><s:submit value="提交" cssClass="opt_sub" /></p>     </s:form></div></div>//web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><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>  </web-app>//index.jsp<%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %><%@ taglib uri='/struts-tags' prefix='s' %><jsp:include page="index-elements/index_top.jsp" /><div id="container"><s:action name="indexsidebar" namespace="/" executeResult="true" /><div class="main"><div class="class_type"> <img src="Images/class_type.gif" alt="新闻中心" /> </div><div class="content"><ul class="class_date"><li id='class_month'>    <!-- 循环显示主题列表 -->      <s:iterator id="topic" value="#request.topicList"><a href="index?newsinfo.topic.id=${topic.id}"><b>${topic.name}</b></a></s:iterator></ul><ul class="classlist"> <!-- 循环显示当前页新闻列表 -->     <s:iterator id="news" value="#request.newsinfoList"><li><a href="newsread?id=${news.id}"> ${news.title} </a><span> ${newsinfo.createDate}</span></li></s:iterator>     <br> <br><!-- 分页超链接部分 --><s:if test="pager.curPage>1"><p align="center"><a href='index?pager.curPage=1&newsinfo.topic.id=${requestScope.newsinfo.topic.id}'>首页</a><a href='index?pager.curPage=${pager.curPage-1 }&newsinfo.topic.id=${requestScope.newsinfo.topic.id}'>上一页</a></p></s:if>       <s:if test="pager.curPage < pager.pageCount"><p align="center"><a href='index?pager.curPage=${pager.curPage+1}&newsinfo.topic.id=${requestScope.newsinfo.topic.id}'>下一页</a><a href='index?pager.curPage=${pager.pageCount }&newsinfo.topic.id=${requestScope.newsinfo.topic.id}'>尾页</a></p></s:if></ul></div>   </div></div>//news_read.jsp<%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c"%><%@ taglib uri='/struts-tags' prefix='s'%><jsp:include page="index-elements/index_top.jsp" /><link href="CSS/read.css" rel="stylesheet" type="text/css" /><script type="text/javascript">function checkComment(){var cauthor = document.getElementById("cauthor");var content = document.getElementById("ccontent");if(cauthor.value == ""){alert("用户名不能为空!!");return false;}else if(content.value == ""){alert("评论内容不能为空!!");return false;}return true;}</script><div id="container"><jsp:include page="index-elements/index_sidebar.jsp"></jsp:include><div class="main"><div class="class_type"><img src="Images/class_type.gif" alt="新闻中心" /></div><div class="content"><ul class="class_date"><li id='class_month'><s:iterator id="topic"value="#request.topicList"><a href="index?tid=${topic.id}"><b>${topic.name}</b></a></s:iterator></ul><ul class="classlist"><table width="80%" align="center"><tr width="100%"><td colspan="2" align="center">${newsinfo.title}</td></tr><tr><td colspan="2"><hr /></td></tr><tr><td align="center">作者:${newsinfo.author}&nbsp;&nbsp; 类型:<ahref="index?tid=${newsinfo.topic.id}">${newsinfo.topic.name}</a>发布时间:${newsinfo.createDate}</td></tr><tr><td align="left"><strong>摘要:${newsinfo.summary}</strong></td></tr><tr><td colspan="2" align="center"></td></tr><tr><td colspan="2">${newsinfo.content}</td></tr><tr><td colspan="2"><hr /></td></tr></table></ul></div></div></div>//sqlCREATE TABLE `admin` (`Id` int(4) NOT NULL AUTO_INCREMENT,`LoginName` varchar(20) NOT NULL,`LoginPwd` varchar(20) NOT NULL,PRIMARY KEY (`Id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;INSERT INTO `admin` VALUES ('1', 'admin', '123456');CREATE TABLE `topic` (`Id` int(4) NOT NULL AUTO_INCREMENT,`Name` varchar(10) DEFAULT NULL,PRIMARY KEY (`Id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;INSERT INTO `topic` VALUES ('1', '国内新闻');INSERT INTO `topic` VALUES ('2', '国际新闻');INSERT INTO `topic` VALUES ('3', '娱乐新闻');INSERT INTO `topic` VALUES ('4', '科技新闻');INSERT INTO `topic` VALUES ('5', '社会新闻');CREATE TABLE `newsinfo` (`Id` int(4) NOT NULL AUTO_INCREMENT,`Title` varchar(100) DEFAULT NULL,`Author` varchar(10) DEFAULT NULL,`CreateDate` datetime DEFAULT NULL,`Content` varchar(10000) DEFAULT NULL,`Summary` varchar(500) DEFAULT NULL,`Tid` int(4) DEFAULT NULL,PRIMARY KEY (`Id`),KEY `Tid` (`Tid`),CONSTRAINT `newsinfo_ibfk_1` FOREIGN KEY (`Tid`) REFERENCES `topic` (`Id`)) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8;
//网上订餐系统//目录结构srccom.restrant//actionCartAction.javaMealAction.javaOrdersAction.javaUserAction.java//biz//implMealBizImpl.javaMealSeriesBizImpl.javaOrderDtsBizImpl.javaOrdersBizImpl.javaUserBizImpl.javaMealBiz.javaMealSeriesBiz.javaOrderDtsBiz.javaOrdersBiz.javaUserBiz.java//dao//implMealDAOImpl.javaMealSeriesDAOImpl.javaOrderDtsDAOImpl.javaOrdersDAOImpl.javaUserDAOImpl.javaMealDAO.java       MealSeriesDAO.java      OrderDtsDAO.javaOrdersDAO.javaUserDAO.java      //entityAdmin.javaCartItemBean.javaMeal.javaMealseries.javaOrderdts.javaOrders.javaPager.javaUsers.javaAdmin.hbm.xmlMeal.hbm.xmlMealseries.hbm.xmlOrderdts.hbm.xmlOrders.hbm.xmlUsers.hbm.xml//filterAuthFilter.java//interceptorAuthorityInterceptor.javaapplicationContext.xml    struts.xml  css     styles.css  WEB-INF     web.xmladdMeal.jsp      details.jsp     index.jsp       login.jsp       managemeal.jsp      manageorders.jsp        modifyMyInfo.jsp        myorders.jsp        myordersdetails.jsp     register.jsp        shopCart.jsp        show.jsp        updateMeal.jsp      //CartAction.javapublic class CartAction extends ActionSupport implements SessionAware {    //封装表单传递来的餐品编号mealId参数值private Integer mealId;public void setMealId(Integer mealId) {this.mealId = mealId;}    public Integer getMealId() {return mealId;}//封装表单传递来的餐品数量quantity参数值int quantity;   public int getQuantity() {return quantity;}public void setQuantity(int quantity) {this.quantity = quantity;}MealBiz mealBiz;public void setMealBiz(MealBiz mealBiz) {this.mealBiz = mealBiz;}MealSeriesBiz mealSeriesBiz; public void setMealSeriesBiz(MealSeriesBiz mealSeriesBiz) {this.mealSeriesBiz = mealSeriesBiz;}Map<String, Object> session;@Overridepublic void setSession(Map<String, Object> session) {this.session=session;}//将餐品添加到购物车public String addtoshopcart() throws Exception {//从session中取出购物车,放入Map对象cart中Map cart=(Map)session.get("cart");//获取当前要添加到购物车的菜品Meal meal=mealBiz.getMealByMealId(mealId);//如果购物车不存在,则创建购物车(实例化HashMap类),并存入session中if(cart==null){cart=new HashMap();session.put("cart", cart);}//如果存在购物车,则判断餐品是否在购物车中CartItemBean cartItem=(CartItemBean)cart.get(meal.getMealId());if(cartItem!=null){//如果餐品在购物车中,更新其数量cartItem.setQuantity(cartItem.getQuantity()+1);}else{//否则,创建一个条目到Map中cart.put(meal.getMealId(),new CartItemBean(meal,1));}//页面转到shopCart.jsp,显示购物车return "shopCart";}  //更改数量public String updateSelectedQuantity() throws Exception {//从session中取出购物车,放入Map对象cart中Map cart=(Map)session.get("cart");CartItemBean cartItem=(CartItemBean)cart.get(mealId);cartItem.setQuantity(quantity);return "shopCart";}//从购物车中移除指定编号订单public String deleteSelectedOrders() throws Exception {//从session中取出购物车,放入Map对象cart中Map cart=(Map)session.get("cart");cart.remove(mealId);return "shopCart";}  //清空购物车public String clearCart() throws Exception {//从session中取出购物车,放入Map对象cart中Map cart=(Map)session.get("cart");cart.clear();return "shopCart";}  }//MealAction.javapublic class MealAction extends ActionSupport implements RequestAware {//定义Meal类型属性,用于封装表单参数private Meal meal; public Meal getMeal() {return meal;}public void setMeal(Meal meal) {this.meal = meal;}MealBiz mealBiz;public void setMealBiz(MealBiz mealBiz) {this.mealBiz = mealBiz;}MealSeriesBiz mealSeriesBiz;   public void setMealSeriesBiz(MealSeriesBiz mealSeriesBiz) {this.mealSeriesBiz = mealSeriesBiz;}//分页实体类private Pager pager;public Pager getPager() {return pager;}public void setPager(Pager pager) {this.pager = pager;}private File doc;                //封装上传文件的属性private String docFileName;      //封装上传文件的名称属性private String docContentType;   //封装上传文件的类型属性Map<String, Object> request;@Overridepublic void setRequest(Map<String, Object> request) {this.request=request;     }//获取指定页码、符合查询条件的餐品列表,再转到餐品显示页show.jsppublic String toShowMeal() throws Exception {      int curPage=1;if(pager!=null)curPage=pager.getCurPage();List mealList=null;     if(meal!=null){  //meal不为空,表示表单中输入了查询条件,此时将获取指定页码、符合查询条件的餐品列表mealList=mealBiz.getMealByCondition(meal, curPage);//统计符合查询条件的餐品数量,初始化分页类Pager对象,设置perPageRows和rowCount属性pager=mealBiz.getPagerOfMeal(meal);//将查询条件存入request范围,将作为分页超链接中的参数值if((meal.getMealseries()!=null) && (meal.getMealseries().getSeriesId()!=null))request.put("seriesId", new Integer(meal.getMealseries().getSeriesId()) );if((meal.getMealName()!=null) && !meal.getMealName().equals(""))request.put("mealName", meal.getMealName());}else{    //meal为空,表示没有指定查询条件,此时将获取指定页码的餐品列表mealList=mealBiz.getAllMeal(curPage);//获取所有菜品数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性pager=mealBiz.getPagerOfMeal();}//设置Pager对象中的待显示页页码pager.setCurPage(curPage);//将查询获得的列表存入request范围request.put("mealList", mealList);//获取菜系列表,存入request范围List mealSeriesList=mealSeriesBiz.getMealSeries();request.put("mealSeriesList", mealSeriesList);      return "toShowMeal";}public String toShowDetails() throws Exception {     Meal aMeal=mealBiz.getMealByMealId(meal.getMealId());request.put("aMeal", aMeal);        return "toShowDetails";}//获取菜系列表,再转到添加餐品页addMeal.jsppublic String toAddMeal() throws Exception {       List mealSeriesList=mealSeriesBiz.getMealSeries();request.put("mealSeriesList", mealSeriesList); return "addMeal";}//上传餐品图片、添加餐品信息,再转到toShowMealpublic String doAddMeal() throws Exception {if(docFileName!=null){     //判断是否选择了上传图片// 得到当前web工程下的upload目录的在本机的绝对路径,如果没有这个文件夹则会创建        String targetDirectory = ServletActionContext.getServletContext().getRealPath("/mealimages");          //重命名上传文件         String targetFileName = generateFileName(docFileName);          //在指定目录创建文件          File target = new File(targetDirectory, targetFileName);          //把要上传的文件copy过去         FileUtils.copyFile(doc, target);      meal.setMealImage(targetFileName);mealBiz.addMeal(meal);}       return "toShowMeal";}//重命名上传文件    public String generateFileName(String fileName){          String formatDate = new SimpleDateFormat("yyMMddHHmmss").format(new Date());          int random = new Random().nextInt(10000);          int position = fileName.lastIndexOf(".");          String extension = fileName.substring(position);           return formatDate + random + extension;      }    //获取指定页码、符合查询条件的餐品列表,再转到菜品管理页managemeal.jsppublic String toManageMeal() throws Exception {      int curPage=1;if(pager!=null)curPage=pager.getCurPage();List mealList=null;     if(meal!=null){mealList=mealBiz.getMealByCondition(meal, curPage);pager=mealBiz.getPagerOfMeal(meal);if((meal.getMealseries()!=null) && (meal.getMealseries().getSeriesId()!=null))request.put("seriesId", new Integer(meal.getMealseries().getSeriesId()) );if((meal.getMealName()!=null) && !meal.getMealName().equals(""))request.put("mealName", meal.getMealName());}else{mealList=mealBiz.getAllMeal(curPage);//获取所有菜品数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性pager=mealBiz.getPagerOfMeal();}      //设置Pager对象中的待显示页页码pager.setCurPage(curPage);request.put("mealList", mealList);//获取菜系列表,存入request范围List mealSeriesList=mealSeriesBiz.getMealSeries();request.put("mealSeriesList", mealSeriesList);     return "managemeal";}//获取要修改的餐品对象,存入request范围,再转到餐品信息修改页public String toUpdateMeal() throws Exception { //获取要修改的餐品对象,存入request范围Meal updatedMeal=mealBiz.getMealByMealId(meal.getMealId());request.put("updatedMeal", updatedMeal);       //获取菜系列表,存入request范围List mealSeriesList=mealSeriesBiz.getMealSeries();request.put("mealSeriesList", mealSeriesList);  return "updateMeal";}//执行餐品信息修改,再转到toShowMealpublic String doUpdateMeal() throws Exception {   if(docFileName!=null){// 得到当前web工程下的upload目录的在本机的绝对路径,如果没有这个文件夹则会创建        String targetDirectory = ServletActionContext.getServletContext().getRealPath("/mealimages");          //重命名上传文件         String targetFileName = generateFileName(docFileName);          //在指定目录创建文件          File target = new File(targetDirectory, targetFileName);          //把要上传的文件copy过去         FileUtils.copyFile(doc, target);        //修改餐品图片meal.setMealImage(targetFileName);}//更新餐品对象mealBiz.updateMeal(meal);return "toShowMeal";      } //处理删除餐品对象请求,再转到toManageMealpublic String deleteMeal() throws Exception {  mealBiz.deleteMeal(meal.getMealId());return "toManageMeal";}public File getDoc() {return doc;}public void setDoc(File doc) {this.doc = doc;}public String getDocFileName() {return docFileName;}public void setDocFileName(String docFileName) {this.docFileName = docFileName;}public String getDocContentType() {return docContentType;}public void setDocContentType(String docContentType) {this.docContentType = docContentType;}}//OrdersAction.javapublic class OrdersAction extends ActionSupport implements RequestAware,SessionAware {OrdersBiz ordersBiz;   public void setOrdersBiz(OrdersBiz ordersBiz) {this.ordersBiz = ordersBiz;}OrderDtsBiz orderDtsBiz;public void setOrderDtsBiz(OrderDtsBiz orderDtsBiz) {this.orderDtsBiz = orderDtsBiz;}//封装“查看”超链接传递来的参数oid的值int oid;public int getOid() {return oid;}public void setOid(int oid) {this.oid = oid;}//封装manageorders.jsp页面中根据订单号和订单状态查询时传递来的参数值private Orders orders;public Orders getOrders() {return orders;}public void setOrders(Orders orders) {this.orders = orders;}//处理生成新订单请求public String addOrders() throws Exception {Orders orders=new Orders();orders.setOrderState("未处理");orders.setOrderTime(new Date());Users user=(Users)session.get("user");orders.setUsers(user);orders.setOrderPrice((Double)session.get("sumPrice"));Map cart=(HashMap)session.get("cart");        Iterator iter = cart.keySet().iterator();while (iter.hasNext()) {Object key = iter.next();CartItemBean cartItem = (CartItemBean)cart.get(key);Orderdts orderDts=new Orderdts();orderDts.setMeal(cartItem.getMeal());orderDts.setMealCount(cartItem.getQuantity());orderDts.setMealPrice(cartItem.getMeal().getMealPrice());orderDts.setOrders(orders);orderDtsBiz.addOrderDts(orderDts);}session.remove("cart");return "show";}//分页实体类private Pager pager;public Pager getPager() {return pager;}public void setPager(Pager pager) {this.pager = pager;}//获取指定用户的订单列表,再转到我的订单页myorders.jsppublic String toMyOrders() throws Exception {Users user=(Users)session.get("user");List myOrdersList=ordersBiz.getOrdersByUserId(user.getId());request.put("myOrdersList", myOrdersList);return "myorders";}//根据订单主表编号获取订单明细列表,再转到我的订单明细页myordersdetails.jsppublic String toOrdersDetails() throws Exception {List ordersDtsList= orderDtsBiz.getOrderDtsByOid(oid);request.put("ordersDtsList", ordersDtsList);return "toOrdersDetails";}//删除指定编号的订单,再转到toMyOrderspublic String deleteOrders() throws Exception {      //调用业务方法从数据表中删除订单及明细ordersBiz.deleteOrdersByOid(oid);return "toMyOrders";}//获取所有订单列表,再转到订单处理页manageorders.jsppublic String toManageOrders() throws Exception {int curPage=1;if(pager!=null)curPage=pager.getCurPage();List ordersList=null;       if(orders!=null){//指定查询条件,则获取满足条件、指定页的订单列表ordersList=ordersBiz.getOrdersByCondition(orders, curPage);pager=ordersBiz.getPagerOfOrders(orders);//将查询条件存入request范围,将作为分页超链接中的参数值if(orders.getOid()!=null)request.put("oid", orders.getOid());if((orders.getOrderState()!=null) && !orders.getOrderState().equals(""))request.put("orderState", orders.getOrderState());}else{//没有指定查询条件,获取指定页的订单列表ordersList=ordersBiz.getAllOrders(curPage);//获取所有菜品数量,用来初始化分页类Pager对象pager=ordersBiz.getPagerOfOrders();}        //设置Pager对象中的待显示页页码pager.setCurPage(curPage);//将订单列表存入request范围request.put("ordersList", ordersList);return "manageorders";}//处理订单,再转到toManageOrderspublic String handleOrders() throws Exception {     //调用业务方法从数据表中删除订单及明细Orders orders=ordersBiz.getOrdersByOid(oid);orders.setOrderState("已处理");ordersBiz.handleOrders(orders);return "toManageOrders";}Map<String, Object> session;@Overridepublic void setSession(Map<String, Object> session) {this.session=session;      }Map<String, Object> request;@Overridepublic void setRequest(Map<String, Object> request) {this.request=request;      }}//UserAction.javapublic class UserAction extends ActionSupport implements RequestAware,SessionAware {//用于封装登录页面登录用户类型(普通用户或Admin)private String type;   public String getType() {return type;}public void setType(String type) {this.type = type;}//定义用于保存用户登录表单参数的两个属性private String loginName;private String loginPwd;public String getLoginName() {return loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}//封装注册表单参数private  Users user; public Users getUser() {return user;}public void setUser(Users user) {this.user = user;}UserBiz userBiz;   public void setUserBiz(UserBiz userBiz) {this.userBiz = userBiz;}//登录验证    public String validateLogin() throws Exception {List list;if("userlogin".equals(type)){       //用户登录验证Users condition=new Users();condition.setLoginName(loginName);condition.setLoginPwd(loginPwd); list=userBiz.login(condition);if(list.size()>0){//将用户对象存入Sessionsession.put("user", list.get(0)); }}if("adminlogin".equals(type)){        //Admin登录验证Admin condition=new Admin();condition.setLoginName(loginName);condition.setLoginPwd(loginPwd);    list=userBiz.login(condition);if(list.size()>0){//将用户对象存入Sessionsession.put("admin", list.get(0));    }}//转到名为toShowMeal的Actionreturn "toShowMeal"; }//用户注册public String register() throws Exception {userBiz.addUsers(user);return "show";}//修改个人信息public String modifyUsers() throws Exception {userBiz.modifyUsers(user);return "show";}//用户注销public String logOut() throws Exception {if("userlogout".equals(type)){session.remove("user");}if("adminlogout".equals(type)){session.remove("admin");}return "show";}Map<String, Object> session;@Overridepublic void setSession(Map<String, Object> session) {this.session=session;}Map<String, Object> request;@Overridepublic void setRequest(Map<String, Object> request) {this.request=request;}}//MealBizImpl.javapublic class MealBizImpl implements MealBiz {MealDAO mealDAO;public void setMealDAO(MealDAO mealDAO) {this.mealDAO = mealDAO;}@Overridepublic List getAllMeal(int page) {return mealDAO.getAllMeal(page);}@Overridepublic Pager getPagerOfMeal() {int count= mealDAO.getCountOfAllMeal();//使用分页类Pager定义对象Pager pager=new Pager();//设置pager对象中的perPageRows属性,表示每页显示的记录数pager.setPerPageRows(6);//设置pager对象中的rowCount属性,表示记录总数pager.setRowCount(count);//返回pager对象return pager;}/*@Overridepublic List getMealBySeries(int mealSeries, int page) {return mealDAO.getMealBySeries(mealSeries, page);}*//*@Overridepublic Pager getPagerOfMeal(int mealSeries) {int count= mealDAO.getCountOfMeal(mealSeries);//使用分页类Pager定义对象Pager pager=new Pager();//设置pager对象中的perPageRows属性,表示每页显示的记录数pager.setPerPageRows(6);//设置pager对象中的rowCount属性,表示记录总数pager.setRowCount(count);//返回pager对象return pager;}*/@Overridepublic List getMealByCondition(Meal condition, int page) {      return mealDAO.getMealByCondition(condition, page);}//统计符合查询条件的餐品数量,初始化分页类Pager对象,设置perPageRows和rowCount属性@Overridepublic Pager getPagerOfMeal(Meal condition) {int count= mealDAO.getCountOfMeal(condition);//使用分页类Pager定义对象Pager pager=new Pager();//设置pager对象中的perPageRows属性,表示每页显示的记录数pager.setPerPageRows(6);//设置pager对象中的rowCount属性,表示记录总数pager.setRowCount(count);//返回pager对象return pager;}@Overridepublic Meal getMealByMealId(int mealId) {return mealDAO.getMealByMealId(mealId);}//添加餐品@Overridepublic void addMeal(Meal meal) {mealDAO.addMeal(meal);     }//删除指定编号菜品@Overridepublic void deleteMeal(int mealId) {       Meal meal=mealDAO.getMealByMealId(mealId);mealDAO.deleteMeal(meal);}//修改餐品@Overridepublic void updateMeal(Meal meal) {mealDAO.updateMeal(meal);       }}//MealSeriesBizImpl.javapublic class MealSeriesBizImpl implements MealSeriesBiz {MealSeriesDAO mealSeriesDAO;public void setMealSeriesDAO(MealSeriesDAO mealSeriesDAO) {this.mealSeriesDAO = mealSeriesDAO;}@Overridepublic List getMealSeries() {return mealSeriesDAO.getMealSeries();}}//OrderDtsBizImpl.javapublic class OrderDtsBizImpl implements OrderDtsBiz {OrderDtsDAO orderDtsDAO;    public void setOrderDtsDAO(OrderDtsDAO orderDtsDAO) {this.orderDtsDAO = orderDtsDAO;}//生成订单子表(订单明细)@Overridepublic void addOrderDts(Orderdts dts) {orderDtsDAO.addOrderDts(dts);        }//根据订单主表编号获取订单明细列表@Overridepublic List getOrderDtsByOid(int oid) {        return orderDtsDAO.getOrderDtsByOid(oid);}}//OrdersBizImpl.javapublic class OrdersBizImpl implements OrdersBiz {OrdersDAO ordersDAO;public void setOrdersDAO(OrdersDAO ordersDAO) {this.ordersDAO = ordersDAO;}//删除指定编号的订单@Overridepublic void deleteOrdersByOid(int oid) {Orders orders=ordersDAO.getOrdersByOid(oid);  ordersDAO.deleteOrders(orders);}@Overridepublic Orders getOrdersByOid(int oid) {return ordersDAO.getOrdersByOid(oid);}//获取指定用户的订单列表@Overridepublic List getOrdersByUserId(int userId) {return ordersDAO.getOrdersByUserId(userId);}//处理订单@Overridepublic void handleOrders(Orders orders) {ordersDAO.updateOrders(orders);}//获取指定页显示的订单列表@Overridepublic List getAllOrders(int page) {return ordersDAO.getAllOrders(page);}//获取所有订单数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性@Overridepublic Pager getPagerOfOrders() {int count= ordersDAO.getCountOfAllOrders();//使用分页类Pager定义对象Pager pager=new Pager();//设置pager对象中的perPageRows属性,表示每页显示的记录数pager.setPerPageRows(6);//设置pager对象中的rowCount属性,表示记录总数pager.setRowCount(count);//返回pager对象return pager;}//获取满足条件、指定页显示的订单列表@Overridepublic List getOrdersByCondition(Orders condition, int page) {return ordersDAO.getOrdersByCondition(condition, page);}//获取满足条件的订单数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性@Overridepublic Pager getPagerOfOrders(Orders condition) {int count= ordersDAO.getCountOfOrders(condition);//使用分页类Pager定义对象Pager pager=new Pager();//设置pager对象中的perPageRows属性,表示每页显示的记录数pager.setPerPageRows(6);//设置pager对象中的rowCount属性,表示记录总数pager.setRowCount(count);//返回pager对象return pager;}}//UserBizImpl.javapublic class UserBizImpl implements UserBiz {UserDAO userDAO;public void setUserDAO(UserDAO userDAO) {this.userDAO = userDAO;}@Overridepublic List login(Users condition) {return userDAO.search(condition);}//添加用户@Overridepublic void addUsers(Users users) {userDAO.addUsers(users);      }//Admin登录验证@Overridepublic List login(Admin condition) {return userDAO.search(condition);}//修改个人信息@Overridepublic void modifyUsers(Users users) {userDAO.modifyUsers(users);}}//MealBiz.javapublic interface MealBiz {//获取指定页显示的餐品列表public List getAllMeal(int page);//获取所有菜品数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性public Pager getPagerOfMeal();  //获取指定菜系和指定页显示的餐品列表//public List getMealBySeries(int mealSeries,int page);//获取指定菜系的菜品数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性//public Pager getPagerOfMeal(int mealSeries);//根据查询条件,获取指定页显示的餐品列表public List getMealByCondition(Meal condition,int page);//统计符合查询条件的餐品数量,初始化分页类Pager对象,设置perPageRows和rowCount属性public Pager getPagerOfMeal(Meal condition);//根据编号加载菜品public Meal getMealByMealId(int mealId);//添加餐品public void addMeal(Meal meal);//删除指定编号菜品public void deleteMeal(int mealId);//修改餐品public void updateMeal(Meal meal);}//MealSeriesBiz.javapublic interface MealSeriesBiz {//获取菜系列表public List getMealSeries();}//OrderDtsBiz.javapublic interface OrderDtsBiz {//生成订单子表(订单明细)public void addOrderDts(Orderdts dts);//根据订单主表编号获取订单明细列表public List getOrderDtsByOid(int oid);    }//OrdersBiz.javapublic interface OrdersBiz {//根据订单编号加载订单对象public Orders getOrdersByOid(int oid);//获取指定用户的订单列表public List getOrdersByUserId(int userId);//获取指定页显示的订单列表public List getAllOrders(int page);//获取所有订单数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性public Pager getPagerOfOrders();   //获取满足条件、指定页显示的订单列表public List getOrdersByCondition(Orders condition,int page);//获取满足条件的订单数量,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性public Pager getPagerOfOrders(Orders condition);//删除指定编号的订单public void deleteOrdersByOid(int oid);//处理订单public void handleOrders(Orders orders);  }//UserBiz.javapublic interface UserBiz {//用户登录验证public List login(Users condition);//添加用户public void addUsers(Users users);//Admin登录验证public List login(Admin condition);//修改个人信息public void modifyUsers(Users users);}//MealDAOImpl.javapublic class MealDAOImpl implements MealDAO {SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}//获取指定页显示的餐品列表@Overridepublic List getAllMeal(int page) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Meal.class);c.setFirstResult(6*(page-1));c.setMaxResults(6);return c.list();}//统计所有餐品总数@Overridepublic Integer getCountOfAllMeal() {Integer count=null;try{Session session=sessionFactory.getCurrentSession();String hql="select count(s) from Meal s";Query query=session.createQuery(hql);count= Integer.parseInt(query.uniqueResult().toString()) ;}catch(Exception e){e.printStackTrace();}return count;}/*@Overridepublic List getMealBySeries(int mealSeries, int page) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Meal.class);c.add(Restrictions.eq("mealseries.seriesId", mealSeries));c.setFirstResult(6*(page-1));c.setMaxResults(6);return c.list();}*//*@Overridepublic Integer getCountOfMeal(int mealSeries) {Integer count=null;try{Session session=sessionFactory.getCurrentSession();String hql="select count(s) from Meal s where mealseries.seriesId="+mealSeries;Query query=session.createQuery(hql);count= Integer.parseInt(query.uniqueResult().toString()) ;}catch(Exception e){e.printStackTrace();}return count;}*/@Overridepublic List getMealByCondition(Meal condition, int page) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Meal.class);if(condition!=null){if(condition.getMealName()!=null && !condition.getMealName().equals("")){//按菜名进行筛选c.add(Restrictions.like("mealName", condition.getMealName(),MatchMode.ANYWHERE));}if((condition.getMealseries()!=null) && (condition.getMealseries().getSeriesId()!=null)){//按菜系进行筛选c.add(Restrictions.eq("mealseries.seriesId", condition.getMealseries().getSeriesId()));}}c.setFirstResult(6*(page-1));c.setMaxResults(6);return c.list();}@Overridepublic Integer getCountOfMeal(Meal condition) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Meal.class);if(condition!=null){if(condition.getMealName()!=null && !condition.getMealName().equals("")){//按菜名进行筛选c.add(Restrictions.like("mealName", condition.getMealName(),MatchMode.ANYWHERE));}if((condition.getMealseries()!=null) && (condition.getMealseries().getSeriesId()!=null)){//按菜系进行筛选c.add(Restrictions.eq("mealseries.seriesId", condition.getMealseries().getSeriesId()));}}return c.list().size();}@Overridepublic Meal getMealByMealId(int mealId) {Session session=sessionFactory.getCurrentSession();return (Meal)session.get(Meal.class, mealId);}//添加餐品@Overridepublic void addMeal(Meal meal) {Session session=sessionFactory.getCurrentSession();session.save(meal);}//删除菜品@Overridepublic void deleteMeal(Meal meal) {Session session=sessionFactory.getCurrentSession();session.delete(meal);}//修改餐品@Overridepublic void updateMeal(Meal meal) {Session session=sessionFactory.getCurrentSession();session.update(meal);      }   }//MealSeriesDAOImpl.javapublic class MealSeriesDAOImpl implements MealSeriesDAO {SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic List getMealSeries() {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Mealseries.class);return c.list();}}//OrderDtsDAOImpl.javapublic class OrderDtsDAOImpl implements OrderDtsDAO {SessionFactory sessionFactory;public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}//生成订单子表(订单明细)@Overridepublic void addOrderDts(Orderdts dts) {      Session session=sessionFactory.getCurrentSession();session.saveOrUpdate(dts);}//根据订单主表编号获取订单明细列表@Overridepublic List getOrderDtsByOid(int oid) {      Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Orderdts.class);c.add(Restrictions.eq("orders.oid", oid));return c.list();}}//OrdersDAOImpl.javapublic class OrdersDAOImpl implements OrdersDAO {SessionFactory sessionFactory;    public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}   //删除订单对象@Overridepublic void deleteOrders(Orders orders) {Session session=sessionFactory.getCurrentSession();     session.delete(orders);}//根据订单编号加载订单对象@Overridepublic Orders getOrdersByOid(int oid) {Session session=sessionFactory.getCurrentSession();return (Orders)session.get(Orders.class, oid);}//获取指定用户的订单列表@Overridepublic List getOrdersByUserId(int userId) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Orders.class);c.add(Restrictions.eq("users.id", userId));      return c.list();}//更新订单对象@Overridepublic void updateOrders(Orders orders) {Session session=sessionFactory.getCurrentSession();session.update(orders);}//获取所有订单@Overridepublic List getAllOrders(int page) {      Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Orders.class);c.setFirstResult(6*(page-1));c.setMaxResults(6);return c.list();}//统计所有订单总数@Overridepublic Integer getCountOfAllOrders() {Integer count=null;try{Session session=sessionFactory.getCurrentSession();String hql="select count(o) from Orders o";Query query=session.createQuery(hql);count= Integer.parseInt(query.uniqueResult().toString()) ;}catch(Exception e){e.printStackTrace();}return count;}//获取满足条件、指定页显示的订单列表@Overridepublic List getOrdersByCondition(Orders condition, int page) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Orders.class);if(condition!=null){if((condition.getOid()!=null) && (condition.getOid()>0)){//按订单号进行筛选c.add(Restrictions.eq("oid", condition.getOid()));}if((condition.getOrderState()!=null) && !condition.getOrderState().equals("") && !condition.getOrderState().equals("全部")){//按订单状态进行筛选c.add(Restrictions.eq("orderState", condition.getOrderState()));}}c.setFirstResult(6*(page-1));c.setMaxResults(6);return c.list();}//统计满足条件的订单总数@Overridepublic Integer getCountOfOrders(Orders condition) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Orders.class);if(condition!=null){if((condition.getOid()!=null) && (condition.getOid()>0)){//按订单号进行筛选c.add(Restrictions.eq("oid", condition.getOid()));}if((condition.getOrderState()!=null) && !condition.getOrderState().equals("") && !condition.getOrderState().equals("全部")){//按订单状态进行筛选c.add(Restrictions.eq("orderState", condition.getOrderState()));}}return c.list().size();}    }   //UserDAOImpl.javapublic class UserDAOImpl implements UserDAO {SessionFactory sessionFactory;   public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}@Overridepublic List search(Users condition) {List list=null;//通过sessionFactory获得SessionSession session=sessionFactory.getCurrentSession();//创建Criteria对象Criteria c=session.createCriteria(Users.class);//使用Example工具类创建示例对象Example example=Example.create(condition);//为Criteria对象指定示例对象example作为查询条件        c.add(example);         list= c.list();      //执行查询,获得结果        return list;}//添加用户@Overridepublic void addUsers(Users users) {Session session=sessionFactory.getCurrentSession();session.save(users);}//Admin登录验证@Overridepublic List search(Admin condition) {List list=null;//通过sessionFactory获得SessionSession session=sessionFactory.getCurrentSession();//创建Criteria对象Criteria c=session.createCriteria(Admin.class);//使用Example工具类创建示例对象Example example=Example.create(condition);//为Criteria对象指定示例对象example作为查询条件     c.add(example);         list= c.list();      //执行查询,获得结果        return list;}//修改个人信息@Overridepublic void modifyUsers(Users users) {Session session=sessionFactory.getCurrentSession();session.update(users);}}//MealDAO.java     public interface MealDAO {//获取指定页显示的菜品列表public List getAllMeal(int page);//统计所有餐品总数public Integer getCountOfAllMeal();//获取指定菜系和指定页显示的餐品列表//public List getMealBySeries(int mealSeries,int page);//统计指定菜系统的餐品总数//public Integer getCountOfMeal(int mealSeries);//根据查询条件,获取指定页显示的餐品列表public List getMealByCondition(Meal condition,int page);//统计符合查询条件的餐品总数public Integer getCountOfMeal(Meal condition);//根据编号加载菜品public Meal getMealByMealId(int mealId);//添加餐品public void addMeal(Meal meal);//删除餐品public void deleteMeal(Meal meal);//修改餐品对象public void updateMeal(Meal meal);}//MealSeriesDAO.java       public interface MealSeriesDAO {//获取菜系列表public List getMealSeries();}//OrderDtsDAO.javapublic interface OrderDtsDAO {//生成订单子表(订单明细)public void addOrderDts(Orderdts dts);//根据订单主表编号获取订单明细列表public List getOrderDtsByOid(int oid);}//OrdersDAO.javapublic interface OrdersDAO {//根据订单编号加载订单对象public Orders getOrdersByOid(int oid);//获取指定用户的订单列表public List getOrdersByUserId(int userId);//获取指定页显示的订单列表public List getAllOrders(int page);//统计所有订单总数public Integer getCountOfAllOrders();//获取符合条件、指定页显示的订单列表public List getOrdersByCondition(Orders condition,int page);//统计符合条件的订单总数public Integer getCountOfOrders(Orders condition);   //删除订单对象public void deleteOrders(Orders orders);//更新订单对象public void updateOrders(Orders orders);        }//UserDAO.java public interface UserDAO {//用户登录验证public List search(Users condition);//添加用户public void addUsers(Users users);//Admin登录验证public List search(Admin condition);//修改个人信息public void modifyUsers(Users users);}//Admin.javapublic class Admin implements java.io.Serializable {private Integer id;private String loginName;private String loginPwd;public Admin() {}public Admin(String loginName, String loginPwd) {this.loginName = loginName;this.loginPwd = loginPwd;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getLoginName() {return this.loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return this.loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}}//CartItemBean.javapublic class CartItemBean implements Serializable {private Meal meal;private int quantity;  public Meal getMeal() {return meal;}public void setMeal(Meal meal) {this.meal = meal;}public int getQuantity() {return quantity;}public void setQuantity(int quantity) {this.quantity = quantity;}public CartItemBean(Meal meal, int quantity) {this.meal = meal;this.quantity = quantity;} }//Meal.javapublic class Meal implements java.io.Serializable {private Integer mealId;private Mealseries mealseries;private String mealName;private String mealSummarize;private String mealDescription;private Double mealPrice;private String mealImage;private Set orderdtses = new HashSet(0);public Meal() {}public Meal(Mealseries mealseries, String mealName, String mealSummarize,String mealDescription, Double mealPrice, String mealImage,Set orderdtses) {this.mealseries = mealseries;this.mealName = mealName;this.mealSummarize = mealSummarize;this.mealDescription = mealDescription;this.mealPrice = mealPrice;this.mealImage = mealImage;this.orderdtses = orderdtses;}public Integer getMealId() {return this.mealId;}public void setMealId(Integer mealId) {this.mealId = mealId;}public Mealseries getMealseries() {return this.mealseries;}public void setMealseries(Mealseries mealseries) {this.mealseries = mealseries;}public String getMealName() {return this.mealName;}public void setMealName(String mealName) {this.mealName = mealName;}public String getMealSummarize() {return this.mealSummarize;}public void setMealSummarize(String mealSummarize) {this.mealSummarize = mealSummarize;}public String getMealDescription() {return this.mealDescription;}public void setMealDescription(String mealDescription) {this.mealDescription = mealDescription;}public Double getMealPrice() {return this.mealPrice;}public void setMealPrice(Double mealPrice) {this.mealPrice = mealPrice;}public String getMealImage() {return this.mealImage;}public void setMealImage(String mealImage) {this.mealImage = mealImage;}public Set getOrderdtses() {return this.orderdtses;}public void setOrderdtses(Set orderdtses) {this.orderdtses = orderdtses;}}//Mealseries.javapublic class Mealseries implements java.io.Serializable {private Integer seriesId;private String seriesName;private Set meals = new HashSet(0);public Mealseries() {}public Mealseries(String seriesName, Set meals) {this.seriesName = seriesName;this.meals = meals;}public Integer getSeriesId() {return this.seriesId;}public void setSeriesId(Integer seriesId) {this.seriesId = seriesId;}public String getSeriesName() {return this.seriesName;}public void setSeriesName(String seriesName) {this.seriesName = seriesName;}public Set getMeals() {return this.meals;}public void setMeals(Set meals) {this.meals = meals;}}//Orderdts.javapublic class Orderdts implements java.io.Serializable {private Integer odid;private Meal meal;private Orders orders;private Double mealPrice;private Integer mealCount;public Orderdts() {}public Orderdts(Meal meal, Orders orders, Double mealPrice,Integer mealCount) {this.meal = meal;this.orders = orders;this.mealPrice = mealPrice;this.mealCount = mealCount;}public Integer getOdid() {return this.odid;}public void setOdid(Integer odid) {this.odid = odid;}public Meal getMeal() {return this.meal;}public void setMeal(Meal meal) {this.meal = meal;}public Orders getOrders() {return this.orders;}public void setOrders(Orders orders) {this.orders = orders;}public Double getMealPrice() {return this.mealPrice;}public void setMealPrice(Double mealPrice) {this.mealPrice = mealPrice;}public Integer getMealCount() {return this.mealCount;}public void setMealCount(Integer mealCount) {this.mealCount = mealCount;}}//Orders.javapublic class Orders implements java.io.Serializable {private Integer oid;private Users users;private Date orderTime;private String orderState;private Double orderPrice;  private Set orderdtses = new HashSet(0);public Orders() {}public Orders(Users users, Date orderTime, String orderState,Set orderdtses, Double orderPrice) {this.users = users;this.orderTime = orderTime;this.orderState = orderState;this.orderdtses = orderdtses;this.orderPrice = orderPrice;}public Integer getOid() {return this.oid;}public void setOid(Integer oid) {this.oid = oid;}public Users getUsers() {return this.users;}public void setUsers(Users users) {this.users = users;}public Date getOrderTime() {return this.orderTime;}public void setOrderTime(Date orderTime) {this.orderTime = orderTime;}public String getOrderState() {return this.orderState;}public void setOrderState(String orderState) {this.orderState = orderState;}public Double getOrderPrice() {return orderPrice;}public void setOrderPrice(Double orderPrice) {this.orderPrice = orderPrice;}public Set getOrderdtses() {return this.orderdtses;}public void setOrderdtses(Set orderdtses) {this.orderdtses = orderdtses;}}//Pager.javapublic class Pager {private int curPage;//待显示页private int perPageRows ;//一页显示的记录数  private int rowCount; //记录总数  private int pageCount; //总页数    public int getCurPage() {return curPage;}public void setCurPage(int currentPage) {this.curPage = currentPage;}public int getPerPageRows() {return perPageRows;}public void setPerPageRows(int perPageRows) {this.perPageRows = perPageRows;}public int getRowCount() {return rowCount;}public void setRowCount(int rowCount) {this.rowCount = rowCount;}public int getPageCount() {return (rowCount+perPageRows-1)/perPageRows;}}//Users.javapublic class Users implements java.io.Serializable {private Integer id;private String loginName;private String loginPwd;private String trueName;private String email;private String phone;private String address;private Set orderses = new HashSet(0);public Users() {}public Users(String loginName, String loginPwd, String trueName,String email, String phone, String address, Set orderses) {this.loginName = loginName;this.loginPwd = loginPwd;this.trueName = trueName;this.email = email;this.phone = phone;this.address = address;this.orderses = orderses;}public Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getLoginName() {return this.loginName;}public void setLoginName(String loginName) {this.loginName = loginName;}public String getLoginPwd() {return loginPwd;}public void setLoginPwd(String loginPwd) {this.loginPwd = loginPwd;}public String getTrueName() {return this.trueName;}public void setTrueName(String trueName) {this.trueName = trueName;}public String getEmail() {return this.email;}public void setEmail(String email) {this.email = email;}public String getPhone() {return this.phone;}public void setPhone(String phone) {this.phone = phone;} public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public Set getOrderses() {return this.orderses;}public void setOrderses(Set orderses) {this.orderses = orderses;}}//Admin.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.restrant.entity.Admin" table="admin" catalog="restrant"><id name="id" type="java.lang.Integer"><column name="Id" /><generator class="native"></generator></id><property name="loginName" type="java.lang.String"><column name="LoginName" length="20" /></property><property name="loginPwd" type="java.lang.String"><column name="LoginPwd" length="20" /></property></class></hibernate-mapping>//Meal.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.restrant.entity.Meal" table="meal" catalog="restrant"><id name="mealId" type="java.lang.Integer"><column name="MealId" /><generator class="native"></generator></id><many-to-one name="mealseries" class="com.restrant.entity.Mealseries" fetch="select" lazy="false"><column name="MealSeriesId" /></many-to-one><property name="mealName" type="java.lang.String"><column name="MealName" length="20" /></property><property name="mealSummarize" type="java.lang.String"><column name="MealSummarize" length="250" /></property><property name="mealDescription" type="java.lang.String"><column name="MealDescription" length="250" /></property><property name="mealPrice" type="java.lang.Double"><column name="MealPrice" precision="8" /></property><property name="mealImage" type="java.lang.String"><column name="MealImage" length="20" /></property><set name="orderdtses" inverse="true" lazy="false" cascade="delete"><key><column name="MealId" /></key><one-to-many class="com.restrant.entity.Orderdts" /></set></class></hibernate-mapping>//Mealseries.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.restrant.entity.Mealseries" table="mealseries" catalog="restrant"><id name="seriesId" type="java.lang.Integer"><column name="SeriesId" /><generator class="native"></generator></id><property name="seriesName" type="java.lang.String"><column name="SeriesName" length="10" /></property><set name="meals" inverse="true" lazy="false"><key><column name="MealSeriesId" /></key><one-to-many class="com.restrant.entity.Meal" /></set></class></hibernate-mapping>//Orderdts.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.restrant.entity.Orderdts" table="orderdts" catalog="restrant"><id name="odid" type="java.lang.Integer"><column name="ODID" /><generator class="native"></generator></id><many-to-one name="meal" class="com.restrant.entity.Meal" fetch="select" lazy="false"><column name="MealId" /></many-to-one><many-to-one cascade="all" name="orders" class="com.restrant.entity.Orders" fetch="select" lazy="false"><column name="OID" /></many-to-one><property name="mealPrice" type="java.lang.Double"><column name="MealPrice" precision="8" /></property><property name="mealCount" type="java.lang.Integer"><column name="MealCount" /></property></class></hibernate-mapping>//Orders.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.restrant.entity.Orders" table="orders" catalog="restrant"><id name="oid" type="java.lang.Integer"><column name="OID" /><generator class="native"></generator></id><many-to-one name="users" class="com.restrant.entity.Users" fetch="select" lazy="false"><column name="UserId" /></many-to-one><property name="orderTime" type="java.sql.Timestamp"><column name="OrderTime" length="19" /></property><property name="orderState" type="java.lang.String"><column name="OrderState" length="20" /></property><property name="orderPrice" type="java.lang.Double"><column name="OrderPrice" precision="8" /></property><set name="orderdtses" cascade="all" inverse="true" lazy="false"><key><column name="OID" /></key><one-to-many class="com.restrant.entity.Orderdts" /></set></class></hibernate-mapping>//Users.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.restrant.entity.Users" table="users" catalog="restrant"><id name="id" type="java.lang.Integer"><column name="Id" /><generator class="native"></generator></id><property name="loginName" type="java.lang.String"><column name="LoginName" length="20" /></property><property name="loginPwd" type="java.lang.String"><column name="LoginPwd" length="20" /></property><property name="trueName" type="java.lang.String"><column name="TrueName" length="20" /></property><property name="email" type="java.lang.String"><column name="Email" length="20" /></property><property name="phone" type="java.lang.String"><column name="Phone" length="20" /></property><property name="address" type="java.lang.String"><column name="Address" length="50" /></property><set name="orderses" inverse="true" lazy="false"><key><column name="UserId" /></key><one-to-many class="com.restrant.entity.Orders" /></set></class></hibernate-mapping>//AuthFilter.javapublic class AuthFilter implements Filter {@Overridepublic void destroy() {// TODO Auto-generated method stub}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request=(HttpServletRequest)servletRequest;HttpServletResponse response=(HttpServletResponse)servletResponse;//获取根目录所对应的绝对路径String currentURL=request.getRequestURI();HttpSession session=request.getSession(false);//如果直接访问购物车shopCart页面则验证if(currentURL.indexOf("shopCart.jsp")>-1){//判断当前页是否是重定向以后的登录页面,如果是就不判断sessionif(session==null || session.getAttribute("user")==null){response.sendRedirect(request.getContextPath()+"/toShowMeal");return;}}//加入filter链继续向下执行filterChain.doFilter(request, response);}@Overridepublic void init(FilterConfig arg0) throws ServletException {}}//AuthorityInterceptor.javapublic class AuthorityInterceptor extends AbstractInterceptor {@Overridepublic String intercept(ActionInvocation invocation) throws Exception {// 取得请求的Action名String name = invocation.getInvocationContext().getName();if (name.equals("validateLogin")) {// 如果用户想登录,则使之通过return invocation.invoke();} else {// 取得SessionActionContext ac = invocation.getInvocationContext();Map session = (Map)ac.get(ServletActionContext.SESSION);if (session == null) {// 如果Session为空,则让用户登陆return "login";} else {Users user = (Users)session.get("user");if (user == null) {Admin admin=(Admin)session.get("admin");if(admin==null){// Session不为空,但Session中没有用户信息, 则让用户登陆return "login";}else{// 管理登陆,放行return invocation.invoke();}                  } else {// 用户登陆,放行return invocation.invoke();}}}}}//applicationContext.xml   <?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" xmlns:tx="http://www.springframework.org/schema/tx"><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver" /><property name="url"value="jdbc:mysql://localhost:3306/restrant"></property><property name="username" value="root"></property><property name="password" value="123456"></property></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop></props></property><property name="mappingResources"><list><value>com/restrant/entity/Mealseries.hbm.xml</value><value>com/restrant/entity/Admin.hbm.xml</value><value>com/restrant/entity/Meal.hbm.xml</value><value>com/restrant/entity/Orders.hbm.xml</value><value>com/restrant/entity/Users.hbm.xml</value><value>com/restrant/entity/Orderdts.hbm.xml</value></list></property></bean><!--  定义事务通知    --> <tx:advice id="txAdvice" transaction-manager="transactionManager">   <tx:attributes>   <tx:method name="*" propagation="REQUIRED" /> </tx:attributes></tx:advice><!--定义切面,并将事务通知和切面组合(定义哪些方法应用事务规则) --><aop:config><!-- 对com.restrant.biz包下的所有类的所有方法都应用事务规则 --><aop:pointcut id="bizMethods" expression="execution(* com.restrant.biz.*.*(..))" /> <!--  将事务通知和切面组合   --> <aop:advisor advice-ref="txAdvice" pointcut-ref="bizMethods" /> </aop:config><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><tx:annotation-driven transaction-manager="transactionManager" /><!-- 定义MealDAOImpl类--><bean id="mealDAO" class="com.restrant.dao.impl.MealDAOImpl">   <property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义MealBizImpl类,并为其mealDAO属性注入值--><bean id="mealBiz" class="com.restrant.biz.impl.MealBizImpl">   <property name="mealDAO" ref="mealDAO" /></bean><!-- 定义MealAction,并为其中属性mealBiz和mealSeriesBiz注入值 --><bean name="mealAction" class="com.restrant.action.MealAction" scope="prototype"><property name="mealBiz" ref="mealBiz" /><property name="mealSeriesBiz" ref="mealSeriesBiz" /></bean><!-- 定义MealSeriesDAOImpl类--><bean id="mealSeriesDAO" class="com.restrant.dao.impl.MealSeriesDAOImpl">   <property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义MealSeriesBizImpl类,并为其mealSeriesDAO属性注入值--><bean id="mealSeriesBiz" class="com.restrant.biz.impl.MealSeriesBizImpl">   <property name="mealSeriesDAO" ref="mealSeriesDAO" /></bean><!-- 定义CartAction,并为其中属性mealBiz注入值 --><bean name="cartAction" class="com.restrant.action.CartAction" scope="prototype"><property name="mealBiz" ref="mealBiz" /></bean><bean id="ordersDAO" class="com.restrant.dao.impl.OrdersDAOImpl">    <property name="sessionFactory" ref="sessionFactory" /></bean><bean id="ordersBiz" class="com.restrant.biz.impl.OrdersBizImpl">   <property name="ordersDAO" ref="ordersDAO" />     </bean><bean name="ordersAction" class="com.restrant.action.OrdersAction" scope="prototype"><property name="ordersBiz" ref="ordersBiz" /><property name="orderDtsBiz" ref="orderDtsBiz" /></bean><bean id="orderDtsDAO" class="com.restrant.dao.impl.OrderDtsDAOImpl">     <property name="sessionFactory" ref="sessionFactory" /></bean> <bean id="orderDtsBiz" class="com.restrant.biz.impl.OrderDtsBizImpl">      <property name="orderDtsDAO" ref="orderDtsDAO" /></bean><!-- 定义UserDAOImpl类--><bean id="userDAO" class="com.restrant.dao.impl.UserDAOImpl">     <property name="sessionFactory" ref="sessionFactory" /></bean><!-- 定义UserBizImpl类,并为其userDAO属性注入值--><bean id="userBiz" class="com.restrant.biz.impl.UserBizImpl">   <property name="userDAO" ref="userDAO" /></bean><!-- 定义UserAction,并为其中属性userBiz注入值 --><bean name="userAction" class="com.restrant.action.UserAction" scope="prototype"><property name="userBiz" ref="userBiz" /></bean></beans>//struts.xml <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><constant name="struts.i18n.encoding" value="gbk"></constant><!-- 定义一个名称为restrant的包,继承struts 2的默认包,指定命名空间为"/" --><package name="restrant" namespace="/" extends="struts-default"><!-- 配置拦截器AuthorityInterceptor --><interceptors><interceptor name="loginCheck" class="com.restrant.interceptor.AuthorityInterceptor" /></interceptors><!-- 设置全局的返回值,返回首页 -->         <global-results>             <result name="login" type="redirectAction">/toShowMeal</result>         </global-results>     <!-- 为MealAction类中的toShowMeal方法配置映射 --><action name="toShowMeal" class="mealAction" method="toShowMeal"><result name="toShowMeal">/show.jsp</result>          </action><action name="toManageMeal" class="mealAction" method="toManageMeal"><result name="managemeal">/managemeal.jsp</result>        <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />            </action><action name="toUpdateMeal" class="mealAction" method="toUpdateMeal"><result name="updateMeal">/updateMeal.jsp</result>        <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />            </action><action name="doUpdateMeal" class="mealAction" method="doUpdateMeal"><result name="toShowMeal" type="redirectAction">toShowMeal</result>    <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />            </action><!-- 为MealAction类中的toShowMeal方法配置映射 --><action name="toShowDetails" class="mealAction" method="toShowDetails"><result name="toShowDetails">/details.jsp</result> <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />                </action><action name="toAddMeal" class="mealAction" method="toAddMeal"><result name="addMeal">/addMeal.jsp</result>    <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />                </action><action name="doAddMeal" class="mealAction" method="doAddMeal"><result name="toShowMeal" type="redirectAction">toShowMeal</result>      <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />            </action><action name="deleteMeal" class="mealAction" method="deleteMeal"><result name="toManageMeal" type="redirectAction">toManageMeal</result>        <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />            </action>     <action name="addtoshopcart" class="cartAction" method="addtoshopcart"><result name="shopCart">/shopCart.jsp</result> <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />        </action><action name="updateSelectedQuantity" class="cartAction" method="updateSelectedQuantity"><result name="shopCart">/shopCart.jsp</result>            <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />        </action><action name="deleteSelectedOrders" class="cartAction" method="deleteSelectedOrders"><result name="shopCart">/shopCart.jsp</result>    <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />                </action>     <action name="clearCart" class="cartAction" method="clearCart"><result name="shopCart">/shopCart.jsp</result> <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />                </action><action name="addOrders" class="ordersAction" method="addOrders"><result name="show" type="redirectAction">toShowMeal</result>      <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />                </action><action name="toOrdersDetails" class="ordersAction" method="toOrdersDetails"><result name="toOrdersDetails">/myordersdetails.jsp</result>  <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />                </action>     <action name="toMyOrders" class="ordersAction" method="toMyOrders"><result name="myorders">/myorders.jsp</result> <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />            </action><action name="deleteOrders" class="ordersAction" method="deleteOrders"><result name="toMyOrders" type="redirectAction">toMyOrders</result>      <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />        </action> <action name="toManageOrders" class="ordersAction" method="toManageOrders"><result name="manageorders">/manageorders.jsp</result> <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />            </action><action name="handleOrders" class="ordersAction" method="handleOrders"><result name="toManageOrders" type="redirectAction">toManageOrders</result>      <interceptor-ref name="loginCheck" />  <interceptor-ref name="defaultStack" />    </action><action name="validateLogin" class="userAction" method="validateLogin"><result name="toShowMeal" type="redirectAction">toShowMeal</result></action><action name="register" class="userAction" method="register">           <result name="show" type="redirectAction">toShowMeal</result> </action><action name="logOut" class="userAction" method="logOut">         <result name="show" type="redirectAction">toShowMeal</result> </action><action name="modifyUsers" class="userAction" method="modifyUsers">           <result name="show" type="redirectAction">toShowMeal</result> </action></package></struts>    //styles.css  BODY {BACKGROUND-POSITION: center 50%;BACKGROUND-IMAGE: url()}HTML {TEXT-DECORATION: none}BODY {FONT-SIZE: 12px;COLOR: #000000;FONT-FAMILY: 宋体}TD {FONT-SIZE: 12px;COLOR: #000000;FONT-FAMILY: 宋体}TD {FONT-SIZE: 12px;COLOR: #000000}TR {FONT-SIZE: 12px;COLOR: #000000}A:link {FONT-SIZE: 12px;COLOR: #000000;TEXT-DECORATION: none}A:visited {FONT-SIZE: 12px;COLOR: #000000;TEXT-DECORATION: none}A:active {FONT-SIZE: 12px;COLOR: #000000;TEXT-DECORATION: none}A:hover {FONT-SIZE: 12px;COLOR: #000000;TEXT-DECORATION: none}A {FONT-SIZE: 12px;COLOR: #000000}.STYLE1 {color: #FF0000}.input {BORDER-RIGHT: #333333 1px solid;PADDING-RIGHT: 0px;BORDER-TOP: #333333 1px solid;PADDING-LEFT: 1px;FONT-SIZE: 1em;PADDING-BOTTOM: 2px;VERTICAL-ALIGN: middle;BORDER-LEFT: #333333 1px solid;PADDING-TOP: 2px;BORDER-BOTTOM: #333333 1px solid}//web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><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><filter><filter-name>AuthFilter</filter-name><filter-class>com.restrant.filter.AuthFilter</filter-class></filter><filter-mapping><filter-name>AuthFilter</filter-name><url-pattern>/*</url-pattern>*/</filter-mapping></web-app>//addMeal.jsp       <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@ taglib uri='/struts-tags' prefix='s'%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>添加餐品</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="90%" height="170" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div><div style="background-color: #FFCC99;" align="center">添加餐品</div> <br /><s:form action="doAddMeal" method="post"enctype="multipart/form-data"><table align="center"><s:textfield name="meal.mealName" label="菜名" /><s:select name="meal.mealseries.seriesId" label="菜系"list="#request.mealSeriesList" listKey="seriesId"listValue="seriesName" /><s:textfield name="meal.mealSummarize" label="摘要" /><s:textfield name="meal.mealDescription" label="介绍" /><s:textfield name="meal.mealPrice" label="价格" /><s:file name="doc" label="图片" /><s:submit value="确定" align="center" /></table></s:form></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br></td></tr></table></body></html>//details.jsp       <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s'%><html><head><title>餐品详细页面</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="90%" height="629" border="0" cellpadding="0"cellspacing="0" align="center"><tr><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div><div style="background-color: #FFCC99;" align="center">餐品详情</div> <br><br /><table width="616" border="0" cellspacing="0" cellpadding="3"><tr><td width="148"><imgsrc="mealimages/${requestScope.aMeal.mealImage}" width="148"height="126" /></td><td width="468" valign="top">${requestScope.aMeal.mealName }<br /> <span style="text-decoration: line-through; color: gray;">原价:人民币${requestScope.aMeal.mealPrice}元</span> <br /> 现价:人民币${requestScope.aMeal.mealPrice*0.9 }元 <br />${requestScope.aMeal.mealSummarize }</td></tr><tr><td>编号:${requestScope.aMeal.mealId}</td><td><a href="ShoppingCartServlet?type=add&mid="><imgsrc="data:images/buy_cn.gif" border="0" width="60" height="20" /></a></td></tr><tr><td colspan="2"><div align="center">详细资料</div></td></tr><tr><td colspan="2"><hr /></td></tr><tr><td colspan="2" align="center"><imgsrc="mealimages/${requestScope.aMeal.mealImage}" width="228"height="169" /> <br /> <br />${requestScope.aMeal.mealDescription }</td></tr></table></td></tr><tr><td colspan="2" align="center"><br><hr width=100%></td></tr></table></body></html>//login.jsp     <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s'%><html><head><title>登录页面</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="90%" height="629" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top"><p><img src="data:images/left_top.jpg" width="215" height="100" /></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div><div style="background-color: #FFCC99;" align="center">网上订餐系统用户请直接登录</div> <br> <br /> <s:iftest="#parameters.role[0]=='user'"><form action="validateLogin?type=userlogin" method="post"name="ufrm"><table width="263" border="0" cellspacing="0" cellpadding="4"align="center"><tr><td width="74">用户名:</td><td width="189"><input type="text" name="loginName"style="width: 150;" /></td></tr><tr><td>密 &nbsp;&nbsp;码:</td><td><input type="password" name="loginPwd"style="width: 150;" /></td></tr><tr><td>&nbsp;</td><td><input type="submit" name="login" value="登 录" /></td></tr></table></form></s:if> <s:if test="#parameters.role[0]=='admin'"><form action="validateLogin?type=adminlogin" method="post"name="afrm"><table width="263" border="0" cellspacing="0" cellpadding="4"align="center"><tr><td width="74">登录名:</td><td width="189"><input type="text" name="loginName"style="width: 150;" /></td></tr><tr><td>密 &nbsp;&nbsp;码:</td><td><input type="password" name="loginPwd"style="width: 150;" /></td></tr><tr><td>&nbsp;</td><td><input type="submit" name="login" value="登 录" /></td></tr><tr><td colspan="2"></td></tr></table></form></s:if></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br> <br> <br></td></tr></table></body></html>//managemeal.jsp        <%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri='/struts-tags' prefix='s'%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>管理餐品</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="95%" height="170" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"><!-- 菜系循环开始 --><s:iterator id="mealSeries" value="#request.mealSeriesList"><br><ahref="/Restrant/toManageMeal?meal.mealseries.seriesId=${mealSeries.seriesId}">${mealSeries.seriesName}</a><br></s:iterator><!-- 菜系循环结束 --></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div align="left"><s:form theme="simple" method="post" action="toManageMeal"><s:label value="输入菜名:" /><s:textfield name="meal.mealName" /><s:hidden name="meal.mealseries.seriesId"value="%{#request.seriesId}" /><s:submit value="查询" /></s:form></div> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div> <br><br><table width="75%" cellspacing="0" cellpadding="4" align="center"style="text-align: center; border: 1px #cccccc solid;"><tr style="background-color: #CCCCFF;"><td>菜系</td><td>菜名</td><td>摘要</td><td>价格</td><td>修改</td><td>删除</td></tr><s:iterator id="mealItem" value="#request.mealList" status="st"><tr><td><s:property value="mealseries.seriesName" /></td><td><s:property value="mealName" /></td><td><s:property value="mealSummarize" /></td><td><s:property value="mealPrice" /></td><td><ahref="/Restrant/toUpdateMeal?meal.mealId=${mealItem.mealId}">修改</a></td><td><ahref="/Restrant/deleteMeal?meal.mealId=${mealItem.mealId}">删除</a></td></tr></s:iterator><!-- 分页超链接开始 --><table align="right"><tr><td width="130"></td><td width="80"><s:if test="pager.curPage>1"><Ahref='/Restrant/toManageMeal?pager.curPage=1&meal.mealseries.seriesId=${requestScope.seriesId}&meal.mealName=${requestScope.mealName}'>首页</A>&nbsp;&nbsp;<Ahref='/Restrant/toManageMeal?pager.curPage=${pager.curPage-1 }&meal.mealseries.seriesId=${requestScope.seriesId}&meal.mealName=${requestScope.mealName}'>上一页</A></s:if></td><td width="80"><s:if test="pager.curPage < pager.pageCount"><Ahref='/Restrant/toManageMeal?pager.curPage=${pager.curPage+1}&meal.mealseries.seriesId=${requestScope.seriesId}&meal.mealName=${requestScope.mealName}'>下一页</A>&nbsp;&nbsp;<Ahref='/Restrant/toManageMeal?pager.curPage=${pager.pageCount }&meal.mealseries.seriesId=${requestScope.seriesId}&meal.mealName=${requestScope.mealName}'>尾页</A></s:if></td><td>共${pager.rowCount}记录,共${pager.curPage}/${pager.pageCount}页&nbsp;&nbsp;</td></tr></table><!-- 分页超链接结束--></table></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br></td></tr></table></body></html>//manageorders.jsp       <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s'%><html><head><title>订单处理</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="90%" height="629" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div align="left"><s:form theme="simple" method="post" action="toManageOrders"><s:label value="订单号:" /><s:textfield name="orders.oid" /><s:label value="订单状态:" /><s:select list="#{'全部':'全部','未处理':'未处理','已处理':'已处理'}"name="orders.orderState" listKey="key" listValue="value" /><s:submit value="查询" /></s:form></div><div style="background-image: url(images/004.gif)">&nbsp;</div> <br /><img src="data:images/icon_order.gif" align="top" /> 订单列表 <br /><hr /><table align="center" width="95%" cellspacing="0" cellpadding="3"style="text-align: center; border: 1px #cccccc solid;"><tr style="background-color: #CCCCFF;"><td>订单编号</td><td>订单时间</td><td>订单状态</td><td>总额</td><td>处理</td></tr><s:set var="total" value="0" /><s:iterator id="orders" value="#request.ordersList"><tr style="background-color: #FFFFFF;"><td><s:property value="oid" /></td><td><s:date name="orderTime" format="yyyy-MM-dd HH:mm:ss" /></td><td><s:property value="orderState" /></td><td><s:property value="orderPrice" /></td><td><s:if test="#orders.orderState=='未处理'"><a href="/Restrant/handleOrders?oid=${oid}"><imgsrc="data:images/handle.gif" width="12" height="12" /></a></s:if></td></tr></s:iterator><!-- 分页超链接开始 --><table align="right"><tr><td width="130"></td><td width="80"><s:if test="pager.curPage>1"><Ahref='/Restrant/toManageOrders?pager.curPage=1&orders.oid=${requestScope.oid}&orders.orderState=${requestScope.orderState}'>首页</A>&nbsp;&nbsp;<Ahref='/Restrant/toManageOrders?pager.curPage=${pager.curPage-1 }&orders.oid=${requestScope.oid}&orders.orderState=${requestScope.orderState}'>上一页</A></s:if></td><td width="80"><s:if test="pager.curPage < pager.pageCount"><Ahref='/Restrant/toManageOrders?pager.curPage=${pager.curPage+1}&orders.oid=${requestScope.oid}&orders.orderState=${requestScope.orderState}'>下一页</A>&nbsp;&nbsp;<Ahref='/Restrant/toManageOrders?pager.curPage=${pager.pageCount }&orders.oid=${requestScope.oid}&orders.orderState=${requestScope.orderState}'>尾页</A></s:if></td><td>共${pager.rowCount}记录,共${pager.curPage}/${pager.pageCount}页&nbsp;&nbsp;</td></tr></table><!-- 分页超链接结束--></table> <br /></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br> <br></td></tr></table></body></html>//modifyMyInfo.jsp     <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s'%><html><head><title>修改个人信息</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /><script type="text/javascript">function usercheck(){if(document.ufrm.username.value.length==0){alert("请输入用户名");return false;}if(document.ufrm.userpwd.value.length==0){alert("请输入密码");return false;}return true;}function admincheck(){if(document.afrm.adminname.value.length==0){alert("请输入登录名");return false;}if(document.afrm.adminpwd.value.length==0){alert("请输入密码");return false;}return true;}</script></head><body><table width="90%" height="629" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div><form action="modifyUsers" method="post" name="frm"onsubmit="return check()"><table width="100%" cellspacing="0" cellpadding="3" align="center"style="text-align: center; border: 1px #cccccc solid;"><tr style="background-color: #CCCCFF;"><td colspan="2">用户个人信息</td></tr><tr><td align="right" style="width: 320px;">登录名称:</td><td align="left"><input type="hidden" name="user.id"style="width: 220px;" value="${sessionScope.user.id }" /> <inputtype="text" name="user.loginName" style="width: 220px;"value="${sessionScope.user.loginName }" /></td></tr><tr><td align="right" style="width: 320px;">登录密码:</td><td align="left"><input type="password" name="user.loginPwd"style="width: 220px;" value="${sessionScope.user.loginPwd }" /></td></tr><tr><td align="right" style="width: 320px;">真实姓名:</td><td align="left"><input type="text" name="user.trueName"style="width: 220px;" value="${sessionScope.user.trueName }" /></td></tr><tr><td align="right" style="width: 320px;">电话号码:</td><td align="left"><input type="text" name="user.phone"style="width: 220px;" value="${sessionScope.user.phone }" /></td></tr><tr><td align="right" style="width: 320px;">电子邮件:</td><td align="left"><input type="text" name="user.email"style="width: 220px;" value="${sessionScope.user.email }" /></td></tr><tr><td align="right" style="width: 320px;">默认地址:</td><td align="left"><input type="text" name="user.address"style="width: 220px;" value="${sessionScope.user.address }" /></td></tr><tr style="background-color: #CCCCFF;"><td colspan="2"><input type="submit" value="修改" /></td></tr></table></form></div></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br> <br> <br></td></tr></table></body></html>//myorders.jsp       <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s'%><html><head><title>我的订单</title><!-- <link rel="stylesheet" type="text/css" href="CSS/styles.css">--><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="90%" height="629" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div> <br /><img src="data:images/icon_order.gif" align="top" /> 您的订单中有以下内容 <br /><hr /><table align="center" width="95%" cellspacing="0" cellpadding="3"style="text-align: center; border: 1px #cccccc solid;"><tr style="background-color: #CCCCFF;"><td>订单编号</td><td>订单时间</td><td>订单状态</td><td>总额</td><td>明细</td><td>删除</td></tr><s:set var="total" value="0" /><s:iterator id="myOrders" value="#request.myOrdersList"><tr style="background-color: #FFFFFF;"><td><s:property value="oid" /></td><td><s:date name="orderTime" format="yyyy-MM-dd HH:mm:ss" /></td><td><s:property value="orderState" /></td><td><s:property value="orderPrice" /></td><td><a href="/Restrant/toOrdersDetails?oid=${oid }">查看</a></td><td><s:if test="#myOrders.orderState=='未处理'"><a href="/Restrant/deleteOrders?oid=${ oid}">删除</a></s:if></td></tr><s:set var="total" value="#total+orderPrice" /></s:iterator><tr style="background-color: #CCCCFF;"><td>合计</td><td>-</td><td>-</td><td>¥:<s:property value="#total" /></td><td></td><td></td></tr></table> <br /></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br> <br></td></tr></table></body></html>//myordersdetails.jsp       <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s'%><html><head><title>我的订单明细</title><!-- <link rel="stylesheet" type="text/css" href="CSS/styles.css">--><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="90%" height="629" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div> <br /><img src="data:images/icon_order.gif" align="top" /> 订单明细 <br /><hr /><table align="center" width="95%" cellspacing="0" cellpadding="3"style="text-align: center; border: 1px #cccccc solid;"><tr style="background-color: #CCCCFF;"><td>明细编号</td><td>菜名</td><td>价格</td><td>数量</td><td>总额</td></tr><s:set var="count" value="0" /><s:iterator id="ordersDtsItem" value="#request.ordersDtsList"><tr style="background-color: #FFFFFF;"><td><s:property value="odid" /></td><td><s:property value="meal.mealName" /></td><td><s:property value="mealPrice" /></td><td><s:property value="mealCount" /></td><td><s:property value="mealPrice*mealCount" /></td></tr><s:set var="count" value="#count+mealPrice*mealCount" /></s:iterator><tr style="background-color: #CCCCFF;"><td>合计</td><td>-</td><td>-</td><td>-</td><td>¥:<s:property value="#count" /></td></tr></table> <br /></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br> <br></td></tr></table></body></html>//register.jsp        <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s'%><html><head><title>用户注册页面</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /><script type="text/javascript">function usercheck(){if(document.ufrm.username.value.length==0){alert("请输入用户名");return false;}if(document.ufrm.userpwd.value.length==0){alert("请输入密码");return false;}return true;}function admincheck(){if(document.afrm.adminname.value.length==0){alert("请输入登录名");return false;}if(document.afrm.adminpwd.value.length==0){alert("请输入密码");return false;}return true;}</script></head><body><table width="90%" height="629" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div><form action="register" method="post" name="frm"onsubmit="return check()"><table width="100%" cellspacing="0" cellpadding="3" align="center"style="text-align: center; border: 1px #cccccc solid;"><tr style="background-color: #CCCCFF;"><td colspan="2">填写注册信息</td></tr><tr><td align="right" style="width: 320px;">登录名称:</td><td align="left"><input type="text" name="user.loginName"style="width: 220px;" /></td></tr><tr><td align="right" style="width: 320px;">登录密码:</td><td align="left"><input type="password" name="user.loginPwd"style="width: 220px;" /></td></tr><tr><td align="right" style="width: 320px;">真实姓名:</td><td align="left"><input type="text" name="user.trueName"style="width: 220px;" /></td></tr><tr><td align="right" style="width: 320px;">电话号码:</td><td align="left"><input type="text" name="user.phone"style="width: 220px;" /></td></tr><tr><td align="right" style="width: 320px;">电子邮件:</td><td align="left"><input type="text" name="user.email"style="width: 220px;" /></td></tr><tr><td align="right" style="width: 320px;">默认地址:</td><td align="left"><input type="text" name="user.address"style="width: 220px;" /></td></tr><tr style="background-color: #CCCCFF;"><td colspan="2"><input name="register" type="submit"id="register" value="注册" /></td></tr></table></form></div></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br> <br> <br></td></tr></table></body></html>//shopCart.jsp       <%@ page language="java" import="java.util.*" pageEncoding="gbk"%><%@ taglib uri='/struts-tags' prefix='s'%><html><head><title>购物车页面</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="90%" height="629" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div> <br /><img src="data:images/zdkf.jpg" align="top" /> 您的购物车中有以下商品 <br /><hr /><table align="center" width="95%" cellspacing="0" cellpadding="3"style="text-align: center; border: 1px #cccccc solid;"><tr style="background-color: #CCCCFF;"><td>编号</td><td>商品名称</td><td>单价</td><td>数量</td><td>金额</td><td>删除</td></tr><s:set var="sumPrice" value="0" /><s:iterator id="cartItem" value="#session.cart"><tr style="background-color: #FFFFFF;"><td><s:property value="value.meal.mealId" /></td><td><s:property value="value.meal.mealName" /></td><td>¥<s:property value="value.meal.mealPrice" /></td><td><input type="text" value="${value.quantity}" size="10"onchange="window.location='updateSelectedQuantity?mealId=${value.meal.mealId}&quantity='+this.value;"></td><td>¥<s:property value="value.quantity*value.meal.mealPrice" /></td><td><ahref="deleteSelectedOrders?mealId=${value.meal.mealId}">删除</a></td></tr><s:set var="sumPrice"value="#sumPrice+value.quantity*value.meal.mealPrice" /></s:iterator><tr style="background-color: #CCCCFF;"><td>合计</td><td>-</td><td>-</td><td>-</td><td>¥:<s:property value="#sumPrice" /> <s:setvar="sumPrice" value="#sumPrice" scope="session" /></td><td>-</td></tr></table> <br /><table width="300" cellspacing="0" cellpadding="4" align="center"style="text-align: center; border: 1px #cccccc solid;"><tr style="background-color: #CCCCFF;"><td><a href="/Restrant/clearCart">清空购物车</a></td><td><a href="/Restrant/toShowMeal">继续购物</a></td><td><a href="/Restrant/addOrders">生成订单</a></td></tr></table></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br></td></tr></table></body></html>//show.jsp      <%@ page language="java" import="java.util.*" pageEncoding="GBK"%><%@ taglib uri='/struts-tags' prefix='s'%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>餐品列表显示</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="95%" height="170" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"><!-- 菜系循环开始 --><s:iterator id="mealSeries" value="#request.mealSeriesList"><br><ahref="/Restrant/toShowMeal?meal.mealseries.seriesId=${mealSeries.seriesId}">${mealSeries.seriesName}</a><br></s:iterator><!-- 菜系循环结束 --></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div align="left"><s:form theme="simple" method="post" action="toShowMeal"><s:label value="输入菜名:" /><s:textfield name="meal.mealName" /><!-- 通过隐藏表单域保存用户选择过的菜系编号,可根据餐品名称和菜系组合查询 --><s:hidden name="meal.mealseries.seriesId"value="%{#request.seriesId}" /><s:submit value="查询" /></s:form></div> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div><div style="background-color: #FFCC99;" align="right"><a href="shopCart.jsp"><img src="data:images/lcart_cn.gif"width="97" height="30" border="0" /> </a></div> <br /><table cellpadding="5" cellspacing="1" style="font-size: 12px;"><!-- 餐品循环开始 --><s:iterator id="mealItem" value="#request.mealList" status="st"><s:if test="#st.getIndex()%3==0"><tr></s:if><td><ahref="/Restrant/toShowDetails?meal.mealId=${mealItem.mealId}"><imgsrc="mealimages/${mealItem.mealImage }" width="148" height="126"border="0" /> </a></td><td><div>${ mealItem.mealId} : ${ mealItem.mealName} <br /> <spanstyle="text-decoration: line-through; color: gray;">原价:人民币${mealItem.mealPrice}元</span> <br /> 现价:人民币 ${ mealItem.mealPrice*0.9}元</div> <a href="/Restrant/toShowDetails?meal.mealId=${mealItem.mealId}"><imgsrc="data:images/detail_cn.gif" border="0" width="60" height="20" /></a> <a href="/Restrant/addtoshopcart?mealId=${mealItem.mealId }"><imgsrc="data:images/buy_cn.gif" border="0" width="60" height="20" /></a></td><s:if test="#st.getIndex()%3==2"></tr></s:if></s:iterator><!-- 餐品循环开始 --><!-- 分页超链接开始 --><table align="right"><tr><td width="130"></td><td width="80"><s:if test="pager.curPage>1"><Ahref='/Restrant/toShowMeal?pager.curPage=1&meal.mealseries.seriesId=${requestScope.seriesId}&meal.mealName=${requestScope.mealName}'>首页</A>&nbsp;&nbsp;<Ahref='/Restrant/toShowMeal?pager.curPage=${pager.curPage-1 }&meal.mealseries.seriesId=${requestScope.seriesId}&meal.mealName=${requestScope.mealName}'>上一页</A></s:if></td><td width="80"><s:if test="pager.curPage < pager.pageCount"><Ahref='/Restrant/toShowMeal?pager.curPage=${pager.curPage+1}&meal.mealseries.seriesId=${requestScope.seriesId}&meal.mealName=${requestScope.mealName}'>下一页</A>&nbsp;&nbsp;<Ahref='/Restrant/toShowMeal?pager.curPage=${pager.pageCount }&meal.mealseries.seriesId=${requestScope.seriesId}&meal.mealName=${requestScope.mealName}'>尾页</A></s:if></td><td>共${pager.rowCount}记录,共${pager.curPage}/${pager.pageCount}页&nbsp;&nbsp;</td></tr></table><!-- 分页超链接结束--></table></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br></td></tr></table></body></html>//updateMeal.jsp            <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@ taglib uri='/struts-tags' prefix='s'%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>修改餐品</title><link rel="stylesheet" href="/Restrant/css/styles.css" type="text/css" /></head><body><table width="90%" height="170" border="0" cellpadding="0"cellspacing="0" align="center"><tr><td width="200" height="101"><img src="data:images/jb_logo.jpg"width="64" height="32" /> <strong><spanstyle="font-size: 20px;">网上订餐系统</span> </strong></td><td width="640" style="padding-left: 40px;"></td></tr><tr><td height="41" colspan="2"style="background-image: url(images/001.gif);" align="center">| <a href="/Restrant/toShowMeal">网站首页</a> | <s:iftest="(#session.admin==null) && (#session.user==null)"><a href="register.jsp">用户注册</a> |<a href="login.jsp?role=user">用户登录</a> |<a href="login.jsp?role=admin">Admin登录</a> |</s:if> <s:if test="#session.user!=null"><a href="modifyMyInfo.jsp">修改个人信息</a> |<a href="shopCart.jsp">我的购物车</a> |<a href="/Restrant/toMyOrders">我的订单</a> |<a href="/Restrant/logOut?type=userlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.user.trueName }</font></s:if> <s:if test="#session.admin!=null"><a href="/Restrant/toAddMeal">添加餐品</a> |<a href="/Restrant/toManageMeal">管理餐品</a> |<a href="/Restrant/toManageOrders">订单处理</a> |<a href="/Restrant/logOut?type=adminlogout">注销</a> &nbsp;&nbsp; &nbsp;&nbsp;<font style="color: red">欢迎您:${sessionScope.admin.loginName}</font></s:if></td></tr><tr><td valign="top" align="center"><p><img src="data:images/left_top.jpg" width="215" height="100" /> <br><img src="data:images/003.gif" width="191" height="8"></td><td valign="top" width="80%"><img src="data:images/001.jpg"width="595" height="72" /> <br /><div style="background-image: url(images/004.gif)">&nbsp;</div><div style="background-color: #FFCC99;" align="center">修改餐品</div> <br /><s:form action="doUpdateMeal" method="post"enctype="multipart/form-data"><table align="center"><s:hidden name="meal.mealId"value="%{#request.updatedMeal.mealId}" /><s:textfield name="meal.mealName" label="菜名"value="%{#request.updatedMeal.mealName}" /><s:select name="meal.mealseries.seriesId" label="菜系"value="%{#request.updatedMeal.mealseries.seriesId}"list="#request.mealSeriesList" listKey="seriesId"listValue="seriesName" /><s:textfield name="meal.mealSummarize" label="摘要"value="%{#request.updatedMeal.mealSummarize}" /><s:textfield name="meal.mealDescription" label="介绍"value="%{#request.updatedMeal.mealDescription}" /><s:textfield name="meal.mealPrice" label="价格"value="%{#request.updatedMeal.mealPrice}" /><s:hidden name="meal.mealImage"value="%{#request.updatedMeal.mealImage}" /><s:file name="doc" label="图片" /><s:submit value="确定" align="center" /></table></s:form></td></tr><tr><td colspan="2" align="center"><br><hr width=100%> <br></td></tr></table></body></html>//sqlDROP TABLE IF EXISTS `admin`;CREATE TABLE `admin` (`Id` int(4) NOT NULL AUTO_INCREMENT,`LoginName` varchar(20) DEFAULT NULL,`LoginPwd` varchar(20) DEFAULT NULL,PRIMARY KEY (`Id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;-- ------------------------------ Records of admin-- ----------------------------INSERT INTO `admin` VALUES ('1', 'admin', '123456');-- ------------------------------ Table structure for `meal`-- ----------------------------DROP TABLE IF EXISTS `meal`;CREATE TABLE `meal` (`MealId` int(4) NOT NULL AUTO_INCREMENT,`MealSeriesId` int(4) DEFAULT NULL,`MealName` varchar(20) DEFAULT NULL,`MealSummarize` varchar(250) DEFAULT NULL,`MealDescription` varchar(250) DEFAULT NULL,`MealPrice` decimal(8,2) DEFAULT NULL,`MealImage` varchar(20) DEFAULT NULL,PRIMARY KEY (`MealId`),KEY `MealSeriesId` (`MealSeriesId`),CONSTRAINT `meal_ibfk_1` FOREIGN KEY (`MealSeriesId`) REFERENCES `mealseries` (`SeriesId`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;-- ------------------------------ Records of meal-- ----------------------------INSERT INTO `meal` VALUES ('1', '1', '雪梨肉肘棒', '味鲜香甜咸,肘棒不腻', '味鲜香甜咸,肘棒不腻', '10.00', '01.jpg');INSERT INTO `meal` VALUES ('2', '1', '素锅烤鸭肉', '颜色鲜艳,酷似鸭肉,鲜香不腻。', '颜色鲜艳,酷似鸭肉,鲜香不腻。', '20.00', '02.jpg');INSERT INTO `meal` VALUES ('3', '1', '烤花肉揽桂鱼', '味道特鲜,白中泛红,佐以姜末、香醋,尤胜一等。', ' 烤花揽桂鱼,是运用孔府菜的传统独特工艺味,道特鲜,白中泛红,佐以姜末、香醋,尤胜一等。', '15.00', '03.jpg');INSERT INTO `meal` VALUES ('4', '1', '泰安肉三美豆腐', '汤汁乳白而鲜,豆腐软滑,白菜鲜嫩,清淡爽口。', '“泰安三美豆腐”是泰安风味名菜。泰安产的白菜、豆腐和泰山泉水,历来被誉为“泰安三美”。泰安白菜个儿大心实,质细无筋;泰安豆腐,浆细质纯,嫩而不老;泰山泉水,清甜爽口,杂质少', '8.00', '04.jpg');INSERT INTO `meal` VALUES ('5', '1', '落叶琵琶肉虾', '外型美观,鲜香味美。', ' 外型美观,鲜香味美。 ', '14.00', '05.jpg');INSERT INTO `meal` VALUES ('6', '1', '肉冬菜肉末', '味鲜香适口,下饭便菜。', '味鲜香适口,下饭便菜。', '12.00', '06.jpg');INSERT INTO `meal` VALUES ('7', '1', '糖醋红柿椒', '色红美,味鲜香。', '色红美,味鲜香。', '8.00', '07.jpg');INSERT INTO `meal` VALUES ('8', '2', '芹黄烧鱼条', '色泽金黄润亮,鱼肉鲜嫩味香。', '色泽金黄润亮,鱼肉鲜嫩味香。', '15.00', '08.jpg');INSERT INTO `meal` VALUES ('9', '2', '巴国玉米糕肉', '风味浓、口感奇、品种多', '风味浓、口感奇、品种多,信手拈来,皆为佳品。', '13.00', '09.jpg');INSERT INTO `meal` VALUES ('10', '2', '酥皮龙虾', '色泽黄绿相衬,协调雅致,外酥内嫩,鲜香爽口', '酥皮龙虾成菜配以西兰花和蒜薹花,使色泽更加丰富,口感多样,诱人食欲。', '20.00', '10.jpg');INSERT INTO `meal` VALUES ('11', '1', '香煎茄片', '色泽红亮,口感似鱼 ', '色泽红亮,口感似鱼 ', '9.00', '11.jpg');INSERT INTO `meal` VALUES ('12', '1', '金陵片皮鸭', '此菜深红明亮,皮脆,肉滑,分两次上桌,滋味各异', '此菜深红明亮,皮脆,肉滑,分两次上桌,滋味各异,原为江苏风味,传入广东有较长历史,在制法上已有不少变化,现已成为粤菜名品。', '10.00', '12.jpg');-- ------------------------------ Table structure for `mealseries`-- ----------------------------DROP TABLE IF EXISTS `mealseries`;CREATE TABLE `mealseries` (`SeriesId` int(4) NOT NULL AUTO_INCREMENT,`SeriesName` varchar(10) DEFAULT NULL,PRIMARY KEY (`SeriesId`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;-- ------------------------------ Records of mealseries-- ----------------------------INSERT INTO `mealseries` VALUES ('1', '鲁菜');INSERT INTO `mealseries` VALUES ('2', '川菜');INSERT INTO `mealseries` VALUES ('3', '粤菜');INSERT INTO `mealseries` VALUES ('4', '苏菜');INSERT INTO `mealseries` VALUES ('5', '闽菜');INSERT INTO `mealseries` VALUES ('6', '浙菜');INSERT INTO `mealseries` VALUES ('7', '湘菜');INSERT INTO `mealseries` VALUES ('8', '徽菜');INSERT INTO `mealseries` VALUES ('9', '西餐');INSERT INTO `mealseries` VALUES ('10', '西点');INSERT INTO `mealseries` VALUES ('11', '药膳');INSERT INTO `mealseries` VALUES ('12', '私房菜');-- ------------------------------ Table structure for `orderdts`-- ----------------------------DROP TABLE IF EXISTS `orderdts`;CREATE TABLE `orderdts` (`ODID` int(4) NOT NULL AUTO_INCREMENT,`OID` int(4) DEFAULT NULL,`MealId` int(4) DEFAULT NULL,`MealPrice` decimal(8,2) DEFAULT NULL,`MealCount` int(4) DEFAULT NULL,PRIMARY KEY (`ODID`),KEY `OID` (`OID`),KEY `MealId` (`MealId`),CONSTRAINT `orderdts_ibfk_1` FOREIGN KEY (`OID`) REFERENCES `orders` (`OID`),CONSTRAINT `orderdts_ibfk_2` FOREIGN KEY (`MealId`) REFERENCES `meal` (`MealId`)) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8;-- ------------------------------ Records of orderdts-- ----------------------------INSERT INTO `orderdts` VALUES ('18', '9', '1', '10.00', '1');INSERT INTO `orderdts` VALUES ('19', '9', '2', '20.00', '1');INSERT INTO `orderdts` VALUES ('20', '10', '1', '10.00', '2');INSERT INTO `orderdts` VALUES ('21', '10', '2', '20.00', '3');INSERT INTO `orderdts` VALUES ('22', '11', '2', '20.00', '2');INSERT INTO `orderdts` VALUES ('23', '11', '4', '8.00', '1');INSERT INTO `orderdts` VALUES ('24', '12', '2', '20.00', '3');INSERT INTO `orderdts` VALUES ('25', '12', '4', '8.00', '1');-- ------------------------------ Table structure for `orders`-- ----------------------------DROP TABLE IF EXISTS `orders`;CREATE TABLE `orders` (`OID` int(4) NOT NULL AUTO_INCREMENT,`UserId` int(4) DEFAULT NULL,`OrderTime` datetime DEFAULT NULL,`OrderState` varchar(20) DEFAULT NULL,`OrderPrice` decimal(8,2) DEFAULT NULL,PRIMARY KEY (`OID`),KEY `UserId` (`UserId`),CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`UserId`) REFERENCES `users` (`Id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;-- ------------------------------ Records of orders-- ----------------------------INSERT INTO `orders` VALUES ('9', '1', '2014-05-04 16:07:44', '未处理', '30.00');INSERT INTO `orders` VALUES ('10', '1', '2014-05-04 18:54:17', '未处理', '80.00');INSERT INTO `orders` VALUES ('11', '1', '2014-05-05 17:30:16', '未处理', '48.00');INSERT INTO `orders` VALUES ('12', '2', '2014-05-05 17:52:48', '未处理', '68.00');-- ------------------------------ Table structure for `users`-- ----------------------------DROP TABLE IF EXISTS `users`;CREATE TABLE `users` (`Id` int(4) NOT NULL AUTO_INCREMENT,`LoginName` varchar(20) DEFAULT NULL,`LoginPwd` varchar(20) DEFAULT NULL,`TrueName` varchar(20) DEFAULT NULL,`Email` varchar(20) DEFAULT NULL,`Phone` varchar(20) DEFAULT NULL,`Address` varchar(50) DEFAULT NULL,PRIMARY KEY (`Id`)) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;-- ------------------------------ Records of users-- ----------------------------INSERT INTO `users` VALUES ('1', 'zhangsan', '123456', '张三', 'user@163.com', '13200000001', '江苏南京X区X小区X栋001');INSERT INTO `users` VALUES ('2', 'zs', 'zs', 'zs', 'zs', 'zs', 'zs');INSERT INTO `users` VALUES ('3', 'lisi', 'lisi', 'lisi', 'lisi', 'lisi', 'lisi');INSERT INTO `users` VALUES ('4', 'user', 'user', '', '', '', '');
//网上银行系统//目录结构srccom.netbankactionAdminAction.javaFileAction.javaPersoninfoAction.javaTransaction.javaUserAction.javabizimplPersoninfoBizImpl.javaTransactionBizImpl.javaUserBizImpl.javaPersoninfoBiz.javaTransactionBiz.javaUserBiz.javadaoimplPersoninfoDAOImpl.javaTransactionDAOImpl.javaUserDAOImpl.javaPersoninfoDAO.javaTransactionDAO.javaUserDAO.javaentityAccount.javaAdmin.javaPager.javaPassword.javaPersoninfo.javaStatus.javaTransactionLog.javaTransactionType.javaAccount.hbm.xmlAdmin.hbm.xmlPersoninfo.hbm.xmlStatus.hbm.xmlTransactionLog.hbm.xmlTransactionType.hbm.xmlapplicationContext.xml  struts-file.xml struts.xml  WebContentadminadd.jspchangepwd.jspleft.jspmain.jspmanage.jspusers.jspcss   admin.cssstyle  default.cssstyle.cssWEB-INF web.xmlchangepwd.jspchecklogin.jspdeposit.jspdown.htmlheader.jspindex.jspinformation.jspleft.jsplogin.jspmain.jspmessage.jspmodify.jsptransactionlog.jsptransfer.jspupload.jspwithdrawal.jsp//AdminAction.javapublic class AdminAction extends ActionSupport implements RequestAware,SessionAware {//定义通过@Resource注解注入的属性userBiz,可省略set方法@Resource private UserBiz userBiz;//定义通过@Resource注解注入的属性personinfoBiz,可省略set方法    @Resource private PersoninfoBiz personinfoBiz;Map<String, Object> request;public void setRequest(Map<String, Object> request) {this.request=request;}Map<String, Object> session;public void setSession(Map<String, Object> session) {this.session=session;}//定义Admin类型对象,用于封装Admin登录等页面的表单参数private Admin admin;     private Account account;    //定义Personinfo类型对象,用于封装页面表单参数private Personinfo personinfo;private Password pwd;//用来封装从"启用"、"冻结"和"删除"按钮传递来的参数private int id;private Status status; /*** 对登录页面进行验证,检查用户名和密码是否正确*/public void validateLogin(){//调用业务方法,根据username获取AdminAdmin a=userBiz.getAdmin(admin.getUsername());if(a==null){this.addFieldError("username", "用户名不存在");}else{if(!admin.getPassword().equals(a.getPassword())){this.addFieldError("password", "密码不正确");}admin=a;}}  /*** 登录* @return*/public String login(){if(admin!=null){session.put("admin",admin);return "success";}return "login";}/*** 查询账户* @return*/public String listUsers(){//调用业务方法,根据账户状态获取个人信息,状态为0表示获取所有客户List users=personinfoBiz.searchPersoninfo(status);request.put("users",users);return "users";}//注销public String logout(){session.remove("admin");return "login";}/*** 对开户页面进行校验,验证用户名是否已存在、一张身份证只能拥有一个账户*/public void validateKaihu(){if(userBiz.getAccount(account.getUsername())!=null){request.put("message", "用户名已存在");}//获取满足条件的个人信息,这里的条件为开户页面中填写的身份证号List list = personinfoBiz.searchPersoninfo(personinfo);//如果所填写的身份证号在个人信息中已存在,则提示错误信息if(list.size()>0){this.addFieldError("personinfo.cardid", "一张身份证只能拥有一个账户");}      }   //开户public String kaihu(){//调用业务方法,向账户表Account中添加账户userBiz.addAccount(account);//调用业务方法,向个人信息表personinfo添加个人信息account = userBiz.getAccount(account.getUsername());personinfo.setAccount(account);personinfoBiz.add(personinfo);request.put("message", "添加成功");return "message";        }/*** 对修改密码页面进行验证*/public void validateChangepwd(){admin=(Admin)session.get("admin");if(!pwd.getOldpwd().equals(admin.getPassword())){this.addFieldError("pwd.oldpwd", "密码不正确");}if(!pwd.getNewpwd().equals(pwd.getConfirmpwd())){this.addFieldError("pwd.confirmpwd", "两次密码不一致");}} //修改密码public String changepwd(){admin.setPassword(pwd.getNewpwd());if(userBiz.modifyAdmin(admin)){session.put("admin",admin);request.put("message", "密码修改成功!");return "message";}request.put("message", "密码修改失败!");return "message";}/*** 删除账户*/    public String del(){//调用业务方法,删除账户,同时进行级联删除userBiz.delAccount(id);return "list";}/*** 查询账户*/ public String search(){List users=personinfoBiz.searchPersoninfo(personinfo);request.put("users",users);return "users";}/*** 启用账户* @return*/public String enabled(){userBiz.enabled(id);return "list";}/*** 冻结账户* @return*/public String locking(){userBiz.locking(id);return "list";}   public int getId() {return id;}public void setId(int id) {this.id = id;}public Admin getAdmin() {return admin;}public void setAdmin(Admin admin) {this.admin = admin;}public Account getAccount() {return account;}public void setAccount(Account account) {this.account = account;}public Personinfo getPersoninfo() {return personinfo;}public void setPersoninfo(Personinfo personinfo) {this.personinfo = personinfo;}public Password getPwd() {return pwd;}public void setPwd(Password pwd) {this.pwd = pwd;}public Status getStatus() {return status;}public void setStatus(Status status) {this.status = status;}}//FileAction.javapublic class FileAction extends ActionSupport implements RequestAware,SessionAware{private Map<String, Object> request;private Map<String, Object> session;private String result;public String getResult() {return result;}String realPath=ServletActionContext.getServletContext().getRealPath("/upload");String contextPath=ServletActionContext.getServletContext().getContextPath();String contextName=ServletActionContext.getServletContext().getServletContextName();private File image;private String imageFileName;private Date date;public String addImages()throws IOException{if(image!=null){File file=new File(realPath);if(!file.exists())file.mkdirs();FileUtils.copyFile(image, new File(file,imageFileName));request.put("message", "文件上传成功!<br><a href='upload.jsp'  title='继续上传'>[继续上传]</a>");return "message";}request.put("message", "您没有上传文件!<br><a href='javascript: history.go(-1)' >[返回]</a>");//result="../upload.jsp";return "message";}public File getImage()  {return image;}public void setImage(File image) {this.image = image;}public String getImageFileName() {return imageFileName;}public void setImageFileName(String imageFileName) {this.imageFileName = imageFileName;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}public void setRequest(Map<String, Object> request) {this.request=request;}public void setSession(Map<String, Object> session) {this.session=session;}public String getContextName() {return contextName;}public String getContextPath() {return contextPath;}public String getRealPath() {return realPath;}}//PersoninfoAction.javapublic class PersoninfoAction extends ActionSupport implements RequestAware,SessionAware {//定义通过@Resource注解注入的属性personinfoBiz,可省略set方法@Resource private PersoninfoBiz personinfoBiz;Map<String, Object> request;Map<String, Object> session;    private Personinfo personinfo;/*** 修改个人信息* @return*/public String modify(){//从session中获取保存的个人信息对象Personinfo per=(Personinfo) session.get("personinfo");//使用modify.jsp页面表单参数更新个人信息对象中的属性per.setAddress(personinfo.getAddress());per.setAge(personinfo.getAge());per.setCardid(personinfo.getCardid());per.setRealname(personinfo.getRealname());per.setSex(personinfo.getSex());per.setTelephone(personinfo.getTelephone());//将个人信息更新到数据库中if(personinfoBiz.modifyPersoninfo(per)){//更新成功后,将个人信息对象重新存入session保存session.put("personinfo",per);request.put("message", "修改成功!");return "message";}            request.put("message", "修改失败!");return "message";}/*** 修改个人信息页面校验*/public void validateModify() {if("".equals(personinfo.getTelephone().trim())){personinfo.setTelephone("电话不详");}if(!(personinfo.getAge()>18&&personinfo.getAge()<100)){addFieldError("personinfo.age", "年龄不符");}if(!Pattern.compile("^\\d{17}(\\d|x)$").matcher(personinfo.getCardid().toString()).matches()){addFieldError("personinfo.cardId", "身份证格式不正确");}if(!"电话不详".equals(personinfo.getTelephone().trim())&&!Pattern.compile("^(?:1[358]\\d{9}|\\d{3,4}-\\d{8,9})$").matcher(personinfo.getTelephone()).matches()){addFieldError("personinfo.telephone", "电话格式不正确");}}public Personinfo getPersoninfo() {return personinfo;}public void setPersoninfo(Personinfo personinfo) {this.personinfo = personinfo;}public void setRequest(Map<String, Object> request) {this.request=request;}public void setSession(Map<String, Object> session) {this.session=session;}}//Transaction.javapublic class Transaction extends ActionSupport implements RequestAware,SessionAware {//使用UserBiz接口声明属性并添加set方法用于依赖注入private UserBiz userBiz;public void setUserBiz(UserBiz userBiz) {this.userBiz = userBiz;}//使用transactionBiz接口声明属性并添加set方法用于依赖注入private TransactionBiz transactionBiz;public void setTransactionBiz(TransactionBiz transactionBiz) {this.transactionBiz = transactionBiz;}  private Map<String, Object> request;public void setRequest(Map<String, Object> request) {this.request=request;}private Map<String, Object> session;public void setSession(Map<String, Object> session) {this.session=session;account=(Account)session.get("user");}//声明Account类型属性private Account account;//定义TransactionLog对象并添加get和set方法,用于封装页面表单参数private TransactionLog log;public TransactionLog getLog() {return log;}public void setLog(TransactionLog log) {this.log = log;}//分页实体类private Pager pager;public Pager getPager() {return pager;}public void setPager(Pager pager) {this.pager = pager;}/*** 显示交易记录* @return*/  public String list(){//获取待显示页页码int curPage=pager.getCurPage();//根据待显示页页码和账户对象获取交易记录List<TransactionLog> logs = transactionBiz.getLogs(account,curPage);     //获得账户的交易记录总数,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性pager=transactionBiz.getPagerOfLogs(account);//设置Pager对象中的待显示页页码pager.setCurPage(curPage);request.put("logs", logs);return "success";}/*** 转账* @return*/public String transfer(){//调用自定义方法isEnable判断账户是否冻结if(isEnable()){//使用执行isEnable方法从session中重新获取的账户对象,给交易信息对象log中关联的账户对象属性赋值log.setAccount(account);session.put("user", account);//调用业务方法,更新转账方和入账方的账户表Accout中的余额,并在交易信息表transaction_log中添加记录return isSuccess(transactionBiz.transfer(log));}return "message";       }/**** 存款* @return*/public String deposit(){//调用自定义方法isEnable判断账户是否冻结if(isEnable()){//使用执行isEnable方法从session中重新获取的账户对象,给交易信息对象log中关联的账户对象属性赋值log.setAccount(account);session.put("user", account);//调用业务方法,更新账户表Accout中的余额,并在交易信息表transaction_log中添加记录return isSuccess(transactionBiz.deposit(log));}return "message";}/*** 取款* @return*/public String withdrawal(){调用自定义方法isEnable判断账户是否冻结if(isEnable()){//使用执行isEnable方法从session中重新获取的账户对象,给交易信息对象log中关联的账户对象属性赋值log.setAccount(account);session.put("user", account);//调用业务方法,更新账户表Accout中的余额,并在交易信息表transaction_log中添加记录return isSuccess(transactionBiz.withdrawal(log));}return "message";}/*** 判断账户是否冻结* @return*/private boolean isEnable(){//从session中重新获取Account对象,该对象在登录成功时已保存到session中userBiz.reflush(account);if(account.getStatus().getName().equals("冻结")){request.put("message", "对不起!该账户也被冻结,无法进行相关操作<br>");return false;}return true;}//根据执行结果,显示操作成功或失败信息private String isSuccess(boolean flag){if(flag){ request.put("message","操作成功!");return "message";}request.put("message","操作失败!<a href='javascript:history.go(-1)'>返回</a>");return "message";}@Overridepublic void validate() {super.validate();}/*** 取款页面校验,用于判断账户余额是否充足*/public void validateWithdrawal(){//比较取款页面输入的金额与账户余额if(log.getTrMoney()>account.getBalance()){this.addFieldError("log.trMoney","您的账户余额不足!");}}/*** 转账页面校验,判断是否给本人账户转账、入账账户是否存在及转账账户余额是否充足*/public void validateTransfer(){if(log.getOtherid().intValue()==account.getAccountid().intValue()){this.addFieldError("log.otherid","您不能转账给自己!");}if(userBiz.getAccount(log.getOtherid())==null){this.addFieldError("log.otherid","该账户不存在!");}if(log.getTrMoney()>account.getBalance()){this.addFieldError("log.trMoney","您的账户余额不足!");}}public TransactionBiz getTransactionBiz() {return transactionBiz;}    public UserBiz getUserBiz() {return userBiz;}}//UserAction.javapublic class UserAction extends ActionSupport implements RequestAware,SessionAware {//定义通过@Resource注解注入的属性userBiz,可省略set方法@Resource private UserBiz userBiz;Map<String, Object> request;Map<String, Object> session;//定义Account类型对象,用于封装登录表单参数private Account account;private Personinfo personinfo;private Password pwd;public String logout(){session.remove("user");session.remove("personinfo");return "login";}/*** 执行页面客户登录请求* @return*/public String login(){//根据关联关系,从账户对象中获取个人信息对象personinfo=(Personinfo) account.getPersoninfos().iterator().next();//将账户对象存入sessionsession.put("user", account);//将该账户个人信息对象存入sessionsession.put("personinfo",personinfo);//页面转发return "success";}/*** 执行修改密码请求* @return*/public String changepwd(){account.setPassword(pwd.getNewpwd());if(userBiz.modifyAccount(account)){session.put("user", account);request.put("message", "密码修改成功!");return "message";}request.put("message", "密码修改失败!");return "message";}/*** 修改密码页面验证*/public void validateChangepwd(){account=(Account) session.get("user");if(!pwd.getOldpwd().equals(account.getPassword())){this.addFieldError("pwd.oldpwd", "密码不正确");}if(!pwd.getNewpwd().equals(pwd.getConfirmpwd())){this.addFieldError("pwd.confirmpwd", "两次密码不一致");}}/*** 登录表单校验,并实现根据用户名获取账户对象*/public void validateLogin(){Account a = userBiz.getAccount(account.getUsername());if(a==null){this.addFieldError("username", "用户名不存在");}else{if(!account.getPassword().equals(a.getPassword())){this.addFieldError("password", "密码不正确");}}account=a;       }public Personinfo getPersoninfo() {return personinfo;}public void setPersoninfo(Personinfo personinfo) {this.personinfo = personinfo;}public Account getAccount() {return account;}public void setAccount(Account account) {this.account = account;}public Password getPwd() {return pwd;}public void setPwd(Password pwd) {this.pwd = pwd;}public void setRequest(Map<String, Object> request) {this.request=request;}public void setSession(Map<String, Object> session) {this.session=session;}}//PersoninfoBizImpl.java//使用@Transactional注解实现事务管理@Transactionalpublic class PersoninfoBizImpl implements PersoninfoBiz {//使用PersoninfoDao接口定义对象,并添加set方法用于依赖注入PersoninfoDAO personinfoDao;public void setPersoninfoDao(PersoninfoDAO personinfoDao) {this.personinfoDao = personinfoDao;}//使用UserDao接口定义对象,并添加set方法用于依赖注入UserDAO userDao;public void setUserDao(UserDAO userDao) {this.userDao = userDao;}/*** 修改个人信息*/public boolean modifyPersoninfo(Personinfo personinfo) {personinfoDao.modifyPersoninfo(personinfo);return true;}/*** 添加个人信息*/public boolean add(Personinfo personinfo) {return personinfoDao.add(personinfo);}/*** 查询个人信息*/public List getAllPersoninfo() {return personinfoDao.getAllPersoninfo();}/*** 根据条件获取个人信息*/public List searchPersoninfo(Personinfo personinfo) {return personinfoDao.searchPersoninfo(personinfo);}/*** 根据账户状态获取个人信息,状态为0表示获取所有客户*/public List searchPersoninfo(Status status){List users =new ArrayList();if(status.getId()!=0){     //如果账户状态编号不为0,则根据编号获取相应客户记录status=userDao.getStatus(status.getId());users=personinfoDao.searchPersoninfo(status);}else{//如果账户状态编号等于0,则获取所有客户记录users= personinfoDao.getAllPersoninfo();}return users;}}//TransactionBizImpl.java//使用@Transactional注解实现事务管理@Transactionalpublic class TransactionBizImpl implements TransactionBiz {//使用TransactionDao接口声明属性,并添加set方法用于依赖注入private TransactionDAO transactionDao;public void setTransactionDao(TransactionDAO transactionDao) {this.transactionDao = transactionDao;}//使用UserDao接口声明属性,并添加set方法用于依赖注入private UserDAO userDao;public void setUserDao(UserDAO userDao) {this.userDao = userDao;}/*** 获取交易记录*/public List getLogs(Account account,int page) {     return transactionDao.getLogs(account,page);}/*** 转账*/  @Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED)public boolean transfer(TransactionLog log) {//获取入账方账户对象Account other=userDao.getAccount(log.getOtherid());//获取转账方账户对象Account self=log.getAccount();if(other!=null){//修改转账方账户余额self.setBalance(log.getAccount().getBalance()-log.getTrMoney());//修改入账方账户余额other.setBalance(other.getBalance()+log.getTrMoney());//将转账方账户余额更新到数据表AccountuserDao.updateAccount(self);//将入账方账户余额更新到数据表AccountuserDao.updateAccount(other);//根据交易类型获取交易类型对象TransactionType type = transactionDao.getTransactionType("转账");log.setTransactionType(type);//向数据表transaction_log中添加交易记录return  transactionDao.addLog(log);}return false;       }/*** 存款*/public boolean deposit(TransactionLog log) {//从交易信息对象log中取出账户对象Account self=log.getAccount();//将账户余额与存款金额相加self.setBalance(log.getAccount().getBalance()+log.getTrMoney());//更新账户表Account,修改账户余额userDao.updateAccount(self);//根据交易类型获取交易类型对象TransactionType type = transactionDao.getTransactionType("存款");log.setTransactionType(type);log.setOtherid(self.getAccountid());//向数据表transaction_log中添加交易记录return transactionDao.addLog(log);}/*** 取款*/public boolean withdrawal(TransactionLog log){//从交易信息对象log中取出账户对象Account self=log.getAccount();//将账户余额与取款金额相减self.setBalance(log.getAccount().getBalance()-log.getTrMoney());//更新账户表Account,修改账户余额userDao.updateAccount(self);//根据交易类型获取交易类型对象TransactionType type = transactionDao.getTransactionType("取款");log.setTransactionType(type);log.setOtherid(self.getAccountid());//向数据表transaction_log中添加交易记录return transactionDao.addLog(log);}/*** 获得账户的交易记录总数,用来初始化分页类Pager对象,* 并设置其perPageRows和rowCount属性*/public Pager getPagerOfLogs(Account account) {//从数据表Transaction_Log中获取与账户相关的交易记录数int count=transactionDao.getCountOfLogs(account);//使用分页类Pager定义对象Pager pager=new Pager();//设置pager对象中的perPageRows属性,表示每页显示的记录数pager.setPerPageRows(10);//设置pager对象中的rowCount属性,表示记录总数pager.setRowCount(count);//返回pager对象return pager;}public TransactionDAO getTransactionDao() {return transactionDao;}public UserDAO getUserDao() {return userDao;}}//UserBizImpl.java//使用@Transactional注解实现事务管理@Transactionalpublic class UserBizImpl implements UserBiz {//使用UserDao接口声明对象,并添加set方法,用于依赖注入UserDAO userDao; public void setUserDao(UserDAO userDao) {this.userDao = userDao;}//修改账户    public boolean modifyAccount(Account account) {return userDao.updateAccount(account);}//根据账户ID获取账户@Transactional(readOnly=true)public Account getAccount(int accountid) {return userDao.getAccount(accountid);}//根据username获取账户public Account getAccount(String username) {return userDao.getAccount(username);}//根据username获取Adminpublic Admin getAdmin(String username) {return userDao.getAdmin(username);}//获得所有账户public List getAllAccounts() {return userDao.getAllAcconts();}//添加账户    public boolean addAccount(Account account) {Status status=userDao.getStatus("启用");account.setStatus(status);return userDao.addAccount(account);}//修改Adminpublic boolean modifyAdmin(Admin admin) {return userDao.modifyAdmin(admin);}/*** 删除用户*/public boolean delAccount(int id) {//根据账户id获取账户Account account=userDao.getAccount(id);//删除账户对象,同时执行级联删除return userDao.delAccount(account);}/*** 查询账户*/public Account searchAccounts(Account account) {return userDao.searchAccounts(account);}/*** 获取状态*/public Status getStatus(String name) {return userDao.getStatus(name);}public Status getStatus(int id) {return userDao.getStatus(id);}/*** 启用账户*/public void enabled(int id) {//根据账户编号获取账户对象Account account = userDao.getAccount(id);//修改账户对象的状态属性,设置为启用Status status = userDao.getStatus("启用");account.setStatus(status);//更新账户userDao.updateAccount(account);       }/*** 冻结账户*/public void locking(int id) {//根据账户编号获取账户对象Account account = userDao.getAccount(id);//修改账户对象的状态属性,设置为冻结Status status = userDao.getStatus("冻结");      account.setStatus(status);//更新账户userDao.updateAccount(account);}public void reflush(Account account) {userDao.reflush(account);     }}//PersoninfoBiz.javapublic interface PersoninfoBiz {//修改个人信息public boolean modifyPersoninfo(Personinfo personinfo);//添加个人信息public boolean add(Personinfo personinfo);//获取全部个人信息public List getAllPersoninfo();//根据条件查询个人信息public List searchPersoninfo(Personinfo personinfo);//根据账户状态获取个人信息public List searchPersoninfo(Status status);}//TransactionBiz.javapublic interface TransactionBiz {//根据获取交易记录public List getLogs(Account account,int page);//转账public boolean transfer(TransactionLog log);//存款public boolean deposit(TransactionLog log);//取款public boolean withdrawal(TransactionLog log);  //获得账户的交易记录总数,用来初始化分页类Pager对象,并设置其perPageRows和rowCount属性     public Pager getPagerOfLogs(Account account);}//UserBiz.javapublic interface UserBiz {/*** 添加账户* @param account* @return*/public boolean addAccount(Account account);/*** 删除账户*/public boolean delAccount(int id);/*** 修改账户* @param account* @return*/public abstract boolean modifyAccount(Account account);/*** 查询账户*/public Account searchAccounts(Account account);/*** 根据账户id获取账户对象* @param accountid* @return*/@Transactional(readOnly = true)public Account getAccount(int accountid);//根据账户名称获取账户public Account getAccount(String username);public List getAllAccounts();/*** 启用账户*/public void enabled(int id);/*** 冻结账户*/public void locking(int id);//根据名称获取账户状态对象public Status getStatus(String name);public Status getStatus(int id);//修改Adminpublic boolean modifyAdmin(Admin admin);//根据username获取Adminpublic abstract Admin getAdmin(String username);public abstract void reflush(Account account);}//PersoninfoDAOImpl.javapublic class PersoninfoDAOImpl implements PersoninfoDAO {SessionFactory sessionFactory;   public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}/*** 修改个人信息*/public void modifyPersoninfo(Personinfo personinfo) {Session session=sessionFactory.getCurrentSession();session.update(personinfo);      }/*** 添加个人信息*/public boolean add(Personinfo personinfo) {Session session=sessionFactory.getCurrentSession();session.save(personinfo);return true;}/*** 查询全部用户信息*/public List getAllPersoninfo() {Session session=sessionFactory.getCurrentSession();String hql="from Personinfo";      Query query = session.createQuery(hql);return query.list();}/*** 根据账户状态获取用户信息*/public List searchPersoninfo(Status status) {Session session=sessionFactory.getCurrentSession();String hql="from Personinfo p where p.account.status.id="+status.getId();     Query query = session.createQuery(hql);return query.list();}       /*** 根据条件查询个人信息*/public List searchPersoninfo(Personinfo personinfo) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Personinfo.class);if(personinfo.getRealname()!=null&&!"".equals(personinfo.getRealname())){if(personinfo.getCardid()!=null){c.add(Restrictions.or(Restrictions.eq("realname",personinfo.getRealname()),Restrictions.eq("cardid",personinfo.getCardid())));}else{c.add(Restrictions.like("realname",personinfo.getRealname(),MatchMode.ANYWHERE));}                   }c.addOrder(Order.asc("id"));return c.list();}}//TransactionDAOImpl.javapublic class TransactionDAOImpl implements TransactionDAO{SessionFactory sessionFactory;  public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}/*** 向数据表transaction_log中添加记录*/public boolean addLog(TransactionLog log) {Session session=sessionFactory.getCurrentSession();session.save(log);return true;}/*** 获取交易记录*/public List getLogs(Account account,int page) {Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(TransactionLog.class);c.add(Restrictions.or(Restrictions.eq("account", account), Restrictions.eq("otherid", account.getAccountid())));c.addOrder(Order.desc("id"));c.setFirstResult(10*(page-1));c.setMaxResults(10);return c.list();}/*** 根据交易类型名称获取交易类型对象*/public TransactionType getTransactionType(String name) {Session session=sessionFactory.getCurrentSession();String hql="from TransactionType t where t.name='"+name+"'";Query query=session.createQuery(hql);return (TransactionType) query.uniqueResult();      }/*** 从数据表Transaction_Log中获取与账户相关的交易记录数*/public Integer getCountOfLogs(Account account){Session session=sessionFactory.getCurrentSession();String sql="select count(*) from Transaction_Log where (accountid="+account.getAccountid()+" or otherid="+account.getAccountid()+")";Query query=session.createSQLQuery(sql);Integer count= Integer.parseInt(query.uniqueResult().toString()) ;return count;}    }//UserDAOImpl.javapublic class UserDAOImpl implements UserDAO {SessionFactory sessionFactory;  public void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}   //修改账户public boolean updateAccount(Account account) {Session session=sessionFactory.getCurrentSession();session.merge(account);return true;}//根据username获取Adminpublic Admin getAdmin(String username) {Session session=sessionFactory.getCurrentSession();String hql="from Admin as a where a.username='"+username+"'";     Query query = session.createQuery(hql);return (Admin) query.uniqueResult();}//修改Adminpublic boolean modifyAdmin(Admin admin) {Session session=sessionFactory.getCurrentSession();session.update(admin);return true;}//根据查询条件查询用户public Account searchAccounts(Account account){       Session session=sessionFactory.getCurrentSession();Criteria c=session.createCriteria(Account.class);if((account.getUsername()!=null) && !"".equals(account.getUsername())){c.add(Restrictions.like("username", account.getUsername(),MatchMode.ANYWHERE));}c.addOrder(Order.asc("accountid"));return (Account)c.list().get(0);}//根据账户ID获取账户对象public Account getAccount(int id){Session session=sessionFactory.getCurrentSession();return (Account) session.get(Account.class, id);}//根据username获取账户public Account getAccount(String username) {Session session=sessionFactory.getCurrentSession();       String hql="from Account where username='"+username+"'";Query query = session.createQuery(hql);return (Account) query.uniqueResult();}//获取所有账户public List getAllAcconts() {Session session=sessionFactory.getCurrentSession();String hql="from Account ";Query query = session.createQuery(hql);return query.list();}//添加账户public boolean addAccount(Account account) {Session session=sessionFactory.getCurrentSession();session.save(account);return true;}/*** 删除账户*/public boolean delAccount(Account account) {Session session=sessionFactory.getCurrentSession();session.delete(account);return true;}/***根据名称获取状态*/public Status getStatus(String name) {Session session=sessionFactory.getCurrentSession();String hql="from Status as s where s.name='"+name+"'";      Query query = session.createQuery(hql);return (Status) query.uniqueResult();}public Status getStatus(int id) {Session session=sessionFactory.getCurrentSession();return (Status) session.get(Status.class, id);}//从session中重新获取对象accountpublic void reflush(Account account){Session session=sessionFactory.getCurrentSession();session.refresh(account);}}//PersoninfoDAO.javapublic interface PersoninfoDAO {//修改个人信息public void modifyPersoninfo(Personinfo personinfo);//获取全部用户信息public List getAllPersoninfo();//添加个人信息public boolean add(Personinfo personinfo);//根据条件查询个人信息public List searchPersoninfo(Personinfo personinfo);//根据账户状态获取用户信息public List searchPersoninfo(Status status);}//TransactionDAO.javapublic interface TransactionDAO {//向数据表transaction_log中添加记录public boolean addLog(TransactionLog log);//获取交易记录public List getLogs(Account account,int page);//根据交易类型名称获取交易类型对象public TransactionType getTransactionType(String name);//获取交易记录数public Integer getCountOfLogs(Account account);}//UserDAO.javapublic interface UserDAO {//根据账户id获取账户对象public  Account getAccount(int accountid);//根据客户名获取客户对象public Account getAccount(String username);public List getAllAcconts();public Account searchAccounts(Account account);//修改账户public boolean updateAccount(Account account);//添加账户public boolean addAccount(Account account);//删除账户public boolean delAccount(Account account);public void reflush(Account account);//根据账户状态名称获取账户状态对象public Status getStatus(String name);public Status getStatus(int id);//根据username获取Adminpublic Admin getAdmin(String username);public boolean modifyAdmin(Admin admin);}//Account.javapublic class Account implements java.io.Serializable {// Fieldsprivate Integer accountid;private Status status;private String username;private String password;private Double balance;private Set transactionLogs = new HashSet(0);private Set personinfos = new HashSet(0);// Constructors/** default constructor */public Account() {}/** full constructor */public Account(Status status, String username, String password,Double balance, Set transactionLogs, Set personinfos) {this.status = status;this.username = username;this.password = password;this.balance = balance;this.transactionLogs = transactionLogs;this.personinfos = personinfos;}// Property accessorspublic Integer getAccountid() {return this.accountid;}public void setAccountid(Integer accountid) {this.accountid = accountid;}public Status getStatus() {return this.status;}public void setStatus(Status status) {this.status = status;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return this.password;}public void setPassword(String password) {this.password = password;}public Double getBalance() {return this.balance;}public void setBalance(Double balance) {this.balance = balance;}public Set getTransactionLogs() {return this.transactionLogs;}public void setTransactionLogs(Set transactionLogs) {this.transactionLogs = transactionLogs;}public Set getPersoninfos() {return this.personinfos;}public void setPersoninfos(Set personinfos) {this.personinfos = personinfos;}}//Admin.javapublic class Admin implements java.io.Serializable {// Fieldsprivate Integer id;private String username;private String password;// Constructors/** default constructor */public Admin() {}/** full constructor */public Admin(String username, String password) {this.username = username;this.password = password;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return this.password;}public void setPassword(String password) {this.password = password;}}//Pager.javapublic class Pager {private int curPage;//待显示页private int perPageRows ;//一页显示的记录数  private int rowCount; //记录总数  private int pageCount; //总页数   public int getCurPage() {return curPage;}public void setCurPage(int currentPage) {this.curPage = currentPage;}public int getPerPageRows() {return perPageRows;}public void setPerPageRows(int perPageRows) {this.perPageRows = perPageRows;}public int getRowCount() {return rowCount;}public void setRowCount(int rowCount) {this.rowCount = rowCount;}public int getPageCount() {return (rowCount+perPageRows-1)/perPageRows;}}//Password.javapublic class Password {private String oldpwd;private String newpwd;public String getOldpwd() {return oldpwd;}public void setOldpwd(String oldpwd) {this.oldpwd = oldpwd;}public String getNewpwd() {return newpwd;}public void setNewpwd(String newpwd) {this.newpwd = newpwd;}public String getConfirmpwd() {return confirmpwd;}public void setConfirmpwd(String confirmpwd) {this.confirmpwd = confirmpwd;}private String confirmpwd;}//Personinfo.javapublic class Personinfo implements java.io.Serializable {// Fieldsprivate Integer id;private Account account;private String realname;private Integer age;private String sex;private Long cardid;private String address;private String telephone;// Constructors/** default constructor */public Personinfo() {}/** full constructor */public Personinfo(Account account, String realname, Integer age,String sex, Long cardid, String address, String telephone) {this.account = account;this.realname = realname;this.age = age;this.sex = sex;this.cardid = cardid;this.address = address;this.telephone = telephone;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public Account getAccount() {return this.account;}public void setAccount(Account account) {this.account = account;}public String getRealname() {return this.realname;}public void setRealname(String realname) {this.realname = realname;}public Integer getAge() {return this.age;}public void setAge(Integer age) {this.age = age;}public String getSex() {return this.sex;}public void setSex(String sex) {this.sex = sex;}public Long getCardid() {return this.cardid;}public void setCardid(Long cardid) {this.cardid = cardid;}public String getAddress() {return this.address;}public void setAddress(String address) {this.address = address;}public String getTelephone() {return this.telephone;}public void setTelephone(String telephone) {this.telephone = telephone;}}//Status.javapublic class Status implements java.io.Serializable {// Fieldsprivate Integer id;private String name;private Set accounts = new HashSet(0);// Constructors/** default constructor */public Status() {}/** full constructor */public Status(String name, Set accounts) {this.name = name;this.accounts = accounts;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Set getAccounts() {return this.accounts;}public void setAccounts(Set accounts) {this.accounts = accounts;}}//TransactionLog.javapublic class TransactionLog implements java.io.Serializable {// Fieldsprivate Integer id;private TransactionType transactionType;private Account account;private Integer otherid;private Double trMoney;private String datetime;// Constructors/** default constructor */public TransactionLog() {}/** full constructor */public TransactionLog(TransactionType transactionType, Account account,Integer otherid, Double trMoney, String datetime) {this.transactionType = transactionType;this.account = account;this.otherid = otherid;this.trMoney = trMoney;this.datetime = datetime;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public TransactionType getTransactionType() {return this.transactionType;}public void setTransactionType(TransactionType transactionType) {this.transactionType = transactionType;}public Account getAccount() {return this.account;}public void setAccount(Account account) {this.account = account;}public Integer getOtherid() {return this.otherid;}public void setOtherid(Integer otherid) {this.otherid = otherid;}public Double getTrMoney() {return this.trMoney;}public void setTrMoney(Double trMoney) {this.trMoney = trMoney;}public String getDatetime() {return this.datetime;}public void setDatetime(String datetime) {this.datetime = datetime;}}//TransactionType.javapublic class TransactionType implements java.io.Serializable {// Fieldsprivate Integer id;private String name;private Set transactionLogs = new HashSet(0);// Constructors/** default constructor */public TransactionType() {}/** full constructor */public TransactionType(String name, Set transactionLogs) {this.name = name;this.transactionLogs = transactionLogs;}// Property accessorspublic Integer getId() {return this.id;}public void setId(Integer id) {this.id = id;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Set getTransactionLogs() {return this.transactionLogs;}public void setTransactionLogs(Set transactionLogs) {this.transactionLogs = transactionLogs;}}//Account.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.netbank.entity.Account" table="account" catalog="bank"><id name="accountid" type="java.lang.Integer"><column name="accountid" /><generator class="native"></generator></id><many-to-one name="status" class="com.netbank.entity.Status" fetch="select" lazy="false"><column name="status" /></many-to-one><property name="username" type="java.lang.String"><column name="username" length="50" /></property><property name="password" type="java.lang.String"><column name="password" length="50" /></property><property name="balance" type="java.lang.Double"><column name="balance" precision="18" /></property><set name="transactionLogs" inverse="true" lazy="false" cascade="delete"><key><column name="accountid" /></key><one-to-many class="com.netbank.entity.TransactionLog" /></set><set name="personinfos" inverse="true" lazy="false" cascade="delete"><key><column name="accountid" /></key><one-to-many class="com.netbank.entity.Personinfo" /></set></class></hibernate-mapping>//Admin.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.netbank.entity.Admin" table="admin" catalog="bank"><id name="id" type="java.lang.Integer"><column name="id" /><generator class="native"></generator></id><property name="username" type="java.lang.String"><column name="username" length="50" /></property><property name="password" type="java.lang.String"><column name="password" length="50" /></property></class></hibernate-mapping>//Personinfo.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.netbank.entity.Personinfo" table="personinfo" catalog="bank"><id name="id" type="java.lang.Integer"><column name="id" /><generator class="native"></generator></id><many-to-one name="account" class="com.netbank.entity.Account" fetch="select" lazy="false"><column name="accountid" /></many-to-one><property name="realname" type="java.lang.String"><column name="realname" length="50" /></property><property name="age" type="java.lang.Integer"><column name="age" /></property><property name="sex" type="java.lang.String"><column name="sex" length="2" /></property><property name="cardid" type="java.lang.Long"><column name="cardid" precision="18" scale="0" /></property><property name="address" type="java.lang.String"><column name="address" length="50" /></property><property name="telephone" type="java.lang.String"><column name="telephone" length="50" /></property></class></hibernate-mapping>//Status.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.netbank.entity.Status" table="status" catalog="bank"><id name="id" type="java.lang.Integer"><column name="id" /><generator class="native"></generator></id><property name="name" type="java.lang.String"><column name="name" length="20" /></property><set name="accounts" inverse="true" lazy="false"><key><column name="status" /></key><one-to-many class="com.netbank.entity.Account" /></set></class></hibernate-mapping> //TransactionLog.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.netbank.entity.TransactionLog" table="transaction_log" catalog="bank"><id name="id" type="java.lang.Integer"><column name="id" /><generator class="native"></generator></id><many-to-one name="transactionType" class="com.netbank.entity.TransactionType" fetch="select" lazy="false"><column name="ta_type" /></many-to-one><many-to-one name="account" class="com.netbank.entity.Account" fetch="select" lazy="false"><column name="accountid" /></many-to-one><property name="otherid" type="java.lang.Integer"><column name="otherid" /></property><property name="trMoney" type="java.lang.Double"><column name="tr_money" precision="18" /></property><property name="datetime" type="java.lang.String"><column name="datetime" length="50" /></property></class></hibernate-mapping>//TransactionType.hbm.xml<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><class name="com.netbank.entity.TransactionType" table="transaction_type" catalog="bank"><id name="id" type="java.lang.Integer"><column name="id" /><generator class="native"></generator></id><property name="name" type="java.lang.String"><column name="name" length="50" /></property><set name="transactionLogs" inverse="true" lazy="false"><key><column name="ta_type" /></key><one-to-many class="com.netbank.entity.TransactionLog" /></set></class></hibernate-mapping>//applicationContext.xml   <?xml version="1.0" encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:p="http://www.springframework.org/schema/p"xmlns:tx="http://www.springframework.org/schema/tx"xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd    http://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context-3.1.xsd"><bean id="dataSource"class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName"value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/bank"></property><property name="username" value="root"></property><property name="password" value="123456"></property></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="hibernateProperties"><props><prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop></props></property><property name="mappingResources"><list><value>com/netbank/entity/TransactionType.hbm.xml</value><value>com/netbank/entity/Account.hbm.xml</value><value>com/netbank/entity/TransactionLog.hbm.xml</value><value>com/netbank/entity/Personinfo.hbm.xml</value><value>com/netbank/entity/Status.hbm.xml</value><value>com/netbank/entity/Admin.hbm.xml</value></list></property></bean><!--开启注解处理器  --><context:annotation-config/><bean id="transactionManager"class="org.springframework.orm.hibernate4.HibernateTransactionManager"><property name="sessionFactory" ref="sessionFactory" /></bean><!-- 基于@Transactional注解方式的事务管理 --><tx:annotation-driven transaction-manager="transactionManager" /><!-- 定义UserDaoImpl,并给类中的sessionFactory属性注入值 --><bean id="userDao" class="com.netbank.dao.impl.UserDAOImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 定义UserBizImpl,并给其属性userDao注入实例 --><bean id="userBiz" class="com.netbank.biz.impl.UserBizImpl"><property name="userDao" ref="userDao"></property></bean><!-- 定义PersoninfoDaoImpl,并给类中的sessionFactory属性注入值 --><bean id="personinfoDao" class="com.netbank.dao.impl.PersoninfoDAOImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean><!-- 定义PersoninfoBizImpl,并给其属性personinfoDao和userDao注入Bean实例 --><bean id="personinfoBiz" class="com.netbank.biz.impl.PersoninfoBizImpl"><property name="personinfoDao" ref="personinfoDao"></property><property name="userDao" ref="userDao"></property></bean><!-- 定义TransactionDaoImpl,并给类中的sessionFactory属性注入值 --><bean id="transactionDao" class="com.netbank.dao.impl.TransactionDAOImpl"><property name="sessionFactory" ref="sessionFactory"></property></bean>  <!-- 定义TransactionBizImpl,并给其属性transactionDao和userDao注入Bean实例 --><bean id="transactionBiz" class="com.netbank.biz.impl.TransactionBizImpl"><property name="transactionDao" ref="transactionDao"></property><property name="userDao" ref="userDao"></property></bean> <!-- 使用原型模式定义UserAction类,UserAction类的属性通过Annotation注解方式注入 --><bean name="user" class="com.netbank.action.UserAction" scope="prototype"/><bean name="file" class="com.netbank.action.FileAction" scope="prototype"/><!-- 使用原型模式定义PersoninfoAction类,PersoninfoAction类的属性通过Annotation注解方式注入 --><bean name="personinfo" class="com.netbank.action.PersoninfoAction" scope="prototype"/><!-- 使用原型模式定义AdminAction类,AdminAction类的属性userBiz和personinfoBiz通过Annotation注解方式注入 --><bean name="admin" class="com.netbank.action.AdminAction" scope="prototype" /><!-- 使用原型模式定义Transaction类,并给属性 userBiz和transactionBiz注入值--><bean name="transaction" class="com.netbank.action.Transaction" scope="prototype"><property name="userBiz" ref="userBiz"></property><property name="transactionBiz" ref="transactionBiz"></property></bean></beans>//struts-file.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"><struts>   <package name="file" namespace="/file" extends="struts-default">    <interceptors><interceptor name="role" class="com.netbank.interceptor.RoleInterceptor"/><interceptor-stack name="roleStack"><interceptor-ref name="defaultStack"/><interceptor-ref name="role"/></interceptor-stack></interceptors><default-interceptor-ref name="roleStack"/><default-action-ref name="file"/><global-results><result name="message">/message.jsp</result></global-results><action name="file" class="file" method="addImages"></action><action name="file_*" class="file" method="{1}"></action></package>  </struts>//struts.xml <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts><constant name="struts.enable.DynamicMethodInvocation" value="true" /><constant name="struts.devMode" value="true" /><constant name="struts.i18n.encoding" value="UTF-8"/><constant name="struts.objectFactory" value="spring"/><constant name="struts.configuration.xml.reload" value="true"></constant><include file="struts-file.xml"/> <!-- <include file ="struts-default.xml" />     -->  <!-- 定义一个名称为admin的包,继承struts 2的默认包,指定命名空间为"/admin" --><package name="admin" namespace="/admin" extends="struts-default"><!-- 使用通配符与动态值配置AdminAction --><action name="*" class="admin" method="{1}"><result name="login">/login.jsp</result><result name="users">/admin/users.jsp</result><result name="add">/admin/add.jsp</result><result name="input">/message.jsp</result><result name="message">/message.jsp</result><!-- 将请求重定向到别的Action,相当于重新发起一次请求,并携带请求参数 --><result name="list" type="redirectAction"><param name="actionName">listUsers</param><param name="status.id">${status.id}</param></result><!--  <interceptor-ref name="adminStack"/>--></action><!--  <action name="add" class="admin" method="add"><result name="input">/admin/add.jsp</result></action>--><!-- 为AdminAction类中login方法配置映射 --><action name="login" class="admin" method="login"><result name="success" >manage.jsp</result><result name="input">/login.jsp</result></action></package><!-- 定义一个名称为user的包,继承struts 2的默认包,指定命名空间为"/user" --><package name="user" namespace="/user" extends="struts-default"><!-- 使用通配符实现动态方法调用 --><action name="user_*" class="user" method="{1}"><result name="success">/index.jsp</result><result name="login">/login.jsp</result><result name="input">/login.jsp</result></action><!-- 为UserAction类中的changepwd方法配置映射 --><action name="changepwd" class="user" method="changepwd"><result name="input">/changepwd.jsp</result><result name="message">/message.jsp</result><!--<interceptor-ref name="roleStack"/>--></action></package><!-- 定义一个名称为transaction的包,继承struts 2的默认包,指定命名空间为"/transaction" --><package name="transaction" namespace="/transaction" extends="struts-default"><!--<default-interceptor-ref name="roleStack"/>--><!-- 为Transaction类中list方法配置映射 --><action name="list" class="transaction" method="list"><result name="success">/transactionlog.jsp</result></action><!-- 为Transaction类中transfer方法配置映射 --><action name="transfer" class="transaction" method="transfer"><result name="input">/transfer.jsp</result><result name="message">/message.jsp</result></action><!-- 为Transaction类中deposit方法配置映射 --><action name="deposit" class="transaction" method="deposit"><result name="input">/deposit.jsp</result><result name="message">/message.jsp</result></action><!-- 为Transaction类中withdrawal方法配置映射 --><action name="withdrawal" class="transaction" method="withdrawal"><result name="input">/withdrawal.jsp</result><result name="message">/message.jsp</result></action></package><!-- 定义一个名称为info的包,继承struts 2的默认包,指定命名空间为"/info" --><package name="info" namespace="/info" extends="struts-default"><!--  <default-interceptor-ref name="roleStack"/>--><!-- 使用通配符实现动态方法调用 --><action name="info_*" class="personinfo" method="{1}"><result name="login">/login.jsp</result><result name="input">/modify.jsp</result><result name="message">/message.jsp</result><!--<interceptor-ref name="roleStack"/>--></action></package></struts>    //add.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'modify.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 page"><link rel="stylesheet" type="text/css" href="/netbank/style/style.css"><link rel="stylesheet" type="text/css" href="/netbank/style/default.css"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">function check(){var isMobile=/^(?:13\d|15\d)\d{5}(\d{3}|\*{3})$/;   var isPhone=/^((0\d{2,3})-)?(\d{7,8})(-(\d{3,}))?$/; var isCardid=/^\d{17}(\d|x)$/;var username=document.getElementById("username").value;var pwd=document.getElementById("pwd").value;var confirmpwd=document.getElementById("confirmpwd").value;var balance=document.getElementById("balance").value;var realname=document.getElementById("realname").value;var age=document.getElementById("age").value;var address=document.getElementById("address").value;var telephone=document.getElementById("telephone").value;var cardid=document.getElementById("cardid").value;document.getElementById("errorusername").innerHTML="";document.getElementById("errorpwd").innerHTML="";document.getElementById("errorconfirmpwd").innerHTML="";document.getElementById("errorbalance").innerHTML="";document.getElementById("errorrealname").innerHTML="";document.getElementById("errorage").innerHTML="";document.getElementById("erroraddress").innerHTML="";document.getElementById("errortelephone").innerHTML="";document.getElementById("errorcardid").innerHTML="";if(username==""){document.getElementById("errorusername").innerHTML="请输入用户名";return false;}else if(pwd==""){document.getElementById("errorpwd").innerHTML="请输入密码";return false;}else if(confirmpwd==""){document.getElementById("errorconfirmpwd").innerHTML="请确认密码";return false;}else if(balance==""){document.getElementById("errorbalance").innerHTML="请输入金额";return false;}else if(realname==""){document.getElementById("errorrealname").innerHTML="请输入姓名";return false;}else if(address==""){document.getElementById("erroraddress").innerHTML="请输入地址";return false;}else if(telephone==""){document.getElementById("errortelephone").innerHTML="请输入电话";return false;}else if(cardid==""){document.getElementById("errorcardid").innerHTML="请输入身份证号";return false;}else if(age==""){document.getElementById("errorage").innerHTML="请输入年龄";return false;}else{if(pwd!=confirmpwd){document.getElementById("errorconfirmpwd").innerHTML="两次密码不一致";return false;}if(!(balance.search(/^[\+\-]?\d+\.?\d*$/)==0)){document.getElementById("errorbalance").innerHTML="含有非法字符";return false;}else{if(parseFloat(balance)<10){document.getElementById("errorbalance").innerHTML="开户金额不能少于10元";return false;}}if(!(age.search(/^[\+\-]?\d+\.?\d*$/)==0)){document.getElementById("errorage").innerHTML="含有非法字符";return false;}else{if(parseFloat(age)<18){document.getElementById("errorage").innerHTML="未成年人不能开户";return false;}else if(parseFloat(age)>99){document.getElementById("errorage").innerHTML="年龄输入有误,100岁以下";return false;}}if(!isPhone.test(telephone)&&!isMobile.test(telephone)){document.getElementById("errortelephone").innerHTML="电话格式不正确";return false;}if(!isCardid.test(cardid)){document.getElementById("errorcardid").innerHTML="身份证格式不正确";return false;}return true;}}</script></head><body><form method="post" name="myform" action="/netbank/admin/kaihu"onsubmit="return check()"><div align="center"><table width="450" class="table"><tbody><tr><td width="100">用户名:</td><td><input id="username" type="text" name="account.username" /><span id="errorusername" style="color: red;">${message}</span></td></tr><tr><td>密码:</td><td><input id="pwd" type="password" name="account.password" /><span id="errorpwd" style="color: red;"></span></td></tr><tr><td>确认密码:</td><td><input id="confirmpwd" type="password" /> <spanid="errorconfirmpwd" style="color: red;"></span></td></tr><tr><td>开户金额:</td><td><input id="balance" type="text" name="account.balance" /><span id="errorbalance" style="color: red;"></span></td></tr><tr><td>姓名:</td><td><input type="text" id="realname"name="personinfo.realname" /> <span id="errorrealname"style="color: red;"></span></td></tr><tr><td>年龄:</td><td><input id="age" type="text" name="personinfo.age" "/> <spanid="errorage" style="color: red;"></span></td></tr><tr><td>性别:</td><td><select name="personinfo.sex"><option value="男">男</option><option value="女">女</option></select></td></tr><tr><td>家庭地址:</td><td><input id="address" type="text" name="personinfo.address" "/><span id="erroraddress" style="color: red;"></span></td></tr><tr><td>联系电话:</td><td><input id="telephone" name="personinfo.telephone"value="${personinfo.telephone}" type="text" /> <font size="1">区号(3或4位)-电话(8或9位)</font><span id="errortelephone" style="color: red;"></span></td></tr><tr><td>证件号码:</td><td><input id="cardid" type="text" name="personinfo.cardid"value="${personinfo.cardid}" /> <font size="1">15位或18位</font> <spanid="errorcardid" style="color: red;"></span></td></tr><tr><td></td><td><input type="submit" value="提交" /> <br></td></tr></tbody></table><div style="color: red;"><s:fielderror /></div></div><br></form></body></html>//changepwd.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>changepwd</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 page"><link rel="stylesheet" type="text/css" href="style/style.css"><link rel="stylesheet" type="text/css" href="style/default.css"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script language="javascript">function check(){var oldpwd=document.getElementById("oldpwd").value;var newpwd=document.getElementById("newpwd").value;var confirmpwd=document.getElementById("confirmpwd").value;if(oldpwd!=""&&newpwd!=""&&confirmpwd!=""){if(newpwd!=confirmpwd){document.getElementById("secondpwd").style.display="inline";return false;}return true;}else{alert("密码不能为空!");return false;}}</script></head><body><form method="post" name="myform" action="admin/changepwd"onsubmit="return check()"><div align="center"><table width="400" border="0" class="table"><tbody><tr><td>&nbsp;当前密码:</td><td><input type="password" name="pwd.oldpwd" id="oldpwd"><span style="color: red;">* <s:fielderror /></span></td></tr><tr><td width="100">&nbsp;新密码:</td><td><input type="password" name="pwd.newpwd" id="newpwd"><span style="color: red;">*</span></td></tr><tr><td>&nbsp;确认密码:</td><td><input type="password" name="pwd.confirmpwd"id="confirmpwd"> <span style="color: red;">*</span> <spanstyle="color: red; display: none;" id="secondpwd">两次密码不一致</span></td></tr><tr><td>&nbsp;</td><td>&nbsp;<input type="Submit" value="修改" /></td></tr></tbody></table></div></form></body></html>//left.jsp<%@page contentType="text/html;charset=utf-8"import="java.sql.*,java.util.*"%><%if(session.getAttribute("admin")!=null){//--------------------------------------logged------------------------------------------------------------------%><html><head><link rel="stylesheet" type="text/css" href="../style/style.css"><link rel="stylesheet" type="text/css" href="../style/default.css"></head><BODY leftmargin="20" topmargin="0" marginheight="0" marginwidth="0"><table cellpadding=0 cellspacing=0 width=200 align=center><tr><td height=25 align="center" bgcolor="#DBC2B0"><b>后台管理</b></td></tr><tr><td bgcolor="#F5EFE7"><table cellpadding=0 cellspacing=0 align=center width=200><tr><td height=20><a href=/netbank/admin/listUsers?status.id=0target=right>所有账户</a></td></tr><tr><td height=20><a href=/netbank/admin/listUsers?status.id=2target=right>已冻结账户</a></td></tr><tr><td height=20><a href=/netbank/admin/listUsers?status.id=1target=right>已启用账户</a></td></tr><tr><td height=20><a href=/netbank/admin/add.jsp target=right>开户</a></td></tr><tr><td height=20><a href=/netbank/admin/changepwd.jsptarget=right>修改个人密码</a></td></tr><tr><td height=20><a href=/netbank/admin/logout target=_top>注销</a></td></tr></table></td></tr></table></td></tr></table><%}else{//------------------------------------not logged-------------------------------------------------------response.sendRedirect("index.jsp");}%>//main.jsp<%@page contentType="text/html;charset=gb2312" import="java.sql.*,java.util.*"%><%@page import="com.netbank.entity.Admin"%><%if(session.getAttribute("admin")==null){%><jsp:forward page="/login.jsp"></jsp:forward><%}%><style type=text/css>body  { background:#799AE1; margin:0px; font:9pt 宋体; }table  { border:0px; }td  { font:normal 12px 宋体; }img  { vertical-align:bottom; border:0px; }a  { font:normal 12px 宋体; color:#000000; text-decoration:none; }a:hover  { color:#428EFF;text-decoration:underline; }.sec_menu  { border-left:1px solid white; border-right:1px solid white; border-bottom:1px solid white; overflow:hidden; background:#D6DFF7; }.menu_title  { }.menu_title span  { position:relative; top:2px; left:8px; color:#215DC6; font-weight:bold; }.menu_title2  { }.menu_title2 span  { position:relative; top:2px; left:8px; color:#428EFF; font-weight:bold; }</style><html><head><meta http-equiv="Content-Language" content="zh-cn"><title>无标题文档</title><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><base target="_blank"></head><body bgcolor="#FFFFFF" text="#000000" style="background-color: #DBC2B0"><br><div align="center"><center><table style="WORD-BREAK: break-all; BORDER-COLLAPSE: collapse" cellSpacing="0" cellPadding="0" width="645" bgColor="#ffffff" border="0"><tr><td colSpan="3" width="645"><div align="center"><table cellSpacing="0" cellPadding="0" width="96%" border="0"><tr><td><p style="MARGIN-TOP: 20px; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 50px; LINE-HEIGHT: 150%"><b><font color="#ed5f19">(欢迎使用管理系统)</font></b></p><p style="MARGIN-TOP: 20px; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 50px; LINE-HEIGHT: 150%"> <p style="MARGIN-TOP: 20px; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 50px; LINE-HEIGHT: 150%"><br>-------------------------------------------------------- </p><p style="MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 50px; LINE-HEIGHT: 150%"> <p>&nbsp;</p><p style="MARGIN-TOP: 5px; MARGIN-BOTTOM: 5px; MARGIN-LEFT: 50px; LINE-HEIGHT: 150%"><br></td></tr></table></div></td></tr></table></center></div><br></body></html>//manage.jsp<%@page contentType="text/html;charset=utf-8" import="java.sql.*,java.util.*"%><%if(session.getAttribute("admin")==null){ %><jsp:forward page="/login.jsp"></jsp:forward><%}%><html><head><title>Admin页面</title></head><frameset framespacing="0" border="false" cols="230,*" frameborder="0"><frame name="left"  scrolling="no" marginwidth="0" marginheight="0" src="left.jsp"><frame name="right" scrolling="yes" src="main.jsp"></frameset><noframes></noframes> </html>//users.jsp<%@page contentType="text/html;charset=utf-8" import="java.util.*"%><%@page import="com.netbank.entity.Admin"%><%@ taglib uri="/struts-tags" prefix="s" %><%if(session.getAttribute("admin")==null){response.sendRedirect("login.jsp");}%><html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8""><link rel="stylesheet" type="text/css" href="../style/style.css"><link rel="stylesheet" type="text/css" href="../style/default.css"></head><body><div align="center"><center><!-- 查询用户表单部分 --><Form action="/netbank/admin/search" method="POST">输入要查询用户的真实姓名:<input name="personinfo.realname"/><input name="status.id" type="hidden" value="${status.id}">  &nbsp;&nbsp;&nbsp;<input type=submit value="提交" ></input></FORM><table width="100%" height="73" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#999999" bgcolor="#999999"><!-- 用户信息显示表头部分 --><tr><td  height="20" nowrap  bgcolor="#999999"><div align="center"><font color="#FFFFFF">序列</font></div></td><td nowrap bgcolor="#999999"><div align="center"><font color="#FFFFFF">账户</font></div></td><td nowrap bgcolor="#999999"><div align="center"><font color="#FFFFFF">用户名</font></div></td><td  nowrap bgcolor="#808080"><div align="center"><font color="#FFFFFF">账户余额</font></div></td> <td  nowrap bgcolor="#808080"><div align="center"><font color="#FFFFFF">姓名</font></div></td>                <td  nowrap bgcolor="#808080"><div align="center"><font color="#FFFFFF">详细地址</font></div></td><td  nowrap  bgcolor="#999999"><div align="center"><font color="#FFFFFF">身份证号</font></div></td><td  nowrap  bgcolor="#808080"><div align="center"><font color="#FFFFFF">电话</font></div></td><td  nowrap  bgcolor="#808080"><div align="center"><font color="#FFFFFF">状态</font></div></td><td  nowrap  bgcolor="#808080"><div align="center"><font color="#FFFFFF">操作</font></div></td>       <td nowrap  bgcolor="#999999"><div align="center"><font color="#FFFFFF">&nbsp;</font></div></td>     </tr><!-- 循环显示用户信息部分 --><s:iterator value="#request.users" status="status"><tr bgcolor="#FFFFFF"> <td  height="20" valign="middle"> <div id="noWrap" align="center"><s:property value="#status.count"/></div></td><td valign="middle"> <div id="noWrap" align="center"><s:property value="account.accountid"/></div></td><td valign="middle"> <div id="noWrap" align="center"><s:property value="account.username"/></div></td><td  height="20" valign="middle"> <div id="noWrap" align="center"><s:property value="account.balance"/></div></td><td  height="20" valign="middle"> <div id="noWrap" align="center"><s:property value="realname"/></div></td><td valign="middle"> <div id="noWrap" align="center"><s:property value="address"/></div></td><td valign="middle"> <div id="noWrap" align="center"><s:property value="cardid"/></div></td><td valign="middle"> <div id="noWrap" align="center"><s:property value="telephone"/></div></td><td valign="middle"> <div id="noWrap" align="center"><s:property value="account.status.name"/></div></td><td><div id="noWrap" align="center"><s:if test="account.status.name=='启用'"><input type="button" value="冻结" onclick="javascript:location.href='/netbank/admin/locking?id=${account.accountid}&status.id=${status.id}'"></s:if><s:else><input type="button" value="启用" onclick="javascript:location.href='/netbank/admin/enabled?id=${account.accountid}&status.id=${status.id}'"></s:else></div></td><td valign="middle"> <div id="noWrap" align="center"><A href="/netbank/admin/del?id=${account.accountid}&status.id=${status.id}">&nbsp;删除&nbsp;</a></div></td></tr>  </s:iterator><tr> <td height="20" colspan="14" valign="middle"> </div></td>              </tr></table></center></div></body></html>//admin.cssBODY {MARGIN: 0px}P {MARGIN: 0px}BODY {COLOR: #000; BACKGROUND-COLOR: #fff}BODY {FONT-SIZE: 12px; LINE-HEIGHT: 150%; FONT-FAMILY: "Verdana", "Arial", "Helvetica", "sans-serif"}TABLE {FONT-SIZE: 12px; LINE-HEIGHT: 150%; FONT-FAMILY: "Verdana", "Arial", "Helvetica", "sans-serif"}INPUT {FONT-SIZE: 12px; FONT-FAMILY: "Verdana", "Arial", "Helvetica", "sans-serif"}SELECT {FONT-SIZE: 12px; FONT-FAMILY: "Verdana", "Arial", "Helvetica", "sans-serif"}TEXTAREA {FONT-SIZE: 12px; FONT-FAMILY: "Verdana", "Arial", "Helvetica", "sans-serif"}A:link {COLOR: #036; TEXT-DECORATION: none}A:visited {COLOR: #036; TEXT-DECORATION: none}A:hover {COLOR: #f60; TEXT-DECORATION: underline}A.menuChild:link {COLOR: #036; TEXT-DECORATION: none}A.menuChild:visited {COLOR: #036; TEXT-DECORATION: none}A.menuChild:hover {COLOR: #f60; TEXT-DECORATION: underline}A.menuParent:link {COLOR: #000; TEXT-DECORATION: none}A.menuParent:visited {COLOR: #000; TEXT-DECORATION: none}A.menuParent:hover {COLOR: #f60; TEXT-DECORATION: none}TABLE.position {WIDTH: 100%}TR.position {HEIGHT: 25px; BACKGROUND-COLOR: #f4f7fc}TD.position {BORDER-RIGHT: #adceff 1px solid; PADDING-LEFT: 20px; BORDER-BOTTOM: #adceff 1px solid}TABLE.listTable {WIDTH: 98%; BACKGROUND-COLOR: #b1ceee}TR.listHeaderTr {FONT-WEIGHT: bold; HEIGHT: 25px; BACKGROUND-COLOR: #ebf4fd; TEXT-ALIGN: center}TR.listTr {HEIGHT: 25px; BACKGROUND-COLOR: #fff; TEXT-ALIGN: center}TR.listAlternatingTr {HEIGHT: 25px; BACKGROUND-COLOR: #fffdf0; TEXT-ALIGN: center}TR.listFooterTr {HEIGHT: 30px; BACKGROUND-COLOR: #ebf4fd; TEXT-ALIGN: center}TABLE.editTable {WIDTH: 98%; BACKGROUND-COLOR: #b1ceee}TR.editHeaderTr {HEIGHT: 25px; BACKGROUND-COLOR: #ebf4fd}TD.editHeaderTd {PADDING-LEFT: 50px; FONT-WEIGHT: bold}TR.editTr {HEIGHT: 30px}TD.editLeftTd {WIDTH: 150px; BACKGROUND-COLOR: #fffdf0; TEXT-ALIGN: center}TD.editRightTd {PADDING-LEFT: 10px; BACKGROUND-COLOR: #fff}TR.editFooterTr {HEIGHT: 40px; BACKGROUND-COLOR: #ebf4fd}TD.editFooterTd {PADDING-LEFT: 150px}//default.css*{ list-style:none;}body { margin:10px 0 0 0; padding:0;font-family:Arial, Helvetica, sans-serif;list-style:none;}body,td,th,input,select,textarea{ color:#126191;font-size: 12px;}.nob{ font-weight:normal; }.table { border:#BCC7C3 1px solid; background:#F7F7F7;border-collapse:collapse; padding: 5px 0 5px 0;overflow: auto;}.lmbt{ height:20px; float:left; color: #099; width:180px; float:left; margin:0; padding:0; line-height:15px; font-size:12px; font-weight:900;}.lmright { float:right;}.lmright a{ margin-right:20px;}.table td { border:#BCC7C3 1px solid;}.Attention { color:#FF0000;}.drop { font-size:12px;filter: dropshadow(color=#ffffff,offx=1,offy=1,positive=1);}a.mtitle:link,a.mtitle:visited{ color:#ae700f;font-size:14px; font-weight:bold;text-decoration: none;}a.mtitle:hover{text-decoration: none;}a:link,a:visited { color: #126191; text-decoration: none;}a:hover { color: #ae700f; text-decoration:none;}a.left:link,a.left:visited { color: #ae700f; text-decoration: none;}a.left:hover { color: #ae700f; text-decoration:underline; }.pagenavi { text-align:center;  font: 11px Arial, tahoma, sans-serif; padding-top: 20px; padding-bottom: 10px; margin: 0px; }.pagenavi a {border: 1px solid #BCC7C3; background: #FFFFFF; text-decoration: none; color:#C16012; display:inline-block; padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:2px}.pagenavi a:visited {border: 1px solid #BCC7C3; background: #FFFFFF; text-decoration: none; padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:2px}.pagenavi .break {border: medium none;  text-decoration: none; color:#C16012; background:;; padding-left:6px; padding-right:6px; padding-top:2px; padding-bottom:2px}.pagenavi .num {color:#C16012; font-size:12pt; padding-left:3px; padding-right:3px; padding-top:0; padding-bottom:0}.pagenavi .curr {padding: 2px 6px; border-color: #BCC7C3; font-weight: bold; font-size:12pt; background:transparent;}.pagenavi a:hover {color: #C16012; background: #eff7fd; text-decoration: none}.xingmu {FONT-WEIGHT: bolder;FONT-SIZE: 12px;COLOR: #0257A8;LINE-HEIGHT: 22px;FONT-FAMILY: Verdana, 新宋体;background-image: url(../Images/tobbg.gif);background-repeat: repeat;}.RefreshLen {BORDER: #BCC7C3 1px solid; MARGIN-top: 10px;MARGIN-BOTTOM: 5px; WIDTH: 400px; HEIGHT: 25px; TEXT-ALIGN: left}//style.css@charset "utf-8";body {padding: 0px;margin: 0px;font:normal 12px Tahoma, Geneva, Arial, sans-serif; color:#555;}h1{ font:normal 18px arial; padding:0 0 6px 12px; color:#0a69a5; border-bottom:#ececec 1px solid; font-weight:900}*{padding: 0px;margin: 0px;}a{text-decoration:none;color:#555;}a:visited{outline:none;}a:hover{text-decoration:underline; }#wrap {width:940px;padding: 0;margin:0 auto;}.clearfix:after {content:".";display:block;height:0;clear:both;visibility:hidden;}.clear {clear:both;}.w100{ width:100%;}.f_l{ float:left;}.f_r{ float:right;}li{ list-style-type:none;}img{ border:none;}/*--header--*/#header{ position:relative; width:940px; height:72px; background:#fff url(../images/top_shades.png) no-repeat 200px 0;}#header #logo{ position:absolute; top:19px; left:12px; width:188px; height:35px; display:block; }#header .searchWrapper{ position:absolute; top:21px; left:310px; width:292px; height:28px; padding:4px 0 0 12px; background:url(../images/search_bg.png) no-repeat 0 0;}#header .searchWrapper #searchBox{ width:236px; height:20px; padding:3px 0 0 0; border:none; color:#5e5e5e; background-color:transparent; vertical-align:middle;}#header .searchWrapper #searchBtn{ width:45px; height:22px; background:transparent; border:none; cursor:pointer; vertical-align:middle; outline:none;}#header #top_nav{ position:absolute; top:0; right:0; width:300px; height:26px;}#header #top_nav ul{ float:right;}#header #top_nav ul li{ float:left; display:block; height:26px; padding:4px 6px 0 17px; background:url(../images/top_nav_shades.gif) no-repeat 0 0;}#header #top_nav ul li.last{ padding-right:0px;}#header #top_nav ul li a, #header #top_nav ul li a:visited{ font-size:12px; text-decoration:none; color:#868686;}#header #top_nav ul li a:hover{ text-decoration:underline;}#header #top_userArea{ position:absolute; top:38px; right:0px; width:180px; height:20px;}#header #top_userArea ul{ float:right;width:180px;}#header #top_userArea ul li{ float:left; font-size:12px; }#header #top_userArea ul li a, #header #top_userArea ul li a:visited{ height:17px; display:inline-block; color:#808080; text-decoration:none;}#header #top_userArea ul li a:hover{ text-decoration:underline;}#header #top_userArea ul li .a_autentificare{ padding:1px 0 0 19px; margin-right:14px; background:url(../images/autentificare_icon.gif) no-repeat 0 0;}#header #top_userArea ul li .a_creaza_cont{ padding:1px 0 0 18px; background:url(../images/creaza_cont_icon.gif) no-repeat 0 0;}/*--end header--*//*--nav--*/#nav{ width:940px; height:33px; background:#0972ad url(../images/nav_center.png) repeat-x 0 0;}#nav .nav_left_corner{ float:left; width:4px; height:33px; display:block; background:url(../images/nav_left_corner.png) no-repeat 0 0;}#nav .nav_right_corner{ float:right; width:4px; height:33px; display:block; background:url(../images/nav_right_corner.png) no-repeat 0 0;}#nav ul{ width:932px; height:33px; float:left;}#nav ul li{ float:left; height:33px; display:block; padding:0 1px 0 0; background:url(../images/nav_spacer.png) no-repeat right 0;}#nav ul li.last{ background-image:none;}#nav ul li.last a, #nav ul li.last a:visited{ padding-right:18px;}#nav ul li a, #nav ul li a:visited{ height:24px; display:inline-block; padding:9px 21px 0; text-decoration:none; font:bold 12px tahoma; color:#fff;}#nav ul li a:hover{ background:#0972ad url(../images/nav_hover.png) repeat-x 0 0;}#nav ul li a:active{ height:23px; padding-top:10px;}/*--end nav--*//*--footer--*/#footer{ width:940px; font-size:12px; color:#999; float:left;}#footer .footer_row{ width:940px; height:22px; border-bottom:#e4e4e4 1px solid;}#footer .footer_row span{ float:left;}#footer .footer_row .footer_nav{ float:right;}#footer .footer_row .footer_nav li{ float:left; padding:0 8px 0 9px; border-right:#b7b7b7 1px solid;}#footer .footer_row .footer_nav li.last{ border:none; padding-right:0px;}#footer .footer_row .footer_nav li a, #footer .footer_row .footer_nav li a:visited{ text-decoration:none; color:#999;}#footer .footer_row .footer_nav li a:hover{ text-decoration:underline;}#footer .footer_row1{ padding-top:8px;}#footer .footer_row1 .copyright{ float:left;}#footer .footer_row1 .by{ float:right;}#footer .footer_row1 .by a{ width:71px; height:21px; margin-left:3px; display:inline-block; text-indent:-999999px;}/*--end footer--*//*--center--*/#center {width: 100%;float:left;margin-top:10px;}/*--position--*/.position{ width:770px; height:31px; padding-bottom:10px; background:url(../images/position_bg.png) no-repeat 0 0;}.position ul{ float:left; width:550px; display:block; padding:9px 0 0 1px;}.position ul li{ float:left; display:block; height:17px; padding:0 9px 0 6px; font-size:12px; color:#777; background:url(../images/position_spacer.gif) no-repeat right 5px;}.position ul li.last{ background-image:none; color:#585858; padding-right:0px;}.position ul li a, .position ul li a:visited{ font-size:12px; color:#777; text-decoration:none;}.position ul li a:hover{ text-decoration:underline;}.position ul li .home_icon{ height:17px; display:inline-block; padding:1px 0 0 25px; margin-top:-1px; background:url(../images/home_icon.png) no-repeat 0 0;}.position .cartWrapper{ float:right; height:21px; padding: 9px 7px 0 12px; font-size:12px; color:#575757; background:url(../images/cart_spacer.gif) no-repeat 0 1px;}.position .cartWrapper a, .position .cartWrapper a:visited{ display:inline-block; padding-left:20px; font-size:12px; color:#777; text-decoration:none; background:url(../images/cart_icon.png) no-repeat 0 0;}.position .cartWrapper span{ padding-left:4px;}/*--end position--*//*--banner--*/#banner{ width:770px; height:317px; padding-bottom:10px;}#banner #bannerTop{ position:relative; width:770px; height:274px; overflow:hidden; background:url(../images/banner_top_bg.png) no-repeat 0 0;}#banner #bannerTop ul{ position:absolute; width:2000em; height:274px;}#banner #bannerTop ul li{ float:left; width:770px; height:274px; display:block;}#banner .bannerBottom{ position:relative; width:770px; height:42px; background:url(../images/banner_bottom_bg.png) no-repeat 0 0;}#banner .bannerBottom .bannerThumbs{ padding-left:170px;}#banner .bannerBottom .bannerThumbs li{ float:left; width:35px; height:35px; padding:0 3px;}#banner .bannerBottom .bannerThumbs li a{ display:inline-block; width:35px; height:25px; padding-top:10px; cursor:pointer;}#banner .bannerBottom .bannerThumbs li img{ border:1px solid #CCC;}#banner .bannerBottom .bannerThumbs .current{ background:url(../images/banner_active.png) no-repeat center 0;}#banner .bannerBottom .bannerControls{ position:absolute; top:10px; right:4px; width:62px; height:56px;}#banner .bannerBottom .bannerControls li{ float:left; padding-right:4px;}#banner .bannerBottom .bannerControls li a{ width:25px; height:26px; display:block; text-indent:-999999px; cursor:pointer;}#banner .bannerBottom .bannerControls li a:active{ background-position:0 bottom;}#banner .bannerBottom .bannerControls li .backward{ background:url(../images/banner_prev.png) no-repeat 0 0;}#banner .bannerBottom .bannerControls li .forward{ background:url(../images/banner_next.png) no-repeat 0 0;}/*--end banner--*/.panelWrapper{ width:160px; padding-bottom:4px; margin-bottom:10px; background:url(../images/panel_bottom.png) no-repeat 0 bottom;}.panelWrapper .panelTop h4{ line-height:31px; text-indent:3px; color: #CCC}.panelWrapper .panelTop{ width:160px; height:31px; background:url(../images/panel_top.png) no-repeat 0 0;}.panelWrapper .panelBody{ width:160px; padding:4px 0 0 0; background:url(../images/panel_body.png) repeat-y 0 0;}.panelWrapper .panelBody .cr_wp li{ margin:0 10px; line-height:20px;}.panelWrapper .panelTop .cr_icon{ background:url(../images/cr_icon.png) no-repeat 135px 7px;}.panelWrapper .panelTop .email_icon{ background:url(../images/email_icon.png) no-repeat 135px 10px;}.panelWrapper .emailWrapper{ width:149px; padding:10px 0 8px 11px;}.panelWrapper .contactWrapper{ text-align:center; line-height:30px;}.panelWrapper .input_email{ width:130px; height:19px; padding:2px 4px 0; border:none; font-size:12px; color:#7c7c7c; background:url(../images/input_email.png) no-repeat 0 0; margin:0 10px;}.panelWrapper .btn_email{ clear:left; width:60px; height:19px; margin:6px 0 0 10px; outline:none; border:none; cursor:pointer; background:url(../images/btn_email.png) 0 0;}.panelWrapper .btn_email:hover{ background-position:0 bottom;}.panelWrapper .btn_email:active{ background-position:0 center;}ul.promoListing li{ width:90%; margin:0 auto; padding:14px 0 15px; display:block; text-align:center; border-bottom:#e3e3e3 1px solid;}ul.promoListing li.last{ border:none;}ul.promoListing li a, ul.promoListing li a:visited{display:inline-block; padding-top:2px; font:bold 12px tahoma; line-height:15px; text-decoration:none; color:#077fb9;}ul.promoListing li a:hover{ color:#f58120;}ul.promoListing li span{ display:block; padding-top:2px;color:#e77a1e; font-size:12px;}ul.promoListing li img{ width:140px;}ul.promoListing li span.redus{text-decoration: line-through; color: #868686;}.panelWrapper .panelTop .promo_icon{ background:url(../images/promo_icon.png) no-repeat 120px 10px;}.panelWrapper .panelTop .tw_icon{ background:url(../images/tw_icon.png) no-repeat 135px 9px;}/*--end right--*//*--links--*/.links{ width:940px; height:72px; padding-bottom:20px; background:url(../images/links_bg.png) no-repeat 0 0;}.links li{ float:left; height:72px; display:block; padding:0 16px; background:url(../images/links_spacer.png) no-repeat left 1px;}.links li.last{ background-image:none;}.links li img{ vertical-align:middle; margin-top:20px;}/*--end links--*//*listingBox*/.listingBox{ width:770px; padding-bottom:10px;}.listingBox_top{ width:770px; height:10px; font-size:0px; background:url(../images/listingBox_top.png) no-repeat 0 0;}.listingBox_body{ width:770px; padding:8px 0; background:url(../images/listingBox_body.png) repeat-y 0 0;}.listingBox_bottom{ width:770px; height:10px; font-size:0px; background:url(../images/listingBox_bottom.png) no-repeat 0 0;}.prod_1{ float:left; width:384px; border-right:#ececec 1px solid;}.prod_1 li,.prod_2 li{ font-weight:normal; line-height:20px;}.prod_2{ float:right; width:384px;}.prod_img{ float:left; width:180px; text-align:center;}.prod_img a{ display:inline-block; width:150px; height:150px;}.prod_img .flag_cadou{ position:absolute; margin-top:105px; height:34px; width:185px; display:block; text-indent:-99999px; background:url(../images/flag_cadou_s.png) no-repeat center 0;}*:first-child+html  .prod_img .flag_cadou{ width:150px;}.prod_price{ height:25px; display:inline-block; background:url(../images/price_center.gif) repeat-x 0 0;}.prod_price span{ height:25px; padding:0 0 0 10px; display:inline-block; background:url(../images/price_left_corner.gif) no-repeat 0 0;}.prod_price span span{ padding:0 10px 0 0; color:#f58120; font:bold 21px arial; background:url(../images/price_right_corner.gif) no-repeat right 0;}.prod_price span span em{ font:bold 14px arial; color:#343434;}.prod_details{ float:right; width:197px;}.prod_details h3{ padding-bottom:8px;}.prod_details h3 a{ font:bold 12px tahoma; color:#0a69a5; text-decoration:none;}.prod_details h3 a:hover{ color:#f58120;}.prod_details .prod_specs{ width:194px; height:122px; display:block; overflow:hidden; font-size:12px; color:#555;}.prod_details .prod_specs li{ display:block; padding-bottom:3px;}.prod_details .prod_specs li span{ font-weight:bold;}.prod_details .prod_controls{ padding:6px 0 0 0;}.prod_details .prod_controls li{ float:left; padding-right:8px; line-height:18px;}.prod_details .prod_controls li a{ height:20px; padding:5px 0 0 33px; display:inline-block; font-size:12px; text-decoration:none; color:#fff;}.prod_details .prod_controls li a:hover{ text-decoration:underline;}.prod_details .prod_controls li a:active{ height:19px; padding:6px 0 0 33px;}.prod_details .prod_controls li .btn_detalii{ width:34px; background:#0977b1 url(../images/btn_detalii.png) no-repeat 0 0;}.prod_details .prod_controls li .btn_adauga{ width:72px; background:#da691e url(../images/btn_adauga.png) no-repeat 0 0;}/*end listingBox*/.about{ text-indent:2em; margin:0 10px 10px 10px;line-height:20px;}.about h3 a{ color:#333}.about h3{ text-indent:90px; margin-bottom:5px; height:40px; line-height:35px;}.about img{ float:right;}.news{ margin:0 10px 10px 10px; }.news h3 { text-indent:90px; margin-bottom:5px;height:40px; line-height:35px;}.news ul{ list-style:none; }.news li{ background:url(../images/icon.gif) no-repeat left; padding-left:15px; line-height:20px;}.news li span{ float:right; color:#999}.pt{ margin:0 0 10px 10px;text-indent:90px; margin-bottom:5px; background:url(../images/title.png) no-repeat; height:40px; line-height:35px;}.pt a{ color: #333}/*--end primary--*/#secondary{ float:right; width:160px;}.panelWrapper{ width:160px; padding-bottom:4px; margin-bottom:10px; background:url(../images/panel_bottom.png) no-repeat 0 bottom;}.panelWrapper .panelTop{ width:160px; height:31px; background:url(../images/panel_top.png) no-repeat 0 0;}.panelWrapper .panelBody{ width:160px; padding:4px 0 0 0; background:url(../images/panel_body.png) repeat-y 0 0;}#secondary .panelDark{background:url(../images/panel_bottom_dark.png) no-repeat 0 bottom;}#secondary .panelDark .panelBody{ background:url(../images/panel_body_dark.png) repeat-y 0 0;}.panelWrapper .panelTop h4{ height:21px; padding:9px 0 0 10px; font:bold 12px tahoma; color:#868686;}.panelWrapper .panelTop h4 span{ height:20px; display:block;}.panelWrapper .panelTop h4 .cr_icon{ background:url(../images/cr_icon.png) no-repeat 125px 0;}.panelWrapper .panelTop h4 .newsletter_icon{ background:url(../images/newsletter_icon.png) no-repeat 126px 3px;}.panelWrapper .panelTop h4 .promo_icon{ background:url(../images/promo_icon.png) no-repeat 110px 2px;}.panelWrapper .panelTop h4 .tw_icon{ background:url(../images/tw_icon.png) no-repeat 127px 2px;}.panelWrapper .panelTop h4 .filter_icon{ background:url(../images/filter_icon.png) no-repeat 129px 1px;}.panelWrapper .panelTop h4 .info_icon{ background:url(../images/info_icon.png) no-repeat 129px 1px;}.panelWrapper .cr_wp{ padding:5px 0;}.panelWrapper .a_cr_icon, .panelWrapper .a_cr_icon:visited{ width:84px; height:50px; padding:1px 57px 0 12px; display:block; text-decoration:none; font-size:12px; line-height:14px; color:#868686; background:url(../images/clock_icon.png) no-repeat right 0;}.panelWrapper .a_cr_icon:hover{ color:#e77a1e; background-position:right bottom;}.panelWrapper .tw_wp{padding:5px 0 2px;}.panelWrapper .newsletterWrapper{ width:149px; padding:10px 0 8px 11px;}.panelWrapper .input_newsletter{ width:130px; height:19px; padding:2px 4px 0; border:none; font-size:12px; color:#7c7c7c; background:url(../images/input_newsletter.png) no-repeat 0 0;}.panelWrapper .btn_abonare{ clear:left; width:52px; height:19px; margin-top:6px; outline:none; border:none; cursor:pointer; background:url(../images/btn_abonare.png) 0 0;}.panelWrapper .btn_abonare:hover{ background-position:0 bottom;}.panelWrapper .btn_abonare:active{ background-position:0 center;}ul.promoListing li{ width:90%; margin:0 auto; padding:14px 0 15px; display:block; text-align:center; border-bottom:#e3e3e3 1px solid;}ul.promoListing li.last{ border:none;}ul.promoListing li a, ul.promoListing li a:visited{display:inline-block; padding-top:2px; font:bold 12px tahoma; line-height:15px; text-decoration:none; color:#077fb9;}ul.promoListing li a:hover{ color:#f58120;}ul.promoListing li span{ display:block; padding-top:2px;color:#e77a1e; font-size:12px;}ul.promoListing li span.redus{text-decoration: line-through; color: #868686;}/*--end secondary--*/#filters{ float:left; width:160px; padding-right:10px;}#filters .panelBody{ padding:0;}#filters .filterBox h3{ width:148px; height:17px; margin:0 auto; padding:4px 0 6px 10px; font:bold 12px tahoma; color:#6f6f6f; background:url(../images/filters_title.png) repeat-x 0 0;}#filters .filterBox h3 span{ font-weight:normal;}#filters .filterBox .ul_filters{ width:135px; padding:5px 10px 7px 12px; display:block;}#filters .filterBox .ul_filters li{   border-bottom:1px dashed #CCC; margin-bottom:7px; background-image:url(../images/icon.gif); background-repeat:no-repeat; background-position:left;  padding-bottom:3px; padding-left:10px;}#filters .filterBox .ul_filters .top1{ background-image:url(../images/top_1.gif);padding-left:20px;}#filters .filterBox .ul_filters .top2{ background-image:url(../images/top_2.gif);padding-left:20px;}#filters .filterBox .ul_filters .top3{ background-image:url(../images/top_3.gif);padding-left:20px;}#filters .filterBox .ul_filters .top4{ background-image:url(../images/top_4.gif);padding-left:20px;}#filters .filterBox .ul_filters .top5{ background-image:url(../images/top_5.gif);padding-left:20px;}#filters .filterBox .ul_filters .top6{ background-image:url(../images/top_6.gif);padding-left:20px;}#filters .filterBox .ul_filters .top7{ background-image:url(../images/top_7.gif);padding-left:20px;}#filters .filterBox .ul_filters .top8{ background-image:url(../images/top_8.gif);padding-left:20px;}#filters .filterBox .ul_filters .top9{ background-image:url(../images/top_9.gif);padding-left:20px;}#filters .filterBox .ul_filters .top10{ background-image:url(../images/top_10.gif);padding-left:20px;}#filters .filterBox .ul_filters li a, #filters .filterBox .ul_filters li a:visited{ font:normal 12px tahoma; color:#0481b7; text-decoration:none;}#filters .filterBox .ul_filters li a:hover{ text-decoration:underline; color:#E77A1E;}#filters .filterBox .ul_filters li.selected a{ font-weight:bold; color:#E77A1E;}#filters .filterBox select{ width:130px; height:19px; padding:1px 0 0 2px; margin:4px 0 18px 13px; font:normal 12px tahoma; color:#0481b7;}#primaryFiltered{ float:left;width:600px;}.filterControls{ width:600px; height:26px; padding-bottom:10px; font-size:12px; background:url(../images/filterControls_bg.png) no-repeat 0 0;}.filterControls a{ color:#999}.filterControls .back_next { float:right;  line-height:26px; color:#999}.filterControls .back_next li{ float:right; margin-right:15px;}.page{ float:left; width:87px; height:20px; padding:6px 0 0 10px; overflow:hidden;}.page span{ float:left; width:34px; height:13px; display:block; font-weight:bold; color:#777;}.page a{ float:left; font-size:5px; width:21px; height:12px; display:block; margin:1px 4px 0 0; text-indent:-999999px; overflow:hidden;}.page a:hover{ background-position:0 center;}.page a:active{ background-position:0 bottom;}.page a.active{ background-position:0 center;}.page .btn_ordonare_descendenta{ background:url(../images/btn_ordonare_descendenta.png) no-repeat 0 0;}.page .btn_ordonare_ascendenta{ background:url(../images/btn_ordonare_ascendenta.png) no-repeat 0 0;}.paginatorWrapper{ float:right; width:auto;  padding:0px 8px 0 0; line-height:25px; float:right; font-size:11px; color: #999}.paginatorWrapper span { width:auto; float: none; margin:0 2px; padding:0; color:#999}.paginatorWrapper a{ float:none;}.paginatorWrapper .curr{  padding:0 3px 2px 3px; background: #F90; color:#FFF}.filterProducts_listing .listingBox01{ position:relative; width:600px; height:auto; padding-bottom:10px;}.filterProducts_listing .listingBox01_top{ width:600px; height:10px; font-size:0px; background:url(../images/listingBox01_top.png) no-repeat 0 0;}.filterProducts_listing .listingBox01_body{ width:600px; height:auto; padding:8px 0; background:url(../images/listingBox01_body.png) repeat-y 0 0;}.filterProducts_listing .listingBox01_bottom{ width:600px; height:10px; font-size:0px; background:url(../images/listingBox01_bottom.png) no-repeat 0 0;}.filterProducts_listing .article{ margin:0 20px; line-height:35px; color:#666}.filterProducts_listing .article span { float:right; color:#CCC;}.filterProducts_listing .article li{ border-bottom:1px dashed #CCC; background:url(../images/list.png) left no-repeat; padding-left:20px;}.filterProducts_listing .prod_img01{ float:left; width:190px; height:auto; text-align:center;}/*.filterProducts_listing .listingBox01 .flag_promotie{ position:absolute; top:12px; right:15px; width:72px; height:19px; display:block; text-indent:-99999px; background:url(../images/flag_promotie_s.png) no-repeat 0 0;}*/.filterProducts_listing .prod_details01{ float:right; width:400px;}.filterProducts_listing .prod_details01 h3{ padding-bottom:8px;}.filterProducts_listing .prod_details01 h3 a{ font:bold 12px tahoma; color:#0a69a5; text-decoration:none;}.filterProducts_listing .prod_details01 h3 a:hover{ color:#f58120;}.filterProducts_listing .prod_details01 .prod_specs01{ width:260px; display:block; font-size:12px; color:#555; line-height:15px; color:#666;}.filterProducts_listing .prod_details01 .prod_specs01 li{ display:block; padding-bottom:3px;}.filterProducts_listing .prod_details01 .prod_specs01 li span{ font-weight:bold;}.filterProducts_listing .prod_details01 .btn_detalii, .filterProducts_listing .prod_details01 .btn_adauga:visited{ position:absolute; bottom:50px; right:0px; width:67px; height:20px; padding:5px 0 0 33px; display:inline-block; font-size:12px; text-decoration:none; color:#fff; background: url(../images/btn_detalii.png) no-repeat 0 0;}.filterProducts_listing .prod_details01 .btn_detalii:hover{ text-decoration:underline;}.filterProducts_listing .prod_details01 .btn_detalii:active{ height:19px; padding:6px 0 0 33px;}.filterProducts_listing .prod_price{ position:absolute; bottom:110px; right:15px; width:auto; height:25px; display:inline-block; background:url(../images/price_center.gif) repeat-x 0 0;}.filterProducts_listing .redus{ bottom:100px; }.filterProducts_listing .prod_price span{ height:25px; padding:0 0 0 10px; display:inline-block; background:url(../images/price_left_corner.gif) no-repeat 0 0;}.filterProducts_listing .prod_price span span{ padding:0 10px 0 0; color:#f58120; font:bold 21px arial; background:url(../images/price_right_corner.gif) no-repeat right 0;}.filterProducts_listing .prod_price span span em{ font:bold 14px arial; color:#343434;}.filterProducts_listing .prod_redus{ position:absolute; bottom:130px; right:15px; width:auto; height:25px; display:inline-block; background:url(../images/price_center.gif) repeat-x 0 0;}.filterProducts_listing .prod_redus span{ height:25px; padding:0 0 0 10px; display:inline-block; background:url(../images/price_left_corner.gif) no-repeat 0 0;}.filterProducts_listing .prod_redus span span{ padding:0 10px 0 0; color:#999999; text-decoration:line-through; font:bold 21px arial; background:url(../images/price_right_corner.gif) no-repeat right 0;}.filterProducts_listing .prod_redus span span em{ font:bold 14px arial; color:#999999;}.text{  line-height:25px; margin:0 10px; color:#666}.book { line-height:20px; text-align:left; width:770px}.book legend{ font-size:15px;}.book form{ margin:20px 0 0 50px;}.book .fy{ float:left; width:648px; text-align:right; }.book li{ border:1px #ccc solid; padding:10px;}.book .b2{ float:right; color:#999;}.book span{ float:none; margin:0}.book a{ float:none}.productMain_area{ width:760px;}.product_info{ width:760px; float:left; margin-bottom:20px;line-height:35px;}.product_info h1{ width:400px; padding-left:0; }.product_info span{ font-weight:900;}.product_info .product_view{ float:left; margin-left:30px;}.product_info .product_img{ float:left;}.product_info .product_img img{ width:300px;}.product_info .prod_price{ line-height:normal;}.product_content{width:765px; float:left; line-height:25px; color:#666;}.product_content h1{ margin-bottom:10px; padding:0; font-size:16px;}.hr_info { margin:0 10px 20px 10px; line-height:25px; height:50px;border:1px #CCC dotted; }.hr_info span{ font-weight:900; color:#39F}.hr_info li{ width:50%; float:left; text-indent:10px;}.hr_info .b{background-color: #E8E8E8;}//web.xml<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:applicationContext.xml</param-value></context-param><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></web-app>//changepwd.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>changepwd</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 page"><link rel="stylesheet" type="text/css" href="style/style.css" ><link rel="stylesheet" type="text/css" href="style/default.css" ><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script language="javascript">function check(){var oldpwd=document.getElementById("oldpwd").value;var newpwd=document.getElementById("newpwd").value;var confirmpwd=document.getElementById("confirmpwd").value;if(oldpwd!=""&&newpwd!=""&&confirmpwd!=""){if(newpwd!=confirmpwd){document.getElementById("secondpwd").style.display="inline";return false;}return true;}else{alert("密码不能为空!");return false;}}</script></head>    <body><form  method="post" name="myform" action="user/changepwd" onsubmit="return check()"><div align="center"><table width="400" border="0" class="table"><tbody><tr><td>&nbsp;当前密码:</td><td><input type="password" name="pwd.oldpwd" id="oldpwd"><span style="color:red;">* <s:fielderror/></span></td></tr><tr><td width="100">&nbsp;新密码:</td><td><input type="password" name="pwd.newpwd" id="newpwd" ><span style="color:red;">*</span></td></tr><tr><td>&nbsp;确认密码:</td><td><input type="password" name="pwd.confirmpwd" id="confirmpwd" ><span style="color:red;">*</span><span style="color:red;display:none;" id="secondpwd">两次密码不一致</span></td></tr><tr><td>&nbsp;</td><td>&nbsp;<input type="Submit" value="修改" /> </td></tr></tbody></table></div> </form></body></html>//checklogin.jsp<%@page import="com.netbank.entity.Account"%><%Account account=(Account)session.getAttribute("user");if(account==null){request.getRequestDispatcher("login.jsp").forward(request,response);}%>//deposit.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>deposit</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 page"><link rel="stylesheet" type="text/css" href="style/style.css" ><link rel="stylesheet" type="text/css" href="style/default.css" ><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script language="javascript" >function disptime(){var now=new Date();var year=now.getFullYear();var month=now.getMonth()+1;var date=now.getDate();var hour=now.getHours();var minute=now.getMinutes();var second =now.getSeconds();document.getElementById("datetime").value=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;//year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;setTimeout("disptime()", 1000);}function deposit(){var money=document.getElementById("trMoney").value;if(money.length>0){if(!(money.search(/^[\+\-]?\d+\.?\d*$/)==0)){document.getElementById("errormoney").innerHTML="含有非法字符";return false;}else{if(parseFloat(money)==0){document.getElementById("errormoney").innerHTML="金额必须大于0";return false;}return confirm("确认存款吗?");}}else {alert("金额不能为空!");return false;}}</script></head><body onload="disptime()"><form  method="post" name="myform" action="/netbank/transaction/deposit" onsubmit="return deposit()"><div align="center"><table width="400" border="0" class="table"><tbody><tr><td width="100">&nbsp;存款时间:</td><td><input type="text" name="log.datetime" id="datetime"></td></tr><tr><td>&nbsp;存款金额:</td><td><input type="text" name="log.trMoney" id="trMoney" value="${log.trMoney}"><span id="errormoney" style="color:red;"></span></td></tr><tr><td>&nbsp;</td><td>&nbsp;<input type="Submit" value="存款" /> </td></tr></tbody></table><div style="color:red;"> <s:fielderror /> </div> </div> </form></body></html>//down.html<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><style type="text/css"><!--body {margin-left: 0px;margin-top: 0px;margin-right: 0px;margin-bottom: 0px;}.STYLE1 {font-size: 12px;color: #147233;}--></style></head><body><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td height="23" background="images/main_25.gif"><table width="100%" border="0" cellspacing="0" cellpadding="0"><tr><td width="181" height="23" background="images/main_24.gif">&nbsp;</td><td><div align="right" class="STYLE1">???????2007??08??15?? ??????</div></td><td width="25"><img src="data:images/main_27.gif" width="25" height="23" /></td></tr></table></td></tr></table></body></html>//header.jsp<%@page contentType="text/html;charset=gb2312" import="java.sql.*,java.util.*"%><%@ taglib uri="/struts-tags" prefix="s" %><HTML><HEAD><META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK href="css/admin.css" type="text/css" rel="stylesheet"></HEAD><BODY><TABLE cellSpacing=0 cellPadding=0 width="100%" background="images/header_bg.jpg" border=0><TR height=56><TD width=260><IMG height=56 src="data:images/header_left.jpg" width=260></TD><TD style="FONT-WEIGHT: bold; COLOR: #fff; PADDING-TOP: 20px" align=middle>当前用户: <s:property value="#session.personinfo.realname"/>  &nbsp;&nbsp; </TD><TD align=right width=268><IMG height=56 src="data:images/header_right.jpg" width=268></TD></TR></TABLE><TABLE cellSpacing=0 cellPadding=0 width="100%" border=0><TR bgColor=#1c5db6 height=4><TD></TD></TR></TABLE></BODY></HTML>//index.jsp<%@page contentType="text/html;charset=gb2312" import="java.sql.*,java.util.*"%><%if(session.getAttribute("user")==null){ %><jsp:forward page="login.jsp"></jsp:forward><%}%><html><head><title>网上银行</title><LINK href="css/admin.css" type="text/css" rel="stylesheet"></head><FRAMESET border=0 frameSpacing=0 rows="60, *" frameBorder=0><FRAME name=header src="/netbank/header.jsp" frameBorder=0 noResize scrolling=no><FRAMESET cols="170, *"><FRAME name=menu src="/netbank/left.jsp" frameBorder=0 noResize><FRAME name=main src="/netbank/main.jsp" frameBorder=0 noResize scrolling=yes></FRAMESET></FRAMESET><noframes></noframes></html>//information.jsp<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>账户信息</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 page"><link rel="stylesheet" type="text/css" href="style/style.css"><link rel="stylesheet" type="text/css" href="style/default.css"><!--<link rel="stylesheet" type="text/css" href="styles.css"><%@ include file='checklogin.jsp' %>--></head><body ><br><div  align="center"><table width="450" border="1" class="table"><tbody><tr><td>账户:</td><td>&nbsp;${user.accountid}</td></tr><tr><td>姓名:</td><td>&nbsp;${personinfo.realname}</td></tr><tr><td>年龄:</td><td>&nbsp;${personinfo.age}</td></tr><tr><td>性别:</td><td>&nbsp;${personinfo.sex}</td></tr> <tr><td>家庭地址:</td><td>&nbsp;${personinfo.address}</td></tr><tr><td>联系电话:</td><td>&nbsp;${personinfo.telephone}</td></tr><tr><td>证件号码:</td><td>&nbsp;${personinfo.cardid}</td></tr><tr><td>账户余额:</td><td>${user.balance}<br></td></tr></tbody></table>       </div></body></html>//left.jsp<%@page contentType="text/html;charset=gb2312" import="java.sql.*,java.util.*"%><%--if(session.getAttribute("user")!=null){//--------------------------------------logged--------------------------------------------------------------------%><html><head><title>管理页面</title><LINK href="css/admin.css" type="text/css" rel="stylesheet"></head><BODY><TABLE height="100%" cellSpacing=0 cellPadding=0 width=170 background=images/menu_bg.jpg border=0><TR><TD vAlign=top align=middle><TABLE cellSpacing=0 cellPadding=0 width=150 border=0>        <TR height=22><TD style="PADDING-LEFT: 30px" background=images/menu_bt.jpg><A class=menuParent onclick=expand(1) href="javascript:void(0);">操作菜单</A></TD></TR><TR height=4><TD></TD></TR></TABLE><TABLE id=child0 cellSpacing=0 cellPadding=0 width=150 border=0>        <TR height=20><TD align=middle width=30><IMG height=9 src="data:images/menu_icon.gif" width=9></TD><TD><A class=menuChild href="/netbank/deposit.jsp" target=main>存款</A></TD></TR><TR height=20><TD align=middle width=30><IMG height=9 src="data:images/menu_icon.gif" width=9></TD><TD><A class=menuChild href="/netbank/withdrawal.jsp" target=main>取款</A></TD></TR><TR height=20><TD align=middle width=30><IMG height=9 src="data:images/menu_icon.gif" width=9></TD><TD><A class=menuChild href="/netbank/transfer.jsp" target=main>转账</A></TD></TR><TR height=20><TD align=middle width=30><IMG height=9 src="data:images/menu_icon.gif" width=9></TD><TD><A class=menuChild href="/netbank/transaction/list?pager.curPage=1" target=main>查询交易记录</A></TD></TR><TR height=20><TD align=middle width=30><IMG height=9 src="data:images/menu_icon.gif" width=9></TD><TD><A class=menuChild href="/netbank/information.jsp" target=main>查看信息</A></TD></TR><TR height=20><TD align=middle width=30><IMG height=9 src="data:images/menu_icon.gif" width=9></TD><TD><A class=menuChild href="/netbank/modify.jsp" target=main>修改个人信息</A></TD></TR><TR height=20><TD align=middle width=30><IMG height=9 src="data:images/menu_icon.gif" width=9></TD><TD><A class=menuChild href="/netbank/changepwd.jsp" target=main>修改密码</A></TD></TR><TR height=20><TD align=middle width=30><IMG height=9 src="data:images/menu_icon.gif" width=9></TD><TD><A class=menuChild href="/netbank/user/user_logout" target=main>注销</A></TD></TR></TABLE></TD><TD width=1 bgColor=#d1e6f7></TD></TR>    </TABLE><%--}--%>//login.jsp<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@ taglib uri='/struts-tags' prefix='s' %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>login</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 page"><link rel="stylesheet" type="text/css" href="style/style.css" ><link rel="stylesheet" type="text/css" href="style/default.css" ><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script language="javascript" >function login(){var hidden=document.getElementById("hidden").value;if(document.getElementById("username"+hidden).value ==""){alert("用户名不能为空");return false;}else if(document.getElementById("password"+hidden).value ==""){alert("密码不能为空");return false;} else {return true;}}function adminlogin(){document.getElementById("username1").style.display="none";document.getElementById("password1").style.display="none";document.getElementById("username2").style.display="block";document.getElementById("password2").style.display="block";document.myform.action="admin/login"}function init(){document.getElementById("username1").style.display="block";document.getElementById("password1").style.display="block";document.getElementById("username2").style.display="none";document.getElementById("password2").style.display="none";document.myform.action="user/user_login";}function change(){var select=document.myform.type.value;if(select=="0"){var username2=document.getElementById("username2").value;var password2=document.getElementById("password2").value;init();document.getElementById("username1").value=username2;document.getElementById("password1").value=password2;}if(select=="1"){var username1=document.getElementById("username1").value;var password1=document.getElementById("password1").value;adminlogin();document.getElementById("username2").value=username1;document.getElementById("password2").value=password1;}}</script></head><body onload="init()"><div align="center"><form method="post" name="myform" action="user/user_login" onsubmit="return login()"><table width="450" border="0" class="table"><tbody><tr><td colspan="2" align="center"></td></tr><tr><td>&nbsp;用户名:</td><td>&nbsp; <input id="username1" type="text" name="account.username" ><input id="username2" type="text" name="admin.username" ></td></tr><tr><td>&nbsp;密码:</td><td>&nbsp; <input id="password1" type="password" name="account.password"><input id="password2" type="password" name="admin.password"></td></tr><tr><td>&nbsp;用户类型:</td><td><select name="type" onchange="change()"><option value="0" selected>客户</option><option value="1">Admin</option></select></td></tr><tr><td></td><td>&nbsp; <input type="submit" value="登录" id="login"><input type="hidden" id="hidden"></td></tr></tbody></table><s:fielderror fieldName="username" cssStyle="color:red;"/><s:fielderror fieldName="password" cssStyle="color:red;"/></form> </div></body></html>//main.jsp<%@page import="java.text.SimpleDateFormat"%><%@page import="java.util.Date"%><%@page contentType="text/html;charset=gb2312" import="java.sql.*,java.util.*"%><%@ taglib uri="/struts-tags" prefix="s" %><HTML><HEAD><META http-equiv=Content-Type content="text/html; charset=gb2312"><LINK href="css/admin.css" type="text/css" rel="stylesheet"></HEAD><BODY><TABLE cellSpacing=0 cellPadding=0 width="100%" align=center border=0><TR height=28><TD background=images/title_bg1.jpg>&nbsp;当前位置: </TD></TR><TR><TD bgColor=#b1ceef height=1></TD></TR><TR height=20><TD background=images/shadow_bg.jpg></TD></TR></TABLE><TABLE cellSpacing=0 cellPadding=0 width="90%" align=center border=0><TR height=100><TD align=middle width=100><IMG height=100 src="data:images/admin_p.gif" width=90></TD><TD width=60>&nbsp;</TD><TD><TABLE height=100 cellSpacing=0 cellPadding=0 width="100%" border=0><TR><TD>当前时间:<%  Date d=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");out.println(sdf.format(d));   %> </TD></TR><TR><TD style="FONT-WEIGHT: bold; FONT-SIZE: 16px"></TD></TR><TR><TD>欢迎进入网上银行交易中心!</TD></TR></TABLE></TD></TR><TR><TD colSpan=3 height=10></TD></TR></TABLE></BODY></HTML>//message.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>file upload success</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 page"><link rel="stylesheet" type="text/css" href=""></head><body> <div align="center"><s:fielderror cssStyle="color:red;"/>${message}<br><!--上传时间:<s:date name="date"/><br>realPath:${realPath}<br>contextPath:${contextPath}<br>contextName:${contextName}<br> --></div></body></html>//modify.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'modify.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 page"><link rel="stylesheet" type="text/css" href="style/style.css"><link rel="stylesheet" type="text/css" href="style/default.css"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><form method="post" name="myform" action="/netbank/info/info_modify"><div align="center"><table width="450" class="table"><tbody><tr><td>姓名:</td><td>&nbsp;<input type="text" name="personinfo.realname" value="${personinfo.realname}"/></td></tr><tr><td>年龄:</td><td>&nbsp;<input type="text" name="personinfo.age" value="${personinfo.age}"/></td></tr><tr><td>性别:</td><td>&nbsp;<select name="personinfo.sex" ><option value="男" >男</option><option value="女" >女</option></select></td></tr> <tr><td>家庭地址:</td><td>&nbsp;<input type="text" name="personinfo.address" value="${personinfo.address}"/></td></tr><tr><td>联系电话:</td><td>&nbsp;<input type="text" name="personinfo.telephone" value="${personinfo.telephone}"/><font size="1" style="color:red;">区号(3或4位)-电话(8或9位)</font></td></tr><tr><td>证件号码:</td><td>&nbsp;<input type="text" name="personinfo.cardid" value="${personinfo.cardid}"/><font size="1" style="color:red;">15位或18位</font></td></tr><tr><td>&nbsp;</td><td><input type="submit" value="提交" /> <br></td></tr></tbody></table><div style="color:red;"> <s:fielderror /> </div> </div><br></form></body></html>//transactionlog.jsp<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>账户信息</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 page"><link rel="stylesheet" type="text/css" href="style/style.css"><link rel="stylesheet" type="text/css" href="style/default.css"><!--<link rel="stylesheet" type="text/css" href="styles.css"><%@ include file='checklogin.jsp' %>--><script type="text/javascript">function select(){var curPage=document.getElementById("curPage").value;location.href="/netbank/transaction/list?pager.curPage="+curPage;}</script></head><body ><br><div  align="center">       <table width="650" border="1" class="table"><tbody align="center"><!--标题部分  --><tr><td colspan="5" style="font-size: 20;">交易记录</td></tr><tr ><td width="50">&nbsp;序号</td><td width="80">&nbsp;对方账户</td><td width="80">&nbsp;交易金额</td><td width="80">&nbsp;交类类型</td><td>&nbsp;交易日期</td></tr><!--循环显示记录部分  --><s:iterator value="#request.logs" status="status" ><tr><td>&nbsp;<s:property value="#status.count"/></td>          <s:if test="otherid==#session.user.accountid&&transactionType.name!='取款'"><td>&nbsp;<s:property value="account.accountid"/></td><td>&nbsp;<s:property value="trMoney"/></td></s:if><s:else><td>&nbsp;<s:property value="otherid"/></td><td>&nbsp;-<s:property value="trMoney"/></td>              </s:else><td><s:property value="transactionType.name"/></td><td>&nbsp;<s:property value="datetime"/></td></tr></s:iterator>             </tbody></table><!-- 分页超链接部分 --><table><tr ><td width="130"></td><td width="80"><s:if test="pager.curPage>1"><A href='/netbank/transaction/list?pager.curPage=1'>首页</A>&nbsp;&nbsp;<A href='/netbank/transaction/list?pager.curPage=${pager.curPage-1 }'>上一页</A></s:if></td><td width="80"><s:if test="pager.curPage < pager.pageCount"><A href='/netbank/transaction/list?pager.curPage=${pager.curPage+1}'>下一页</A>&nbsp;&nbsp;<A href='/netbank/transaction/list?pager.curPage=${pager.pageCount }'>尾页</A></s:if></td><td>共${pager.curPage}/${pager.pageCount}页&nbsp;&nbsp;转至   <select onchange="select()" id="curPage"><s:iterator begin="1" end="pager.pageCount" status="status" ><s:if test="#status.count==pager.curPage"><option value="${status.count}" selected="selected">${status.count }</option></s:if><s:else><option value="${status.count }">${status.count } </option></s:else></s:iterator></select>页    </td></tr></table></div></body></html>//transfer.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>transfer</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 page"><link rel="stylesheet" type="text/css" href="style/style.css" ><link rel="stylesheet" type="text/css" href="style/default.css" ><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script language="javascript" >function transfer(){var otherid=document.getElementById("otherid").value;var money=document.getElementById("trMoney").value;if(otherid!=""&&money!=""){if(!(otherid.search(/^[\+\-]?\d+\.?\d*$/)==0)){document.getElementById("errorotherid").innerHTML="含有非法字符";return false;}if(!(money.search(/^[\+\-]?\d+\.?\d*$/)==0)){document.getElementById("errormoney").innerHTML="含有非法字符";return false;}else{if(parseFloat(money)==0){document.getElementById("errormoney").innerHTML="金额必须大于0";return false;}return confirm("确认转账吗?");}}else {alert("账户或金额不能为空!");return false;}}function disptime(){var now=new Date();var year=now.getFullYear();var month=now.getMonth()+1;var date=now.getDate();var hour=now.getHours();var minute=now.getMinutes();var second =now.getSeconds();document.getElementById("datetime").value=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;//year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;setTimeout("disptime()", 1000);}</script></head><body onload="disptime()"><form  method="post" name="myform" action="/netbank/transaction/transfer" onsubmit="return transfer()"><div align="center"><table width="400" border="0" class="table"><tbody><tr><td>&nbsp;转账时间:</td><td><input type="text" name="log.datetime" id="datetime"></td></tr><tr><td width="100">&nbsp;对方账户:</td><td><input type="text" name="log.otherid" id="otherid" value="${log.otherid }"><span id="errorotherid" style="color:red;"></span></td></tr><tr><td>&nbsp;转账金额:</td><td><input type="text" name="log.trMoney" id="trMoney" value="${log.trMoney}"><span id="errormoney" style="color:red;"></span></td>                      </tr><tr><td>&nbsp;</td><td>&nbsp;<input type="Submit" value="转账" /> </td></tr></tbody></table><div style="color:red;"> <s:fielderror /> </div> </div>                 </form></body></html>//upload.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>My JSP 'upload.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 page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script type="text/javascript">function disptime(){var now=new Date();var year=now.getFullYear();var month=now.getMonth()+1;var date=now.getDate();var hour=now.getHours();var minute=now.getMinutes();var second =now.getSeconds();document.myform.date.value=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;//year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;setTimeout("disptime()", 1000);}</script></head><body onload="disptime()"><%=basePath %><form name="myform" action="file/file_addImages" enctype="multipart/form-data" method="post"><input type="file" name="image"><input type="submit" value="upload"><br><input type="text" name="date" ></form> </html>//withdrawal.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%@ taglib uri="/struts-tags" prefix="s" %><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><base href="<%=basePath%>"><title>withdrawal</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 page"><link rel="stylesheet" type="text/css" href="style/style.css" ><link rel="stylesheet" type="text/css" href="style/default.css" ><!--<link rel="stylesheet" type="text/css" href="styles.css">--><script language="javascript" >function disptime(){var now=new Date();var year=now.getFullYear();var month=now.getMonth()+1;var date=now.getDate();var hour=now.getHours();var minute=now.getMinutes();var second =now.getSeconds();document.getElementById("datetime").value=year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;//year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;setTimeout("disptime()", 1000);}function withdrawal(){var money=document.getElementById("trMoney").value;if(money.length>0){if(!(money.search(/^[\+\-]?\d+\.?\d*$/)==0)){document.getElementById("errormoney").innerHTML="含有非法字符";return false;}else{if(parseFloat(money)==0){document.getElementById("errormoney").innerHTML="金额必须大于0";return false;}return confirm("确认取款吗?");}}else {alert("金额不能为空!");return false;}}</script></head><body onload="disptime()"><form  method="post" name="myform" action="/netbank/transaction/withdrawal" onsubmit="return withdrawal()"><div align="center"><table width="400" border="0" class="table"><tbody><tr><td width="100">&nbsp;取款时间:</td><td><input type="text" name="log.datetime" id="datetime"></td></tr><tr><td>&nbsp;取款金额:</td><td><input type="text" name="log.trMoney" id="trMoney" value="${log.trMoney}"><span id="errormoney" style="color:red;"></span></td></tr><tr><td>&nbsp;</td><td>&nbsp;<input type="Submit" value="取款" /> </td></tr></tbody></table><div style="color:red;"> <s:fielderror /> </div> </div>               </form></body></html>//sqlCREATE TABLE `account` (`accountid` int(4) NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`password` varchar(50) DEFAULT NULL,`balance` decimal(18,2) DEFAULT NULL,`status` int(4) DEFAULT NULL,PRIMARY KEY (`accountid`),KEY `status` (`status`),CONSTRAINT `account_ibfk_1` FOREIGN KEY (`status`) REFERENCES `status` (`id`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;INSERT INTO `account` VALUES ('1', 'uuu', 'uuu', '1000.00', '1');INSERT INTO `account` VALUES ('2', 'ttt', 'ttt', '1000.00', '1');INSERT INTO `account` VALUES ('3', 'qqq', '1', '1000.00', '1');INSERT INTO `account` VALUES ('4', 'www', 'www', '1000.00', '1');INSERT INTO `account` VALUES ('5', 'eee', 'eee', '1000.00', '2');INSERT INTO `account` VALUES ('6', 'my', 'my', '1000.00', '1');INSERT INTO `account` VALUES ('7', 'sss', 'sss', '1000.00', '1');INSERT INTO `account` VALUES ('8', 'vvv', 'vvv', '1000.00', '1');INSERT INTO `account` VALUES ('9', 'xxx', 'xxx', '1000.00', '1');CREATE TABLE `admin` (`id` int(4) NOT NULL AUTO_INCREMENT,`username` varchar(50) DEFAULT NULL,`password` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;INSERT INTO `admin` VALUES ('1', 'admin', '123456');CREATE TABLE `personinfo` (`id` int(4) NOT NULL AUTO_INCREMENT,`accountid` int(4) DEFAULT NULL,`realname` varchar(50) DEFAULT NULL,`age` int(4) DEFAULT NULL,`sex` varchar(2) DEFAULT NULL,`cardid` decimal(18,0) DEFAULT NULL,`address` varchar(50) DEFAULT NULL,`telephone` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`),KEY `accountid` (`accountid`),CONSTRAINT `personinfo_ibfk_1` FOREIGN KEY (`accountid`) REFERENCES `account` (`accountid`)) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;INSERT INTO `personinfo` VALUES ('1', '1', '王志国', '32', '男', '320542000000000001', '北京', '15810000001');INSERT INTO `personinfo` VALUES ('2', '2', '赵强', '43', '男', '320542000000000002', '湖北武汉', '15810000002');INSERT INTO `personinfo` VALUES ('3', '3', '薛梅', '26', '女', '312556000000000003', '江苏南京', '15320000003');INSERT INTO `personinfo` VALUES ('4', '4', 'www', '43', '女', '312556000000000004', '江苏', '15320000004');INSERT INTO `personinfo` VALUES ('5', '5', 'eee', '34', '男', '312556000000000005', '湖北武汉', '15320000005');INSERT INTO `personinfo` VALUES ('6', '6', 'my', '35', '男', '312556000000000006', '北京', '15320000006');INSERT INTO `personinfo` VALUES ('7', '7', 'sss', '56', '男', '312556000000000007', '北京', '15320000007');INSERT INTO `personinfo` VALUES ('8', '8', 'vvv', '45', '女', '312556000000000008', '江苏无锡', '15320000008');INSERT INTO `personinfo` VALUES ('9', '9', 'xxx', '38', '男', '312556000000000009', '江苏无锡', '15320000009');CREATE TABLE `status` (`id` int(4) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;-- ------------------------------ Records of status-- ----------------------------INSERT INTO `status` VALUES ('1', '启用');INSERT INTO `status` VALUES ('2', '冻结');CREATE TABLE `transaction_log` (`id` int(4) NOT NULL AUTO_INCREMENT,`accountid` int(4) DEFAULT NULL,`otherid` int(4) DEFAULT NULL,`tr_money` decimal(18,2) DEFAULT NULL,`datetime` varchar(50) DEFAULT NULL,`ta_type` int(4) DEFAULT NULL,PRIMARY KEY (`id`),KEY `accountid` (`accountid`),KEY `ta_type` (`ta_type`),CONSTRAINT `transaction_log_ibfk_1` FOREIGN KEY (`accountid`) REFERENCES `account` (`accountid`),CONSTRAINT `transaction_log_ibfk_2` FOREIGN KEY (`ta_type`) REFERENCES `transaction_type` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `transaction_type` (`id` int(4) NOT NULL AUTO_INCREMENT,`name` varchar(50) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;INSERT INTO `transaction_type` VALUES ('1', '存款');INSERT INTO `transaction_type` VALUES ('2', '取款');INSERT INTO `transaction_type` VALUES ('3', '转账');
//系统下载地址:http://pan.baidu.com/s/1nv4GOgp

struts2+spring3+hibernate4相关推荐

  1. 使用Maven搭建Struts2+Spring3+Hibernate4的整合开发环境

    做了三年多的JavaEE开发了,在平时的JavaEE开发中,为了能够用最快的速度开发项目,一般都会选择使用Struts2,SpringMVC,Spring,Hibernate,MyBatis这些开源框 ...

  2. 【SSH网上商城项目实战01】整合Struts2、Hibernate4.3和Spring4.2

    转自:https://blog.csdn.net/eson_15/article/details/51277324 今天开始做一个网上商城的项目,首先从搭建环境开始,一步步整合S2SH.这篇博文主要总 ...

  3. Struts2+Spring3.1+Hibernate3.3的整个项目

    经过一天的折腾,终于在MyEclipse2013下搭建出一个Struts2+Spring3.1+Hibernate3.3整合的项目,具体过程如下,仅供新手学习,大神勿喷 首先新建Web项目: 直接fi ...

  4. Maven+struts2+spring4+hibernate4的环境搭建

    搭建Maven+struts2+spring4+hibernate4其实并不难!但开始弄的时候还是费了我好大的力气,老是出现这样那样的错误!好了,废话不多说,开始搭建开发环境. 一.Myeclipse ...

  5. SpringMVC+Spring3+Hibernate4

    2019独角兽企业重金招聘Python工程师标准>>> 1.简单的SpringMVC+Spring3+Hibernate4开发环境见https://github.com/Spacey ...

  6. struts2+spring3+ibatis2.3+jquery_ajax1.7

    struts2+spring3+ibatis2.3+jquery_ajax1.7合成 实现页面无刷新分页显示数据 演示效果图: [img]http://dl.iteye.com/upload/pict ...

  7. Eclipse 搭建struts2 spring3 hibernate3环境实战 待完善

    1.struts2 目前是2.3版本,下载地址http://struts.apache.org/download.cgi struts2包 struts2-core-2.3.16.3.jar stru ...

  8. 【Struts2+Spring3+Hibernate3】SSH框架整合实现CRUD_1.0

    作者: hzboy192@192.com Blog: http://my.csdn.net/peng_hao1988 版本总览:http://blog.csdn.net/peng_hao1988/ar ...

  9. SSH (Struts2+Spring3.0+Hibernate3)框架(二) 框架的配置

    一.准备工作: 1. JDK -> jdk1.6.0_17 安装(环境变量配置): JAVA_HOME = C:\ jdk1.6.0_17; PATH = %JAVA_HOME%\bin; %J ...

最新文章

  1. Moment矩计算公式
  2. Android应用开发中的风格和主题(style,themes)
  3. 鹰眼拓扑锁定跟踪 网络管理一目了然
  4. 『飞秋』小项目心得交流
  5. Python中的多进程创建和传值(克隆)Queue方法
  6. 传智播客 C/C++学习笔记 函数调用 模型
  7. c语言标准流程图,c语言设计流程图!设计流程图
  8. eclipse配置jsp页面模板
  9. js获取ip地址、浏览器信息
  10. 150. Evaluate Reverse Polish Notation逆波兰表达式
  11. 从程序员到项目经理(5):程序员加油站 -- 不是人人都懂的学习要点
  12. 乘车码连不上系统服务器,支付宝乘车码无法开通的原因及开通步骤详解
  13. Bugku之Flask_FileUpload
  14. 数图互通高校房屋管理系统具体管理范围
  15. 树莓派魔镜——MagicMirror使用(一):开启MagicMirror
  16. 创建模板只有从空白html文档开始创建,word 2019如何创建空白文档和模板文档
  17. 手写一个简易版本的RPC
  18. 两台电脑navicat数据传输_【笔记】两台西门子S7-200Smart PLC进行无线通讯
  19. 把网站服务器调黑白,网站快速变黑白灰色的4种方法
  20. 国嵌 c语言,专题3-6.#和##运算符使用解析(国嵌C语言视频)

热门文章

  1. Win10服务器配置环境变量 | import _ssl # if we can‘t import it, let the error propagate ImportError: DLL load
  2. 大白天「撞鬼」?特斯拉在无人墓地感应到行人,传感器真能测鬼?
  3. 腾讯天美测开一面面经
  4. HTTP代理ip的API接口怎么用?
  5. 小程序开发+weuiwxss
  6. 力扣-518题 零钱变换 II(C++)- 动态规划、完全背包问题
  7. 如何能在浏览器中显示三维模型
  8. arcgis风向_ArcGIS10.2读取NetCDF格式的气象数据含风向
  9. 基于WEB的网上在线图书商城的设计与实现
  10. 【其他】免费的在线阅读电子书