初识Struts

感觉学习代码这个东西,就是不停的模仿,重复,模仿,重复,直到不用看别人的代码也可以写出项目了,就是出师的时候了,没事做做复习,复习一下平时学习的东西,以防忘记了。
最近老师带着我们认识了一下struts框架,说是当前最流行的框架,下面就来复习,复习。(学习项目下载链接:http://pan.baidu.com/s/1c0B6Tw8
Struts的方便之处在于简单易懂,方便使用,特别在MVC模式下。

下面就进入复习的内容了:
首先在Oracle数据库中创建一个用户信息表(UserInfo):

create table user_info
(
    userid varchar2(30) primary key,
    username varchar2(50) not null,
    passwd varchar2(30) default '123456' not null,
    priv varchar2(30) default 'common' not null check(priv in('director','common')),  权限
    login_time timestamp default systimestamp not null,  登录时间
    logout_time timestamp default systimestamp not null,  退出时间
    login_host varchar2(30) default '127.0.0.1' not null 用户地址
);

用我们老师的话说,创建表的约束条件越多越好。
创建一个jspreview项目,建立model包(com.edu.model),相应的创建一个UserInfo.Class,对应数据库中的表,这里就不贴代码了,链接上面有。接下来就是对应的Dao包(com.edu.dao)了,创建一个类UserInfoDao.Class,差不多就是一个实现类吧,就是对数据库的一些操作,增删查改等等。

public class UserInfoDao {

    // 用户添加
    public Integer insertOne(UserInfo user){
        String sql = "insert into user_info(userid,username,priv) values(?,?,?)";
        Object[] params = new Object[]{user.getUserid(),user.getUsername(),user.getPriv()};
        return DBHelper.executeUpdate(sql, params);
    }

    //用户登录
    public UserInfo getLoginUser(UserInfo user){
        String sql = "update user_info set login_time=systimestamp,login_host=? where userid=? and passwd=?";
        Object[] params = new Object[]{user.getLoginHost(),user.getUserid(),user.getPasswd()};
        int ret = DBHelper.executeUpdate(sql, params);
        if (ret == 0) {
            return null;
        }
        sql = "select * from user_info where userid=? and passwd=?";
        params = new Object[]{user.getUserid(),user.getPasswd()};
        return DBHelper.getOne(sql, params, UserInfo.class);
    }
    //修改密码
    public Integer updatePasswd(UserInfo user){
        String sql = "update user_info set passwd=? where userid=?";
        Object[] params = new Object[]{user.getPasswd(),user.getUserid()};
        return DBHelper.executeUpdate(sql, params);
    }
    //退出登录
    public Integer userLogout(UserInfo user){
        String sql = "update user_info set logout_time=systimestamp where userid=?";
        System.out.println(user);
        Object[] params = new Object[]{user.getUserid()};
        return DBHelper.executeUpdate(sql, params);
    }
    //获得所有用户
    public List<UserInfo> getAll(){
        return DBHelper.getList("select * from user_info", UserInfo.class);
    }
}

写完这个类最好创建一个Test包(com.edu.test),免得后面出错脑袋容易成浆糊,这里测试通过,至少说明对数据库的操作没有问题。如下:

public class UserInfoDaoTest {
    private UserInfoDao dao = new UserInfoDao();

    @Test
    public void getAllTest()
    {
        System.out.println(dao.getAll());
    }
}

这里打Test标签,就可以使用JUnit Test测试啦!
注意!重点来了,要进行Struts的配置了:
1.web.xml的配置:

 <!-- Struts2的全局过滤器 -->
     <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>

个人理解的意思就是那些页面要使用Struts来进行处理,我这里选的是全部(/*)。
2.在src目录下创建一个struts.xml的xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
    "http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
    <!-- 请求映射,以及结果映射 -->
    <!-- 配置所有指向/userinfo/xxx.action的请求 -->
    <package name="userinfo" namespace="/userinfo" extends="struts-default">
        <action name="useradd" class="com.edu.action.UserInfoAction" method="userAdd">
            <result name="success">/userinfo/addok.jsp</result>
        </action>
    </package>
</struts>

Action标签中,name是jsp那边指定的Action名称,class是要执行方法所在的类名(要求全名哦),method指的是方法名,千万不要敲错了。

还有就是导入架构包,应该不会出错了。
下面就进行测试了:
创建一个Action包(com.edu.action),创建一个LoginAction继承自ActionSupport:

public class UserInfoAction extends ActionSupport{

    private UserInfo user;

    private UserInfoDao dao = new UserInfoDao();

    // 用户添加
    public String userAdd(){
        dao.insertOne(user);
        return "success";// 这里的success会返回到struts.xml中的result标签上面
    }

    public UserInfo getUser() {
        return user;
    }

    public void setUser(UserInfo user) {
        this.user = user;
    }
}

页面上的代码就不详细解释了,注意一点不要写错标签中的Action就行了,还有就是页面上的标签信息会直接传到Action中,不用像Servlet中那样GetAttribute直接就从页面中传过来了,例如:用户名标签<tr><td>用户ID:</td><td><input type="text" name="user.userid"></td></tr>只要这里的name能对应上,Action中的user就有值。
好了,复习就到这里吧,有什么错误希望大神指出来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值