SeaSar2之struts2+ seasar2 + s2dao框架整合-yellowcong
来源:互联网 发布:linux 内存查询 编辑:程序博客网 时间:2024/04/28 20:45
说起来,整合这个玩意还挺费事的,由于jar的不对,导致许多莫名奇妙的问题,其中Maven的jetty插件不支持jsp,需要自己配置,当时我就想骂人了,整体来说,整合的步骤基本是先Seasar2,然后s2dao,最后是struts,没啥难度,就是资料少,不好弄,淡腾,整合框架源码地址:https://git.oschina.net/yellowcong/seasar
项目结构
环境搭建
pom.xml
我的数据库是mysql的,大家需要注意了,需要替换成自己的数据库版本
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>seasar</groupId> <artifactId>demo</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>demo Maven Webapp</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>aliyunmaven</id> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> </repository> <repository> <id>seasar</id> <url>https://www.seasar.org/maven/maven2/</url> </repository> <repository> <id>ojdbc6</id> <url>http://www.datanucleus.org/downloads/maven2/</url> </repository> </repositories> <dependencies> <!-- 导入jsp --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2.1-b03</version> <scope>provided</scope> </dependency> <!-- 导入servlet --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <!-- https://mvnrepository.com/artifact/taglibs/standard --> <dependency> <groupId>taglibs</groupId> <artifactId>standard</artifactId> <version>1.1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <!-- seasar框架 的容器 BEGIN--> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-framework</artifactId> <version>2.4.12</version> </dependency> <!-- https://mvnrepository.com/artifact/aopalliance/aopalliance --> <dependency> <groupId>aopalliance</groupId> <artifactId>aopalliance</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <!-- https://mvnrepository.com/artifact/ognl/ognl --> <dependency> <groupId>ognl</groupId> <artifactId>ognl</artifactId> <version>2.6.9-patch-20070624</version> </dependency> <!-- Jta需要加入,不然就会报java.lang.NoClassDefFoundError: javax/transaction/TransactionManager --> <dependency> <groupId>javax.transaction</groupId> <artifactId>jta</artifactId> <version>1.1</version> </dependency> <!-- https://mvnrepository.com/artifact/javassist/javassist --> <dependency> <groupId>javassist</groupId> <artifactId>javassist</artifactId> <version>3.4.GA</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <!-- seasar框架 的容器 END--> <!--seasar框架 S2Dao BEGIN--> <!-- 不同版本的s2-dao依赖的s2-framework不一样 --> <dependency> <groupId>org.seasar.dao</groupId> <artifactId>s2-dao</artifactId> <version>1.0.50</version> </dependency> <!-- https://mvnrepository.com/artifact/org.seasar.container/s2-extension --> <dependency> <groupId>org.seasar.container</groupId> <artifactId>s2-extension</artifactId> <version>2.3.23</version> </dependency> <!-- 注解需要,对于实体类,需要这个包 --> <dependency> <groupId>org.seasar.dao</groupId> <artifactId>s2-dao-tiger</artifactId> <version>1.0.47</version> </dependency> <!-- https://mvnrepository.com/artifact/log4j/log4j --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.13</version> </dependency> <dependency> <groupId>commons-beanutils</groupId> <artifactId>commons-beanutils</artifactId> <version>1.7.0</version> </dependency> <!-- https://mvnrepository.com/artifact/oracle/ojdbc6 --><!-- <dependency> <groupId>oracle</groupId> <artifactId>ojdbc6</artifactId> <version>11.2.0.3</version> </dependency> --> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <!-- 通过mysql 数据连接,我不想用oracle,因为是公司的数据,怕整错了 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.39</version> </dependency> <!--seasar框架 S2Dao End--> <!-- Struts START --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.3</version> </dependency> <dependency> <groupId>org.seasar.struts2</groupId> <artifactId>struts2-seasar-plugin</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.seasar.mayaa</groupId> <artifactId>mayaa</artifactId> <version>1.1.26</version> </dependency> <dependency> <groupId>velocity</groupId> <artifactId>velocity</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>velocity-tools</groupId> <artifactId>velocity-tools</artifactId> <version>1.1</version> </dependency> <dependency> <groupId>commons-digester</groupId> <artifactId>commons-digester</artifactId> <version>1.8</version> </dependency> <!-- Struts END --> </dependencies> <build> <finalName>demo</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <!-- 配置war包的名称 --> <warName>hello</warName> </configuration> </plugin> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.4.6.v20170531</version> <configuration> <scanIntervalSecond>10</scanIntervalSecond> <webApp> <contextPath>/demo</contextPath> </webApp> <connectors> <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector"> <port>8080</port> <maxIdleTime>60000</maxIdleTime> </connector> </connectors> </configuration> </plugin> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build></project>
app.dicon
需要添加对Action的自动注入
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN""http://www.seasar.org/dtd/components.dtd"><components > <!--dao.dicon 我们必须配置这个dao.dicon,而且还必须有j2ee这个dao文件,这个是s2-dao-1.0.50.jar包下面默认配置的,我草,真尼玛是坑啊--> <include path="dao.dicon"/> <!-- ==================================================================== --> <!-- Interceptor Chains --> <!-- ==================================================================== --> <!-- DAO Interceptor Chain --> <component name="daoChain" class="org.seasar.framework.aop.interceptors.InterceptorChain"> <!-- <initMethod name="add"><arg>arkfw.timerInterceptor</arg></initMethod> --> <!-- 调用dao.dicon下的interceport拦截器, --> <initMethod name="add"><arg>dao.interceptor</arg></initMethod> </component> <!-- ==================================================================== --> <!-- Component Auto Register --> <!-- ==================================================================== --> <!-- Component Auto Register --> <component class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"> <!-- DAO --> <initMethod name="addClassPattern" > <arg>"com.yellowcong.dao"</arg> <arg>".*Dao"</arg> </initMethod> <!-- Business Logic --> <initMethod name="addClassPattern" > <arg>"com.yellowcong.service"</arg> <arg>".*Impl"</arg> </initMethod> <!-- Action --> <initMethod name="addClassPattern" > <arg>"com.yellowcong.action"</arg> <arg>".*Action"</arg> </initMethod> </component> <!-- ==================================================================== --> <!-- Aspect Auto Register --> <!-- ==================================================================== --> <!-- S2Dao Interceptor Auto Register --> <component class="org.seasar.framework.container.autoregister.AspectAutoRegister"> <property name="interceptor">daoChain</property> <initMethod name="addClassPattern" > <arg>"com.yellowcong.dao"</arg> <arg>".*Dao"</arg> </initMethod> </component></components>
j2ee.dicon
基本没啥改动,就是数据库注意点
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container//EN""http://www.seasar.org/dtd/components.dtd"><components namespace="j2ee"> <component name="transactionManager" class="org.seasar.extension.jta.TransactionManagerImpl"/> <component name="requiredTx" class="org.seasar.extension.tx.RequiredInterceptor"/> <component name="requiresNewTx" class="org.seasar.extension.tx.RequiresNewInterceptor"/> <component name="mandatoryTx" class="org.seasar.extension.tx.MandatoryInterceptor"/> <component name="notSupportedTx" class="org.seasar.extension.tx.NotSupportedInterceptor"/> <component class="org.seasar.extension.jdbc.impl.BasicResultSetFactory"/> <component class="org.seasar.extension.jdbc.impl.BasicStatementFactory"/> <component name="xaDataSource" class="org.seasar.extension.dbcp.impl.XADataSourceImpl"> <property name="driverClassName"> "com.mysql.jdbc.Driver" </property> <!-- 数据库配置--> <!-- <property name="URL">"jdbc:oracle:thin:@10.0.7.170:1522:ORCL5"</property> <property name="user">"SOFINAM_HENSEI"</property> <property name="password">"SOFINAM_HENSEI"</property> --> <property name="URL">"jdbc:mysql:///seasar2"</property> <property name="user">"root"</property> <property name="password">"root"</property> </component> <component name="connectionPool" class="org.seasar.extension.dbcp.impl.ConnectionPoolImpl"> <property name="timeout">600</property> <property name="maxPoolSize">10</property> <property name="allowLocalTx">true</property> <destroyMethod name="close"/> </component> <component name="dataSource" class="org.seasar.extension.dbcp.impl.DataSourceImpl"/></components>
log4j.xml
<?xml version="1.0" encoding="Shift_JIS" ?><!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"><log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- STDOUT --> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <param name="target" value="System.out" /> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="[%d{yyyy/MM/dd HH:mm:ss}] %-5p [%c{1}]: %m%n"/> </layout> </appender> <category name="org.seasar" additivity="false"> <priority value="DEBUG"/> <appender-ref ref="CONSOLE"/> </category><!-- <category name="jp.co.arksystems.sys.arkfw" additivity="false"> <priority value="DEBUG"/> <appender-ref ref="CONSOLE"/> </category> --> <category name="com.yellowcong" additivity="false"> <priority value="DEBUG"/> <appender-ref ref="CONSOLE"/> </category> <root> <priority value ="INFO" /> <appender-ref ref="CONSOLE" /> </root></log4j:configuration>
struts.xml
struts文件,需要注意的地方是,s2componentStack这个拦截器配置的时候,下面默认的拦截器,有些不好使,有可能是struts的版本问题,解决办法是看struts包下面的 struts-defualt.xml配置中的默认拦截器
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <!-- 修改后缀名称 ,填写空,就表示去掉默认后缀操作--> <constant name="struts.action.extension" value=""/> <package name="default" extends="seasar-default"> <interceptors> <interceptor-stack name="s2componentStack"> <interceptor-ref name="alias" /> <interceptor-ref name="prepare" /> <interceptor-ref name="i18n" /> <interceptor-ref name="chain" /> <interceptor-ref name="s2component" /> <interceptor-ref name="modelDriven" /> <interceptor-ref name="fileUpload" /> <interceptor-ref name="staticParams" /> <interceptor-ref name="params" /> <interceptor-ref name="conversionError" /> <interceptor-ref name="validation"> <param name="excludeMethods"> input,back,cancel,browse </param> </interceptor-ref> <interceptor-ref name="workflow"> <param name="excludeMethods"> input,back,cancel,browse </param> </interceptor-ref> </interceptor-stack> </interceptors> <default-interceptor-ref name="s2componentStack" /> <action name="list" method ="list" class="com.yellowcong.action.UserAction"> <result type="velocity" name="success"> page/user/list.jsp </result> </action> </package></struts>
struts-xx.jar包下面,有一个struts-defualt.xml配置文件,里面写了一堆默认的拦截器配置
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>Archetype Created Web Application</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!-- Seasar容器管理 --> <filter> <filter-name>s2filter</filter-name> <filter-class> org.seasar.framework.container.filter.S2ContainerFilter </filter-class> </filter> <filter-mapping> <filter-name>s2filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- struts配置 --> <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> <!-- seasar容器监听器 --> <listener> <listener-class> org.seasar.framework.container.servlet.S2ContainerListener </listener-class> </listener> <servlet> <servlet-name>s2servlet</servlet-name> <servlet-class> org.seasar.framework.container.servlet.S2ContainerServlet </servlet-class> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>s2servlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 设置编码 --> <filter> <filter-name>encodingfilter</filter-name> <filter-class>org.seasar.extension.filter.EncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
到这里,基本上都配置完成了,下一步,就是实际案例了
案例
通过请求来跳转到页面
Uesr
数据库实体类
package com.yellowcong.action;import java.util.List;import com.opensymphony.xwork2.ActionSupport;import com.yellowcong.service.UserService;import com.yellowcong.service.entity.User;/****作者:yellowcong*日期:2017/08/30*時間:13:36:53*描述:*/public class UserAction extends ActionSupport { private UserService userService ; public void setUserService(UserService userService) { this.userService = userService; } public String list() { List<User> users = this.userService.list(); for(User uesr:users) { System.out.println(uesr.getUsername()); } return SUCCESS; }}
UserDao
操作数据库数据
package com.yellowcong.dao;import java.util.List;import org.seasar.dao.annotation.tiger.S2Dao;import org.seasar.dao.annotation.tiger.Sql;import com.yellowcong.service.entity.User;/****作者:yellowcong*日期:2017/08/29*時間:16:16:38*描述:用户操作的Dao*/@S2Dao(bean=User.class)public interface UserDao { /** * 获取用户名称 * @param username * @return */ @Sql("SELECT * FROM USER ") List<User> list();}
UserService
package com.yellowcong.service;import java.util.List;import com.yellowcong.service.entity.User;/****作者:yellowcong*日期:2017/08/29*時間:16:48:46*描述:*/ public interface UserService { /** * 获取用户名称 * @param username * @return */ List<User> list();}
UserServiceImpl
package com.yellowcong.service.impl;import java.util.List;import com.yellowcong.dao.UserDao;import com.yellowcong.service.UserService;import com.yellowcong.service.entity.User;/****作者:yellowcong*日期:2017/08/29*時間:16:49:32*描述:*/public class UserServiceImpl implements UserService{ private UserDao userDao; public void setUserDao(UserDao userDao) { this.userDao = userDao; } @Override public List<User> list() { return this.userDao.list(); }}
UserAction
package com.yellowcong.action;import java.util.List;import com.opensymphony.xwork2.ActionSupport;import com.yellowcong.service.UserService;import com.yellowcong.service.entity.User;/****作者:yellowcong*日期:2017/08/30*時間:13:36:53*描述:*/public class UserAction extends ActionSupport { private UserService userService ; public void setUserService(UserService userService) { this.userService = userService; } public String list() { List<User> users = this.userService.list(); for(User uesr:users) { System.out.println(uesr.getUsername()); } return SUCCESS; }}
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>用户列表</body></html>
测试
访问没问题,就是反悔的结果中, <%%>代码没有被解释,这是我使用jetty服务器的原因导致的
阅读全文
0 0
- SeaSar2之struts2+ seasar2 + s2dao框架整合-yellowcong
- SeaSar2之S2Dao入门案例-yellowcong
- 日系框架之seasar2(S2DAO)
- Seasar2之$的讲解-yellowcong
- 日系框架之Seasar2之SQL注释大坑-yellowcong
- SeaSar2之自定义拦截器-yellowcong
- SeaSar2之拦截器链-yellowcong
- SeaSar2之系统拦截器-yellowcong
- SeaSar2之Dao层SQL详解-yellowcong
- seasar2
- SeaSar2之通过自动注入的方式管理Bean-yellowcong
- Seasar2之SQL注入的条件判断-yellowcong
- 日系框架之seasar2(S2JDBC)
- 日系框架之seasar2(S2Hibernate3)
- 日系框架之seasar2(S2JSF)
- 日系框架之seasar2(SAStruts)
- 日系框架之seasar2(S2Struts)
- 开源框架 Seasar2
- 【目录索引】深入理解JVM索引
- MongoDB学习
- 两道算法问题
- SSM框架Web程序的流程(Spring SpringMVC Mybatis)
- 如何生成转储(dmp)文件--工具篇
- SeaSar2之struts2+ seasar2 + s2dao框架整合-yellowcong
- 剑指offer_字符流中第一个只出现一次的字符
- 小战术集合
- Code Forces 824D Round#430 Div2D:Vitya and Strange Lesson :01字典树
- 【HUSTOJ】1091: 回形方阵
- 复习总结01:Hadoop
- Java之反射机制
- logback不同业务的日志打印到不同文件
- IV值