摘自于百度百科的一段话,仅供参考:
Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
struts2的核心组成部分应该是属于他的拦截器了,客户端发送的请求都是需要经过处理器进行处理,其默认的拦截器主要有19个,本文中不讲述拦截器,主要是一个入门demo
下面来看一看demo(版本为struts-2.5.13),如图,创建一个web工程,名称为struts2_001,项目的目录结构是图中结构:
接下来,引入jar包:
下载地址: 提取码: 9gmt
开始创建测试用表,这里是test数据库里的user表,创表脚本如下:
CREATE TABLE `test`.`user` ( `u_id` INT NOT NULL AUTO_INCREMENT, `u_name` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL, `u_pwd` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL, `u_age` INT NOT NULL, `u_address` VARCHAR(45) CHARACTER SET 'utf8' COLLATE 'utf8_bin' NOT NULL, PRIMARY KEY (`u_id`))ENGINE = InnoDBDEFAULT CHARACTER SET = utf8COLLATE = utf8_bin;INSERT INTO `test`.`user` (`u_name`, `u_pwd`, `u_age`, `u_address`) VALUES ('test1', 'test1', '20', '广东省深圳市');INSERT INTO `test`.`user` (`u_name`, `u_pwd`, `u_age`, `u_address`) VALUES ('test2', 'test2', '30', '江西省南昌市');
编写实体类模型,User.java:
package com.advance.model;public class User { private Integer uId; private String uName; private String uPwd; private Integer uAge; private String uAddress; public Integer getuId() { return uId; } public void setuId(Integer uId) { this.uId = uId; } public String getuName() { return uName; } public void setuName(String uName) { this.uName = uName; } public String getuPwd() { return uPwd; } public void setuPwd(String uPwd) { this.uPwd = uPwd; } public Integer getuAge() { return uAge; } public void setuAge(Integer uAge) { this.uAge = uAge; } public String getuAddress() { return uAddress; } public void setuAddress(String uAddress) { this.uAddress = uAddress; }}
数据库工具类,主要是jdbc连接mysql数据库。DbUtil.java:
package com.advance.util;import java.sql.Connection;import java.sql.DriverManager;public class DbUtil { private static final String className = "com.mysql.jdbc.Driver"; private static final String url = "jdbc:mysql://localhost:3306/test"; private static final String name = "root"; private static final String pwd = "123456"; static{ try{ Class.forName(className); }catch (Exception e){ e.printStackTrace(); } } public static Connection getConnection(){ Connection conn = null; try{ conn = DriverManager.getConnection(url,name,pwd); }catch (Exception e){ e.printStackTrace(); } return conn; }}
dao类,用来与数据库交互,UserDao.java:
package com.advance.dao;import com.advance.util.DbUtil;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;public class UserDao { public boolean doLogin(String name,String pwd)throws Exception{ boolean flag = false; String sql = "select * from user where u_name=? and u_pwd=?"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; try{ conn = DbUtil.getConnection(); ps = conn.prepareStatement(sql); ps.setString(1,name); ps.setString(2,pwd); rs = ps.executeQuery(); if(rs.next()){ flag = true; } }catch (Exception e){ e.printStackTrace(); }finally { //别忘了关闭资源,后打开的先关闭 if(rs!=null){ rs.close(); } if(ps!=null){ ps.close(); } if(conn!=null){ conn.close(); } } return flag; }}
下一步,在web.xml中配置struts2,内容如下:
struts-prepare org.apache.struts2.dispatcher.filter.StrutsPrepareFilter struts-execute org.apache.struts2.dispatcher.filter.StrutsExecuteFilter struts-prepare /* struts-execute /*
接下来编写你的action类,这里是DemoAction.java:
package com.advance.action;import com.advance.dao.UserDao;import com.opensymphony.xwork2.ActionSupport;public class DemoAction extends ActionSupport{ private UserDao userDao = new UserDao(); //参数 private String userName; private String userPwd; 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 doLogin()throws Exception{ if(userDao.doLogin(userName,userPwd)){ return "loginSuccess"; }else{ return "loginErr"; } }}
这里接受参数的方法是set方法,主要是由struts2的拦截器完成这部分功能。
get方法:传值到界面;
set方法:接收界面的值。
接下来是最重要的一步,struts2.xml文件,直接放置在src目录下。
/index.jsp /login.jsp
这是一个最简单的配置文件,内容很简单,主要部分就是package中的内容,它里面包含了多action。先讲一下package的几个属性:
name:也就是你的package名称,这个没有什么好说的
namespace:定义package命名空间 ,会影响你的访问路径,例如/advance那么访问是的地址为http://localhost:8080/struts2_001/advance/login
extends:也就是package继承的父类的名称,
再看看action的配置:
name:就是指你的请求名称,这里是login,在前台请求就是这个加上你的路径后缀啦(这里后缀没有,所以前台请求就是login)
class:定义你的action类的全路径,下面的method将会从这里面定义的类中寻找,
method:在一个action中,继承了ActionSupport之后,默认的入口方法是execute,如果需要自定义,那就需要配置这个method,也就是说你请求的那个name最终会进入这个method定义的方法
还有是result的配置了:
name:这个name对应的是action方法中的返回值,决定你的方法执行完之后跳向何处
type:result类型 不写则选用superpackage的type struts-default.xml中的默认为dispatcher
result标签中的配置(如login.jsp):这里是定义跳向哪里。
前端界面:
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>login Struts2 Login Demo
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>index Struts2 Login Demo
账号:${userName}
密码:${userPwd}
OK,上述步骤完成之后,就可以做一个小测试啦:
在浏览器中输入地址:http://localhost:8080/struts2_001/login
输入测试用账号:test1 密码test1,点击登录:
OK,到这里demo就做完了。
源码下载地址: 提取码:zx5q