博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javaweb成长之路:struts2的探索(一)
阅读量:5992 次
发布时间:2019-06-20

本文共 6596 字,大约阅读时间需要 21 分钟。


 

 

摘自于百度百科的一段话,仅供参考:

     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

转载于:https://www.cnblogs.com/advanceBlog/p/7860348.html

你可能感兴趣的文章
大话IT第十九期:戴尔收购对象大猜想
查看>>
《百万巨鳄》特效揭密
查看>>
C# 基础知识系列文章索引
查看>>
虚机不能启动的特例思考
查看>>
25岁毕业,拿一万块钱月薪
查看>>
VMware View桌面虚拟化之3D应用也虚拟
查看>>
SCOM2012部署系列之二:先决条件准备
查看>>
python写的FTP简单上传下载文件
查看>>
让你的iPad变身为随身网络状况测试利器
查看>>
集中管理:领导者,不能不考虑的几件事之—— 拿什么辅助你,我的决策?(一)...
查看>>
SCCM 2007系列2 安装部署
查看>>
垂直和细分不一定是电子商务的未来
查看>>
技术向销售学什么(三)
查看>>
Exchange Server 2013部署先决条件准备
查看>>
C#设计模式(10)——组合模式(Composite Pattern)
查看>>
保留yum安装软件后的RPM包小知识点
查看>>
高性能集群软件Keepalived之安装配置篇
查看>>
GreenPlum数据库故障恢复测试
查看>>
《Linux设备驱动开发详解》第3版现隆重征求读者创作意见
查看>>
计算机加入到域的注意事项
查看>>