初识Struts

来源:互联网 发布:女孩子湿有多夸张知乎 编辑:程序博客网 时间:2024/06/06 16:51

感觉学习代码这个东西,就是不停的模仿,重复,模仿,重复,直到不用看别人的代码也可以写出项目了,就是出师的时候了,没事做做复习,复习一下平时学习的东西,以防忘记了。
最近老师带着我们认识了一下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
原创粉丝点击