- 浏览: 315330 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
every:
真JB坑爹,标题redhat6 结果用的时5.3 ,尼玛标 ...
RedHat Linux 6企业版开启VNC Server远程桌面 -
okooo00:
五年光景蹉跎,最终还是烂尾了,从此人生又少了一样追求
《凡人修仙传》点评 -
mikey_5:
原来是这样子判断数据格式的,Thanks
POI读取Excel浅谈 -
jveqi:
tracy_meimei 写道楼主,我试过N多次了,在我的my ...
MyEclipse6.5 下Axis2插件的下载和安装 -
jsx112:
...
MySQL select into和SQL select into
S2SH(struts2+spring+hibernate整合)要点,注意点
------------------------统一IDE,Struts2,Spring,Hibernate版本:
Myeclipse: 7.0
web project: javaEE 1.4
jdk : 1.5(5.0)
Tomcat: tomcat6.0.18
oracle: 10g
Struts2: struts2.0.14
Spring: spring2.5-------spring2.5 AOP Libraries,
sping2.5 Core Libraries,
spring2.5 Persisteence Core Libraries
spring2.5 Persisteence JDBC Libraries
spring2.5 Web Libraries
/WebRoot/WEB-INF/applicationContext.xml
hibernate托管给spring
Hibernate: hibernate3.2------------H3.2 Annotations&Entity Manager
H3.2 Core Libraries
H3.2 Advanced Support Libraries
-------------------------------------------S2SH搭建环境
目录结构:DAO(接口IUser,实现类User),service,action,po
struts2的配置包的导入,需要的是5个jar包分别是:
struts2-core-2.0.11.2.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
xwork-2.05.jar
commons-logging-1.0.4.jar
struts2+spring配置包:struts2-spring-plugin-2.0.11.2.jar
----------------------------------------------------------------Web.<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置spring的监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/applicationContext.xml,
/WEB-INF/spring-config/spring_dao.xml </param-value>
</context-param>
<!-- 开启监听 -->
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!--
配置OpenSessionInViewFilter,必须在struts2监听之前,用来解决could not initialize
proxy - no Session报错问题,配置自己写的filter
-->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OurOpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<!-- 设置监听加载上下文 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
设置访问资源,能访问web-inf下的jsp页面 <servlet> <servlet-name>test</servlet-name>
<jsp-file>/WEB-INF/ui/jsp/globle/main.jsp</jsp-file> </servlet>
<servlet-mapping> <servlet-name>test</servlet-name>
<url-pattern>/test.jsp</url-pattern> </servlet-mapping>
-->
<welcome-file-list>
<welcome-file>/WEB-INF/ui/jsp/globle/main.jsp</welcome-file>
</welcome-file-list>
</web-app>
--------------------------------------------------------------------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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--
解决:Write operations are not allowed in read-only mode
(FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO
or remove 'readOnly' marker from transaction definition.
-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置Advice(事务的传播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="search*" propagation="SUPPORTS" />
<tx:method name="show*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>
<!-- 配置事务管理器应用的范围 -->
<aop:config>
<aop:pointcut id="affectMethods"
expression="execution(* lk.edu.tms.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods" />
</aop:config>
。。。。。。。
/////配置注入:service<-DAO,可以多个dao注入同一个service
<!-- dao注入service, class是service实现类,ref的UserDAO也是实现类 -->
<bean id="userService" class="service.UserService">
<property name="iuserDao" ref="UserDAO"></property>
</bean>
/////配置注入:Action<-service
<!--struts2整合spring时:service注入action中的bean id要与struts.xml配置文件中的action class一致 -->
<bean id="loginAction" class="action.LoginAction" scope="prototype">
<property name="iuserservice" ref="userService"></property>
</bean>
------------------------------------------------------
-------------------------------------------------解决乱码:
1.JSP页面s:textfield中输入的值传入oracle数据库,数据库中显示乱码,解决在jsp页面中用:<%@ page language="java" contentType="text/html; charset=utf-8"%>
2.JSP页面s:textfield中从数据库查询数据显示在文本框中的是乱码,
解决:配置tomcat(E:\webWorkspace7.0\apache-tomcat-6.0.18\conf\server.xml)中加入URIEncoding="UTF-8"
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
-----------------------------------------------------
数据库连接用oracle时加入classes12.jar包,用mysql时加入mysql-connector-java-5.0.5-bin.jar
-------------------------------------------------------------------------
S2SH使用oracle数据库时,(工程有红叉,但子项内无红叉)若提示“表名无效”,则将hbm.xml文件中的table加''(table='"user"'),因为myeclipse生成hbm.xml时没有''.
---------------------------------------------------------web.xml中配置spring监听器、FilterDispatcher:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置spring的监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/applicationContext.xml,
/WEB-INF/spring-config/spring_dao.xml </param-value>
</context-param>
<!-- 开启监听 -->
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!--
配置OpenSessionInViewFilter,必须在struts2监听之前,用来解决could not initialize
proxy - no Session报错问题,配置自己写的filter
-->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OurOpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<!-- 设置监听加载上下文 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
设置访问资源,能访问web-inf下的jsp页面 <servlet> <servlet-name>test</servlet-name>
<jsp-file>/WEB-INF/ui/jsp/globle/main.jsp</jsp-file> </servlet>
<servlet-mapping> <servlet-name>test</servlet-name>
<url-pattern>/test.jsp</url-pattern> </servlet-mapping>
-->
<welcome-file-list>
<welcome-file>/WEB-INF/ui/jsp/globle/main.jsp</welcome-file>
</welcome-file-list>
</web-app>
-----------------“不能实例化action”的错误:可能dao,service接口实现时没写implements---------------------
----------------------------------------------------------------------
<struts>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name="struts2" extends="struts-default">
<!--伪action 它的class必须与applicationContext.xml中service注入action配置时的bean id一致,action name与login.jsp中的form表单的action一致(Login.action) -->
<action name="Login" class="loginAction">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
-----------------------------------------------------------------------
8、为了解决hibernate延迟加载的问题,使用Spring中提供的过滤器来解决,它能够让Session在请求解释完成之后再关闭,web.xml配置方式如下:
<!-- 配置OpenSessionInViewFilter,必须在struts2监听之前 ,用来解决could not initialize proxy - no Session报错问题-->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<!--如果还报错(Write operations are not allowed in read-only mode )则加入init-param值为false即可解决:
-->
<init-param>
<param-name>singleSession </param-name>
<param-value>false </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
----------------------------
报错:Illegal attempt to associate a collection with two open sessions;
解决:
假若你的web.xml中配置了hibernate的OpenSessionInViewFilter的filter那么去掉后,在spring 中这样配置:
<bean name="openSessionInViewInterceptor"
class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="flushMode" value="1"/>
<property name="singleSession" value="false" />
</bean>
-------------------
9、因为OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。故进行insert、 update和delete操作时会产生异常:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. 因此需要采用spring的事务声明,使方法受transaction控制:
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置Advice(事务的传播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
<tx:method name="search*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 配置事务管理器应用的范围 -->
<aop:config>
<aop:pointcut id="affectMethods"
expression="execution(* lk.edu.tms.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods" />
</aop:config>
-------------------------
--------------------------------
tiles框架的应用:(tiles就如同html中的frameset框架)
layout.jsp:------------------模板(框架分为上下左中右)
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<html>
<body topmargin="0" leftmargin="0"> <!-- topmargin等用来去除页面上下左右的空隙 -->
<table border="1" bordercolor="red" width="100%" height="100%" >
<tr height="20%"><td colspan="3"><tiles:insert attribute="header"></tiles:insert> <!-- 框架模板 -->
</td>
</tr>
<tr height="70%">
<td width="20%"><tiles:insert attribute="left"></tiles:insert></td>
<td width="60%"><tiles:insert attribute="center"></tiles:insert></td>
<td width="20%"><tiles:insert attribute="right"></tiles:insert></td>
</tr>
<tr height="10%">
<td colspan="3"><tiles:insert attribute="footer"></tiles:insert></td>
</tr>
</table>
</body>
</html>
main.jsp:-----------显示页面
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<tiles:insert page="layout.jsp" flush="true">
<tiles:put name="header" value="header.jsp"></tiles:put> <!-- 具体页头页面 -->
<tiles:put name="left" value="left.jsp"></tiles:put>
<tiles:put name="center" value="center.jsp"></tiles:put>
<tiles:put name="right" value="right.jsp"></tiles:put>
<tiles:put name="footer" value="footer.jsp"></tiles:put> <!-- 具体页尾页面 -->
</tiles:insert>
-----------------------------------------------------------
----------------------------------------------
hbm.xml的手动创建方法(这种创建方法可以在写代码时按Alt+/有提示):
New/other/XML(Basic Templates)/命名/create...DTD file/select XML Catalog entry/Hibernate Mapping DTD 3.0//EN
----------------------------
struts2配置中Action的name 和package的name和namespace是什么作用
09:26在struts2 struts.xml 配置中
<struts>
<package name="caixuedong" extends="struts-default" namespace="/core">
<action name="greeting" class="com.tarena.struts2.action.GreetingAction" >
<result name="success">/core/greeting.jsp </result>
</action>
</package>
</struts>
name="caixuedong"
namespace="/core"
name="greeting"
这三个怎么去理解啊
----------------------------
1.package中的name只是一个标识,你可以随意命名;
2.action中的name对应你页面中的一个action跳转,比如你页面有个表单提交: <form
action="struts.xml中action里的name">
3.namespace是用于区分包中相同的类,如果没写,说明该包为默认空间,如果写了(如你的这个例子),那么就说明包caixuedong的空间为/core。
namespace实际上是在包的基础上对Action的进一步组织和划分,可以解决Action重名问题,因为在不同的命名空间中是可以有相同的Action名的,就好比一班有个叫张三的,二班也有个叫张三的,当我们呼叫某个张三时,就得带上“命名空间”,Action也是如此,例子的greeting就必须通过
/core/greeting.action的方式来进行调用。
greeting那个name就是Action的名字,相当于上个例子的“张三”
----------------------------------------------------------------oracle创建表空间
cmd-----C:\Users\user>sqlplus / as sysdba
(上面不能进就用这个:cmd-----sqlplus sys/tower@orcl as sysdba)
SQL> create user tower identified by tower;
SQL> grant create table to tower;
授权成功。
SQL> create tablespace towertablespace datafile 'E:\oracle\product\10.2.0\oradata
\orcl\towerts.dbf' size 1000m;
表空间已创建。
SQL> alter user tower default tablespace towertablespace;
用户已更改。
SQL> alter user tower quota unlimited on towertablespace;
用户已更改。
SQL>
------------------------------------purge recyclebin清空oracle回收站
当表的名字变成不可识别的长串字符时,有可能是此表已经被删除,但还能看到,用SQL>purge recyclebin;清空回收站即可彻底删除此表。
----------------------------------------查询一个表中的所有行,并输出到jsp页面
要查询一个表中的所有行,List findAll(),返回List集合,在Action类中使用ActionContext.getContext().put("y",list)--(request??只在一次请求中有效)将list集合放入y中,然后在另外一个jsp页面中取得此list,然后使用<s:iterator><s:property>来迭代输出此list到页面上。
示例:
ActionContext.getContext().put("groupUserList", list);//Action类中写,//ActionContext.getContext().getSession().put("groupUserList", list);写此句不能查到数据
<s:iterator id="group" status="index" value="groupUserList"> //jsp页面中获取值并输出
<s:property id="group" value="(联合主键生成类的id)id.tdSaUsergroup.gid" />//如果想将此值显示在文本框中,这样写<s:textfield label="密码" value="%{id.tdSaUsergroup.gid}"></s:textfield>
<s:property id="group" value="id.tdSaUser.id" />
</s:iterator>
----------------------------------jsp页面上从一个action中取得了数据,但另一Action要用到此值(如登录后显示id,但又要根据此id将此人删除,id不需要再手动输入)
jsp页面:
<%String uid = (String) request.getAttribute("uid");%>
工号:<%=uid%>
<input type="hidden" name="uid" value="<%=uid%>">
//action中:
ServletActionContext.getRequest().getParameter("uid");
//////////////////////////////////////
action中保存从数据查到的List:ActionContext.getContext().put("userList", u);
jsp页面上获取并隐藏List中的uid:
<%
TdSaUser user=(TdSaUser) ActionContext.getContext().get("userList");
String uid=user.getId();
%>
<input name="uid" type="hidden" value="<%=uid%>" >
然后再在另一个action获取此uid:
String uid = (String) ServletActionContext.getRequest().getParameter("uid");// 获取参数(用户ID工号)
------------------------------怎样在框架集上点击一个链接同时改变两个框架
框架集分上(top),左(left),右(main)三部分,现在要求点击top上的链接时同时改变left和main的内容.
A:在left的Body中插入以下代码:
<body onload="window.open('x x x.html','mainFrame')"></body>
------------------------------------在jsp页面中获取session中的List
Action中:list里是userGroup类
ServletActionContext.getRequest().getSession().setAttribute("userGroupList", list);
JSP页面中:
<s:iterator id="group" status="index" value="#session.userGroupList">
<s:property id="group" value="gid" />
<s:property id="group" value="name" />
</s:iterator>
---------------------
Action中: "user"存的是对象,它可以包含id,name...属性
ActionContext.getContext().put("user", user);
jsp页面中:
<s:textfield label="姓名" name="name" value="%{#session.user.name}"></s:textfield>
------------------------------------------------------
Action中:List里存只有类的属性userId(String)
ServletActionContext.getRequest().getSession().setAttribute("userIdList", list);
JSP页面:属性通过id显示出来
<s:iterator id="ids" value="#session.userIdList">
<s:property value="ids" />
</s:iterator>
----------------------------------List放入s:select下拉列表中
Action类中:一个表dept中放了部门id,name
List deptList=iusermagservice.getDept();//查询获得表中数据返回一个List
ServletActionContext.getRequest().setAttribute("deptList", deptList);//将List存入request中
JSP页面中:将List中的id,name显示在下拉列表中
<s:select label="部门" name="dept" list="#request.deptList"
listKey="id" listValue="name" >
</s:select>
listKey最好写与listvalue相同,因为向数据库中插入的是listkey的值,jsp页面上显示的是listvalue的值
----------------------------------------
通过选择下拉菜单(工号,姓名),并输入工号或姓名来登录:
JSP页面中:
<s:select name="userSearchType" list="#{'gonghao':'工号','xingming':'姓名'}"></s:select>
Action中:
ServletActionContext.getRequest().getParameter("userSearchType")----得到值:gonghao,xingming
------------------------------写validation.xml校验文件
Action类中写了很多方法,校验文件命名为:xxxAction-方法对应的action name-validation.xml
Action类只有execute()方法,校验文件命名为:xxxAction-validation.xml
1.校验文件写好与Action类放在同一文件夹下;
2.jsp页面中可写<s:fielderror/>集中显示校验出错提示
3.在struts.xml文件中的action result中写出错时返回的输入页面<result name="input">/mgr/showUserInfo.jsp</result>
------------------加上校验后,表格消失了
当使用校验时,若有两个提交按钮对应2个Action,此时<s:form>中不需写action=""也可提交页面,但会出现没有表格约束的界面,比较丑,加上<s:form action="">中的action=""就会出现表格了
<body>
<s:fielderror/>
<s:form action="">
<table>
<tr>
<td colspan="2" align="center">
<s:submit value="修改提交" action="UpdateUser" theme="simple"></s:submit>
<s:submit value="删除此用户" action="DelUser" theme="simple"></s:submit>
<a href="javascript:history.back();">返回</a>
</td>
</tr>
</table>
</s:form>
</body>
--------------------------------
------------------------统一IDE,Struts2,Spring,Hibernate版本:
Myeclipse: 7.0
web project: javaEE 1.4
jdk : 1.5(5.0)
Tomcat: tomcat6.0.18
oracle: 10g
Struts2: struts2.0.14
Spring: spring2.5-------spring2.5 AOP Libraries,
sping2.5 Core Libraries,
spring2.5 Persisteence Core Libraries
spring2.5 Persisteence JDBC Libraries
spring2.5 Web Libraries
/WebRoot/WEB-INF/applicationContext.xml
hibernate托管给spring
Hibernate: hibernate3.2------------H3.2 Annotations&Entity Manager
H3.2 Core Libraries
H3.2 Advanced Support Libraries
-------------------------------------------S2SH搭建环境
目录结构:DAO(接口IUser,实现类User),service,action,po
struts2的配置包的导入,需要的是5个jar包分别是:
struts2-core-2.0.11.2.jar
freemarker-2.3.8.jar
ognl-2.6.11.jar
xwork-2.05.jar
commons-logging-1.0.4.jar
struts2+spring配置包:struts2-spring-plugin-2.0.11.2.jar
----------------------------------------------------------------Web.<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置spring的监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/applicationContext.xml,
/WEB-INF/spring-config/spring_dao.xml </param-value>
</context-param>
<!-- 开启监听 -->
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!--
配置OpenSessionInViewFilter,必须在struts2监听之前,用来解决could not initialize
proxy - no Session报错问题,配置自己写的filter
-->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OurOpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<!-- 设置监听加载上下文 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
设置访问资源,能访问web-inf下的jsp页面 <servlet> <servlet-name>test</servlet-name>
<jsp-file>/WEB-INF/ui/jsp/globle/main.jsp</jsp-file> </servlet>
<servlet-mapping> <servlet-name>test</servlet-name>
<url-pattern>/test.jsp</url-pattern> </servlet-mapping>
-->
<welcome-file-list>
<welcome-file>/WEB-INF/ui/jsp/globle/main.jsp</welcome-file>
</welcome-file-list>
</web-app>
--------------------------------------------------------------------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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!--
解决:Write operations are not allowed in read-only mode
(FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO
or remove 'readOnly' marker from transaction definition.
-->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置Advice(事务的传播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS" />
<tx:method name="search*" propagation="SUPPORTS" />
<tx:method name="show*" propagation="SUPPORTS" />
</tx:attributes>
</tx:advice>
<!-- 配置事务管理器应用的范围 -->
<aop:config>
<aop:pointcut id="affectMethods"
expression="execution(* lk.edu.tms.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods" />
</aop:config>
。。。。。。。
/////配置注入:service<-DAO,可以多个dao注入同一个service
<!-- dao注入service, class是service实现类,ref的UserDAO也是实现类 -->
<bean id="userService" class="service.UserService">
<property name="iuserDao" ref="UserDAO"></property>
</bean>
/////配置注入:Action<-service
<!--struts2整合spring时:service注入action中的bean id要与struts.xml配置文件中的action class一致 -->
<bean id="loginAction" class="action.LoginAction" scope="prototype">
<property name="iuserservice" ref="userService"></property>
</bean>
------------------------------------------------------
-------------------------------------------------解决乱码:
1.JSP页面s:textfield中输入的值传入oracle数据库,数据库中显示乱码,解决在jsp页面中用:<%@ page language="java" contentType="text/html; charset=utf-8"%>
2.JSP页面s:textfield中从数据库查询数据显示在文本框中的是乱码,
解决:配置tomcat(E:\webWorkspace7.0\apache-tomcat-6.0.18\conf\server.xml)中加入URIEncoding="UTF-8"
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
-----------------------------------------------------
数据库连接用oracle时加入classes12.jar包,用mysql时加入mysql-connector-java-5.0.5-bin.jar
-------------------------------------------------------------------------
S2SH使用oracle数据库时,(工程有红叉,但子项内无红叉)若提示“表名无效”,则将hbm.xml文件中的table加''(table='"user"'),因为myeclipse生成hbm.xml时没有''.
---------------------------------------------------------web.xml中配置spring监听器、FilterDispatcher:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- 配置spring的监听器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value> /WEB-INF/applicationContext.xml,
/WEB-INF/spring-config/spring_dao.xml </param-value>
</context-param>
<!-- 开启监听 -->
<listener>
<listener-class> org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!--
配置OpenSessionInViewFilter,必须在struts2监听之前,用来解决could not initialize
proxy - no Session报错问题,配置自己写的filter
-->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OurOpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<!-- 设置监听加载上下文 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class> org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--
设置访问资源,能访问web-inf下的jsp页面 <servlet> <servlet-name>test</servlet-name>
<jsp-file>/WEB-INF/ui/jsp/globle/main.jsp</jsp-file> </servlet>
<servlet-mapping> <servlet-name>test</servlet-name>
<url-pattern>/test.jsp</url-pattern> </servlet-mapping>
-->
<welcome-file-list>
<welcome-file>/WEB-INF/ui/jsp/globle/main.jsp</welcome-file>
</welcome-file-list>
</web-app>
-----------------“不能实例化action”的错误:可能dao,service接口实现时没写implements---------------------
----------------------------------------------------------------------
<struts>
<!-- Struts 2的Action必须放在指定的包空间下定义 -->
<package name="struts2" extends="struts-default">
<!--伪action 它的class必须与applicationContext.xml中service注入action配置时的bean id一致,action name与login.jsp中的form表单的action一致(Login.action) -->
<action name="Login" class="loginAction">
<!-- 定义处理结果和资源之间映射关系。 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
-----------------------------------------------------------------------
8、为了解决hibernate延迟加载的问题,使用Spring中提供的过滤器来解决,它能够让Session在请求解释完成之后再关闭,web.xml配置方式如下:
<!-- 配置OpenSessionInViewFilter,必须在struts2监听之前 ,用来解决could not initialize proxy - no Session报错问题-->
<filter>
<filter-name>lazyLoadingFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
<!--如果还报错(Write operations are not allowed in read-only mode )则加入init-param值为false即可解决:
-->
<init-param>
<param-name>singleSession </param-name>
<param-value>false </param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>lazyLoadingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
----------------------------
报错:Illegal attempt to associate a collection with two open sessions;
解决:
假若你的web.xml中配置了hibernate的OpenSessionInViewFilter的filter那么去掉后,在spring 中这样配置:
<bean name="openSessionInViewInterceptor"
class="org.springframework.orm.hibernate3.support.OpenSessionInViewInterceptor">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="flushMode" value="1"/>
<property name="singleSession" value="false" />
</bean>
-------------------
9、因为OpenSessionInViewFilter在getSession的时候,会把获取回来的session的flush mode 设为FlushMode.NEVER。故进行insert、 update和delete操作时会产生异常:org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition. 因此需要采用spring的事务声明,使方法受transaction控制:
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置Advice(事务的传播特性) -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="del*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
<tx:method name="search*" propagation="SUPPORTS" read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 配置事务管理器应用的范围 -->
<aop:config>
<aop:pointcut id="affectMethods"
expression="execution(* lk.edu.tms.*.*(..))" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="affectMethods" />
</aop:config>
-------------------------
--------------------------------
tiles框架的应用:(tiles就如同html中的frameset框架)
layout.jsp:------------------模板(框架分为上下左中右)
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<html>
<body topmargin="0" leftmargin="0"> <!-- topmargin等用来去除页面上下左右的空隙 -->
<table border="1" bordercolor="red" width="100%" height="100%" >
<tr height="20%"><td colspan="3"><tiles:insert attribute="header"></tiles:insert> <!-- 框架模板 -->
</td>
</tr>
<tr height="70%">
<td width="20%"><tiles:insert attribute="left"></tiles:insert></td>
<td width="60%"><tiles:insert attribute="center"></tiles:insert></td>
<td width="20%"><tiles:insert attribute="right"></tiles:insert></td>
</tr>
<tr height="10%">
<td colspan="3"><tiles:insert attribute="footer"></tiles:insert></td>
</tr>
</table>
</body>
</html>
main.jsp:-----------显示页面
<%@ page language="java" contentType="text/html; charset=GBK"%>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles"%>
<tiles:insert page="layout.jsp" flush="true">
<tiles:put name="header" value="header.jsp"></tiles:put> <!-- 具体页头页面 -->
<tiles:put name="left" value="left.jsp"></tiles:put>
<tiles:put name="center" value="center.jsp"></tiles:put>
<tiles:put name="right" value="right.jsp"></tiles:put>
<tiles:put name="footer" value="footer.jsp"></tiles:put> <!-- 具体页尾页面 -->
</tiles:insert>
-----------------------------------------------------------
----------------------------------------------
hbm.xml的手动创建方法(这种创建方法可以在写代码时按Alt+/有提示):
New/other/XML(Basic Templates)/命名/create...DTD file/select XML Catalog entry/Hibernate Mapping DTD 3.0//EN
----------------------------
struts2配置中Action的name 和package的name和namespace是什么作用
09:26在struts2 struts.xml 配置中
<struts>
<package name="caixuedong" extends="struts-default" namespace="/core">
<action name="greeting" class="com.tarena.struts2.action.GreetingAction" >
<result name="success">/core/greeting.jsp </result>
</action>
</package>
</struts>
name="caixuedong"
namespace="/core"
name="greeting"
这三个怎么去理解啊
----------------------------
1.package中的name只是一个标识,你可以随意命名;
2.action中的name对应你页面中的一个action跳转,比如你页面有个表单提交: <form
action="struts.xml中action里的name">
3.namespace是用于区分包中相同的类,如果没写,说明该包为默认空间,如果写了(如你的这个例子),那么就说明包caixuedong的空间为/core。
namespace实际上是在包的基础上对Action的进一步组织和划分,可以解决Action重名问题,因为在不同的命名空间中是可以有相同的Action名的,就好比一班有个叫张三的,二班也有个叫张三的,当我们呼叫某个张三时,就得带上“命名空间”,Action也是如此,例子的greeting就必须通过
/core/greeting.action的方式来进行调用。
greeting那个name就是Action的名字,相当于上个例子的“张三”
----------------------------------------------------------------oracle创建表空间
cmd-----C:\Users\user>sqlplus / as sysdba
(上面不能进就用这个:cmd-----sqlplus sys/tower@orcl as sysdba)
SQL> create user tower identified by tower;
SQL> grant create table to tower;
授权成功。
SQL> create tablespace towertablespace datafile 'E:\oracle\product\10.2.0\oradata
\orcl\towerts.dbf' size 1000m;
表空间已创建。
SQL> alter user tower default tablespace towertablespace;
用户已更改。
SQL> alter user tower quota unlimited on towertablespace;
用户已更改。
SQL>
------------------------------------purge recyclebin清空oracle回收站
当表的名字变成不可识别的长串字符时,有可能是此表已经被删除,但还能看到,用SQL>purge recyclebin;清空回收站即可彻底删除此表。
----------------------------------------查询一个表中的所有行,并输出到jsp页面
要查询一个表中的所有行,List findAll(),返回List集合,在Action类中使用ActionContext.getContext().put("y",list)--(request??只在一次请求中有效)将list集合放入y中,然后在另外一个jsp页面中取得此list,然后使用<s:iterator><s:property>来迭代输出此list到页面上。
示例:
ActionContext.getContext().put("groupUserList", list);//Action类中写,//ActionContext.getContext().getSession().put("groupUserList", list);写此句不能查到数据
<s:iterator id="group" status="index" value="groupUserList"> //jsp页面中获取值并输出
<s:property id="group" value="(联合主键生成类的id)id.tdSaUsergroup.gid" />//如果想将此值显示在文本框中,这样写<s:textfield label="密码" value="%{id.tdSaUsergroup.gid}"></s:textfield>
<s:property id="group" value="id.tdSaUser.id" />
</s:iterator>
----------------------------------jsp页面上从一个action中取得了数据,但另一Action要用到此值(如登录后显示id,但又要根据此id将此人删除,id不需要再手动输入)
jsp页面:
<%String uid = (String) request.getAttribute("uid");%>
工号:<%=uid%>
<input type="hidden" name="uid" value="<%=uid%>">
//action中:
ServletActionContext.getRequest().getParameter("uid");
//////////////////////////////////////
action中保存从数据查到的List:ActionContext.getContext().put("userList", u);
jsp页面上获取并隐藏List中的uid:
<%
TdSaUser user=(TdSaUser) ActionContext.getContext().get("userList");
String uid=user.getId();
%>
<input name="uid" type="hidden" value="<%=uid%>" >
然后再在另一个action获取此uid:
String uid = (String) ServletActionContext.getRequest().getParameter("uid");// 获取参数(用户ID工号)
------------------------------怎样在框架集上点击一个链接同时改变两个框架
框架集分上(top),左(left),右(main)三部分,现在要求点击top上的链接时同时改变left和main的内容.
A:在left的Body中插入以下代码:
<body onload="window.open('x x x.html','mainFrame')"></body>
------------------------------------在jsp页面中获取session中的List
Action中:list里是userGroup类
ServletActionContext.getRequest().getSession().setAttribute("userGroupList", list);
JSP页面中:
<s:iterator id="group" status="index" value="#session.userGroupList">
<s:property id="group" value="gid" />
<s:property id="group" value="name" />
</s:iterator>
---------------------
Action中: "user"存的是对象,它可以包含id,name...属性
ActionContext.getContext().put("user", user);
jsp页面中:
<s:textfield label="姓名" name="name" value="%{#session.user.name}"></s:textfield>
------------------------------------------------------
Action中:List里存只有类的属性userId(String)
ServletActionContext.getRequest().getSession().setAttribute("userIdList", list);
JSP页面:属性通过id显示出来
<s:iterator id="ids" value="#session.userIdList">
<s:property value="ids" />
</s:iterator>
----------------------------------List放入s:select下拉列表中
Action类中:一个表dept中放了部门id,name
List deptList=iusermagservice.getDept();//查询获得表中数据返回一个List
ServletActionContext.getRequest().setAttribute("deptList", deptList);//将List存入request中
JSP页面中:将List中的id,name显示在下拉列表中
<s:select label="部门" name="dept" list="#request.deptList"
listKey="id" listValue="name" >
</s:select>
listKey最好写与listvalue相同,因为向数据库中插入的是listkey的值,jsp页面上显示的是listvalue的值
----------------------------------------
通过选择下拉菜单(工号,姓名),并输入工号或姓名来登录:
JSP页面中:
<s:select name="userSearchType" list="#{'gonghao':'工号','xingming':'姓名'}"></s:select>
Action中:
ServletActionContext.getRequest().getParameter("userSearchType")----得到值:gonghao,xingming
------------------------------写validation.xml校验文件
Action类中写了很多方法,校验文件命名为:xxxAction-方法对应的action name-validation.xml
Action类只有execute()方法,校验文件命名为:xxxAction-validation.xml
1.校验文件写好与Action类放在同一文件夹下;
2.jsp页面中可写<s:fielderror/>集中显示校验出错提示
3.在struts.xml文件中的action result中写出错时返回的输入页面<result name="input">/mgr/showUserInfo.jsp</result>
------------------加上校验后,表格消失了
当使用校验时,若有两个提交按钮对应2个Action,此时<s:form>中不需写action=""也可提交页面,但会出现没有表格约束的界面,比较丑,加上<s:form action="">中的action=""就会出现表格了
<body>
<s:fielderror/>
<s:form action="">
<table>
<tr>
<td colspan="2" align="center">
<s:submit value="修改提交" action="UpdateUser" theme="simple"></s:submit>
<s:submit value="删除此用户" action="DelUser" theme="simple"></s:submit>
<a href="javascript:history.back();">返回</a>
</td>
</tr>
</table>
</s:form>
</body>
--------------------------------
相关推荐
整合S2SH+Freemarker+oscache,后台用Spring管理各个bean,Hibernate做数据库持久化,viewer用Freemarker。整合中对Struts2,Hibernate,Spring都采用Annotation进行注解类。
整合S2SH+Freemarker,后台用Spring管理各个bean,Hibernate做数据库持久化,viewer用Freemarker。整合中对Struts2,Hibernate,Spring都采用Annotation进行注解类。
Struts2.3 + Spring3.2 + Hibernate4.1 + HTML5 + CSS3开发示例代码。 其中包括如下文件: 介绍文档 Struts2.3 + Spring3.2 + Hibernate4.1 + HTML5 + CSS3开发示例.docx Eclipse工程文件 SSH2.zip Zip包是Eclipse...
Struts2.3.28、Spring4.1.6和Hibernate4.3.8是三个经典的Java EE框架,它们的整合是企业级应用开发中常见的技术栈,通常被称为S2SH。在这个版本的整合中,注解的使用极大地简化了配置过程,使得开发更加高效。以下是...
本例主要是实现了struts2+spring3+hibernate3的 基本框架搭建的注册登录,以及用户增删改查,适于初学者学习。 包括:注册 登录功能 分页的实现 前端校验 验证码的实现 注册时有ajax 校验,登录时 后台从数据库...
在IT行业中,SSH(Spring、Struts2、Hibernate)是一个经典的Java Web开发框架组合,而Redis则是一个高性能的键值存储系统,常用于缓存和数据持久化。将SSH与Redis整合,可以提升应用程序的性能和响应速度。下面将...
"易购网络商城"是一个采用经典S2SH(Struts2+Spring2.5+Hibernate3)技术栈开发的网上购物系统,它为开发者提供了完整的解决方案,便于快速搭建和维护电商网站。下面将对这个系统的各个组成部分进行详细介绍。 1. ...
包含有完整的jar包和源代码,这是专门为我们实验室定制开发的,包含了架构基于s2sh技术网站的参考实现(包括了全部基础部分:如分页,缓存,文件上传,连接池等等)希望对初学JavaEE WEB开的人有所帮助。...
### Struts2、Spring与Hibernate整合的关键点及注意事项 #### 一、概述 在Java Web开发领域,Struts2、Spring以及Hibernate是三个非常重要的框架。它们分别在MVC架构、依赖注入与业务逻辑管理、对象关系映射等方面...
Struts2、Hibernate和Spring是Java开发中三大主流框架,它们各自在Web应用程序的不同层面上发挥作用,而将它们整合在一起,通常称为SSH(Struts2、Spring、Hibernate)或S2SH,可以构建出功能强大、结构清晰的企业级...
4. **S2SH整合**:将Struts2、Spring和Hibernate整合在一起,可以实现强大的业务逻辑处理、数据持久化和视图展现能力。整合过程中,Spring作为核心容器管理所有组件,包括Struts2的Action和Hibernate的数据访问对象...
这里我们主要讨论的是"Struts2+Spring2.5+Hibernate3"的整合,这通常被称为"S2SH"集成。 **Struts2** 是一个基于MVC设计模式的Web应用程序框架,它主要用于控制应用程序的流程。Struts2的核心是Action类,它处理...
S2SH,即Struts2、Spring和Hibernate的整合,是Java Web开发中常见的三大框架集成,用于构建高效、模块化的应用系统。这三个框架分别负责不同的职责:Struts2处理MVC模式中的Controller部分,Spring提供了依赖注入和...
ECTable+Struts2+Hibernate+Spring S2SHTest.part2.rar ECTable+Struts2+Hibernate+Spring S2SHTest.part2.rar
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的组合被称为S2SH,是企业级应用开发中常用的技术栈。这个"S2SH Demo"项目是一个将这三者与JSP结合的实例,旨在帮助开发者理解如何将这些框架整合在一起...
SSH整合是指将Struts2、Spring和Hibernate这三个流行的开源Java框架集成在一起,以构建高效、模块化的企业级Web应用程序。这个“SSH整合 Struts2.1+Spring4.1+Hibernate4.1”是一个预配置的框架模板,适用于快速开发...
标题提到的“s2sh s2sh项目 JPA项目 JPA+struts2+Hibernate+spring”是指一个基于Struts2、Spring和Hibernate的Java Web项目,其中还集成了JPA(Java Persistence API)作为数据持久化层。这个项目是一个很好的学习...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责:Struts2专注于MVC(Model-View-Controller)架构的实现,Spring提供了依赖注入和面向切面编程,而Hibernate则作为持久层框架,简化...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们各自负责不同的职责,共同构建了一个强大的MVC(Model-View-Controller)架构。在这个"简单的S2SH登陆代码"中,我们将探讨这三个框架如何协同工作,实现...
ECTable+Struts2+Hibernate+Spring S2SHTest.part1.rar ECTable+Struts2+Hibernate+Spring S2SHTest.part1.rar