- Spring : 4.06
- Strust2 : 2.3.16
- Mybaits : 3.30
所需jar檔已整合到 jar.rar 裡面 請下載
配置Struts2

- struts2-core-2.3.16.3.jar
- xwork-core-2.3.16.3.jar
- commons-lang-2.4.jar
- commons-fileupload-1.3.1.jar
- freemarker-2.3.19.jar
- ognl-3.0.6.jar
- javassist-3.11.0.GA.jar
- commons-io-2.2.jar
- commons-lang3-3.1.jar
將這些jar檔直接複製貼進去workspace下你的專案裡
WebContent\WEB-INF\lib裡面去
EX:
我的workspace是D:\spring_struts_mybaits
專案名稱是test3
所以把jar檔丟到D:\spring_struts_mybaits\test3\WebContent\WEB-INF\lib 這裡面
然後記得重新整理你的專案
為Struts2設定web.xml
接下來在WebContent下的WEB-INF修改裡面的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"
version="2.5″>
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
接下來在java Resources下的src建立一個xml叫做struts.xml並在裡面加入
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
“http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<package name="xxxxxxxx" extends="struts-default">
<action name="xxxx" class="xxxx.xxxx" method="xxxx">
<result name="success">xxxx.jap</result>
</action>
</package>
</struts>
以上xxxx的部份可以自己命名
class=”xxxxx.xxxxx” 的部份需要對應到src底下的java檔 method=”xxxx” 則是java檔裡的函式名稱
如下:
<?xml version="1.0″ encoding="UTF-8″?>
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
“http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="index" class="action.IndexAction" method="index">
<result name="success">/Home/test.jsp</result>
</action>
</package>
</struts>
因為我在class這個地方命名了action.IndexAction
所以我要在src底下的建一個包叫action,然後在action裡面建立IndexAction.java
而我在method這個地方命名了index
則需要在indexAction.java裡面建立一個名為index的method
package action;
import com.opensymphony.xwork2.ActionSupport;
public class IndexAction extends ActionSupport {
public String index() {
return "success";
}
}
當中return “success“; 是為了要與 struts.xml 中的 <result name=”success”>/Home/test.jsp</result> 的result相符合
並在WebContent底下建立一個叫Home的資料夾,並在資料夾中建立一個test.jsp

接著將專案放到tomcat上面
放上去以後再網址列打上http://localhost:8080/xxxxxx/index.action
xxxxxxx為專案名稱
看看struts2有沒有成功運行起來
配置Spring
所需要的jar在spring資料夾裡面,應該有24個jar檔,如下:

一樣將這些jar檔直接複製到WebContent\WEB-INF\lib裡面去
記得重新整理你的專案
再次修改web.xml,增加spring設定內容
接下來要修改剛剛在WebContent下的web.xml,在剛剛struts前面加入
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>xxxxxxxxx.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
其中xxxxxxxxxx.xml是Spring設定檔的位置及名稱
若有多個時用逗點分開
如果沒有設定Spring的設定檔的話,那預設會抓applicationContext.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"
version="2.5″>
<display-name>test222222</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<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>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
設置Spring的設定檔
在web.xml中只有設定<param-value>classpath:applicationContext.xml</param-value>這一個
所以我接下來在src底下建立一個applicationContext.xml
在裡面先加入
<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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd “>
</beans>
然後接下來要把Struts2納入Spring的控管之下
所以要再加入一行
<bean id=”xxxxxx” class=”xxxxx.xxxx”></bean>
id隨便取,class是指要指定的class檔
<?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:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd “>
<bean id="indexAction" class="action.IndexAction"></bean>
</beans>
接著再把Struts.xml打開
將原本action class的名稱 改成在Spring設定檔中的bean id的名稱
例如原本我是<action name=”index” class=”action.IndexAction” method=”index”>
改為我剛剛在Spring設定檔中的bean id 的indexAction

然後一樣將專案放到tomcat上面
一樣再網址列打上http://localhost:8080/xxxxxx/index.action
xxxxxxx為專案名稱
加上mybatis
讓專案的架構變成Struts2 + Spring+mybatis
配置mybatis所需要的jar在mybatis資料夾裡面
- mybatis-3.3.0-SNAPSHOT.jar
- mybatis-spring-1.2.2.jar
- mysql-connector-java-5.1.22-bin.jar
一樣將這些jar檔直接複製到WebContent\WEB-INF\lib裡面去
記得重新整理你的專案
接著我們先在mysql上面建一張測試用的table
CREATE TABLE user
(
id int(11) NOT NULL AUTO_INCREMENT,
username varchar(20) NOT NULL,
password varchar(20) NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
然後再加入一筆資料
INSERT INTO user VALUES (’1′, ‘admin’, ‘admin’);
在src建一個vo package然後在裡面建一個User.java
這裡面對應到sql裡面的user這張table
package vo;
public class User {
private int id;
private String username;
private String password;
public User(){}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
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;
}
public String toString(){
return “User [id = "+ id +" , username = "+ username +"]" + " , password = “+ password;
}
}
再建一個dao package 裡面再建一個UserMapper.java
定義了新增 修改 刪除 查詢這四個方法
package dao;
import vo.User;
public interface UserMapper {
public User selectUser(User user);
public void insertUser(User user);
public void updateUser(User user);
public void deleteUser(int userId);
}
然後再另外建一個mybatis package 裡面再建一個UserMapper.xml
其中namespace指定到我們剛剛建的class
而select,insert,update,delete的id必須跟UserMapper.java裡面的方法同名
因為我們寫了public User selectUser(User user);
所以我們selectUser這裡的parameterType就是vo.User
resultType則是輸出型態
中間則是SQL語法
<?xml version="1.0″ encoding="UTF-8″?>
<!DOCTYPE mapper PUBLIC “-//mybatis.org//DTD Mapper 3.0//EN"
“http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="dao.UserMapper">
<select id="selectUser" parameterType="vo.User" resultType="vo.User">
SELECT * FROM user WHERE username=#{username}
</select>
<insert id="insertUser" parameterType="vo.User" flushCache="true">
INSERT INTO user (username,password) VALUES (#{username},#{password})
</insert>
<update id="updateUser" parameterType="vo.User">
UPDATE user SET username=#{username},password=#{password} WHERE id=#{id}
</update>
<delete id="deleteUser" parameterType="int">
DELETE FROM user WHERE id=#{id}
</delete>
</mapper>
然後在src建立一個mybatis的設定檔 mybatis-config.xml
由於數據部分交給spring所以只需要設定剛剛的UserMapper.xml的位置就好
<?xml version="1.0″ encoding="UTF-8″?>
<!DOCTYPE configuration PUBLIC
“-//mybatis.org//DTD Config 3.0//EN"
“http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="mybatis/UserMapper.xml"/>
</mappers>
</configuration>
然後再回去修改Spring的設定檔applicationContext.xml
整合Spring和mybatis
加上
<bean id="jdbcDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName">
<value>org.gjt.mm.mysql.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8</value>
</property>
<property name="username">
<value>root</value>
</property>
<property name="password">
<value>root</value>
</property>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="jdbcDataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml"></property>
</bean>
<bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
<property name="mapperInterface" value="dao.UserMapper"></property>
<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>
</bean>
然後在原本的<bean id=”indexAction” class=”action.IndexAction”>加入參數
<property name=”userMapper” ref=”userMapper” />
其中sqlSessionFactory和userMapper所需要的class檔在mybatis-spring-1.2.2.jar裡
先回去strust2增加新增 修改 刪除 查詢的action
Name=* 代表說你填的action名 之後method={1} 會代表你填的action
例如我有個action 叫做select 他就會去找有沒有select這個方法
如果沒有這個方法就會報錯
<action name=”*” class=”indexAction” method=”{1}”>
<result name=”success”>/Home/test2.jsp</result>
<result name=”fail”>/Home/test.jsp</result>
</action>
如果不這樣打的話就要設定四個action

然後回去indexAction增加一下那四個方法
package action;
import com.opensymphony.xwork2.ActionSupport;
import vo.User;
import dao.UserMapper;
import org.apache.struts2.interceptor.ServletRequestAware;
import javax.servlet.http.HttpServletRequest;
public class indexAction extends ActionSupport implements ServletRequestAware{
private String user;
private String password;
private String id;
HttpServletRequest request = null;
private UserMapper userMapper;
public String index(){
return “success";
}
public String select(){
String result = “fail";
try{
User u=new User();
u.setUsername(user);
request.setAttribute(“result", userMapper.selectUser(u));
result = “success";
}catch(Exception e){
result = “fail";
}
return result;
}
public String insert(){
String result = “fail";
try{
User u=new User();
u.setUsername(user);
u.setPassword(password);
userMapper.insertUser(u);
result = “success";
}catch(Exception e){
result = “fail";
}
return result;
}
public String update(){
String result = “fail";
try{
User u=new User();
u.setId(Integer.parseInt(id));
u.setUsername(user);
u.setPassword(password);
userMapper.updateUser(u);
result = “success";
}catch(Exception e){
result = “fail";
}
return result;
}
public String delete(){
String result = “fail";
try{
userMapper.deleteUser(Integer.parseInt(id));
result = “success";
}catch(Exception e){
result = “fail";
}
return result;
}
@Override
public void setServletRequest(HttpServletRequest request) {
this.request = request;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public UserMapper getUserMapper() {
return userMapper;
}
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
}
然後修改一下test.jsp

在body中加入這些
<form action="select" method="post">
帳號:<input name="user" type="text" value=""/>
<input type="submit" value="查詢" />
</form>
<br>
<br>
<form action="insert" method="post">
帳號:<input name="user" type="text" value=""/>
密碼:<input name="password" type="text" value=""/>
<input type="submit" value="新增" />
</form>
<br>
<br>
<form action="update" method="post">
編號:<input name="id" type="text" value=""/>
帳號:<input name="user" type="text" value=""/>
密碼:<input name="password" type="text" value=""/>
<input type="submit" value="修改" />
</form>
<br>
<br>
<form action="delete" method="post">
編號:<input name="id" type="text" value=""/>
<input type="submit" value="刪除" />
</form>
然後在Home下新增一張test2.jsp當結果頁
在body中加入這句
${result}
就可以測試了