一次成功的Struts2尝试

今天 下午试了一下午 总算在排除一些错误 之后 总算成功了
这次同样是 基于之前的那个留言板项目 只不过 把控制流程的servlet 换成由struts支配的java类

先看结构图


结构图

action 是 struts实现的java 类 用来控制流程
jdbc 如字面意思 是 jdbc操控类
model.vo是用来记录信息的类 在这次项目中 lyTable没有用到
struts.xml 是用来配置struts类的 就像servlet里的web.xml配置servlet类一样
web用来存放jsp

jdbc 和 model.vo中的类与error.jsp 与之前一样 便不细说了

下面 同样 从进入的页面开始一个一个分析

login.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
  Struts标签类 要使用标签类的话 必须加着行
--%>
<%@ page contentType="text/html;charset=gb2312" language="java" %>
<html>
<head>
    <title>简易留言板</title>
</head>
<body>
    <s:form action="main" method="post" theme="simple">
<%--
这里就和servlet类不同了 这里直接使用了标签类 而而没有使用 input按钮
他把table中收集到的信息送到 用 MainAction类实现的main里面去
--%>
        <table>
            <caption>用户登陆</caption>
            <tr>
                <td>用户名:<s:textfield name="user.username" size="20"/></td>
            </tr>
            <tr>
                <td>密&nbsp;&nbsp;码<s:password name="user.password" size="21"/></td>
            </tr>
            <tr>
                <td>
                    <s:submit value="登录"/>
                    <s:reset value="重置"/>
                </td>
            </tr>
        </table>
    </s:form>
    如果没有注册单机<a href="">这里</a>注册!
</body>
</html>

/*
MainAction.java
用来控制程序流程 也叫控制器 处理深层业务逻辑
*/
package org.easybooks.test.action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.*;
import org.easybooks.test.jdbc.SqlSrvDBConn;
import org.easybooks.test.model.vo.*;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;

public class MainAction extends ActionSupport {
    private UserTable user;

    public String execute() throws Exception {
        String username = user.getUsername();
        String password = user.getPassword();
        boolean validated = false;
        SqlSrvDBConn sqlSrvDBConn = new SqlSrvDBConn();
        ActionContext context = ActionContext.getContext();
        Map session = context.getSession(); //获得会话对象 用来保存当前登录用户的信息
        UserTable user1 = null;
        //先获得UserTable对象 如果是第一次访问该页 用户对象 肯定为空 但是 如果是 第二次甚至
        // 第三次 就直接登录 主页 而无须 再次验证用户的信息
        // 同 talkboard 原因 只是 实现方法不同 servlet 和 jsp
        // servlet 是 Httpsession session = request.getSession();
        user1 = (UserTable) session.get("user"); // servlet 是 getAttribut()
        if (user1 == null) {
            //查询 userTable 表中 的记录
            String sql = "select * from usertable";
            ResultSet rs = sqlSrvDBConn.executeQuery(sql);
            try {
                while (rs.next()) {
                    if (rs.getString("username").trim().compareTo(username) == 0 &&
                            rs.getString("password").trim().compareTo(password) == 0) {
                        user1 = new UserTable();// 创建持久化 的 JavaBean对象
                        user1.setId(rs.getInt("id"));
                        user1.setUsername(rs.getString("username"));
                        user1.setPassword(rs.getString("password"));
                        session.put("user", user1); // servlet session.setAttribute()
                        if(session.get("user")==null)System.out.println("The error is null ");
                        else System.out.println("There is not error");
                        validated = true;
                    }
                }
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            sqlSrvDBConn.closeStmt();
            sqlSrvDBConn.closeConn();
        } else {
            validated = true;
        }
        if (validated) {
            return "success";
        } else {
            return "error";
        }
    }

    public UserTable getUser() {
        return user;
    }

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

这里比原本的MainServlet类多了 getter()和setter()方法 原因是待会使用标签类从session调UserTable类的时候 默认是 使用getter()函数 调 如果将getter()函数去除
刚刚login.jsp中的 textfield 和 password两个地方

user.username
user.password

就会报红

<%--
main.jsp
登陆成功后 显示信息页面
--%>
<%@ page contentType="text/html;charset=gb2312" language="java" %>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
    <title>留言板信息</title>
</head>
<body>

    <s:set name="user" value="#session['user']"/>
    <s:if test='user==null'>
        user is null
    </s:if>
    <s:else>
        user not null
    </s:else>
    <s:property value="#user.username"/>, 你好!欢迎登录留言板.
</body>
</html>

呃 其实这里 就是 我今天大概调试了 两个小时的地方
一开始 在

 <s:set name="user" value="#session['user']"/>
 <s:property value="#user.username"/>, 你好!欢迎登录留言板.

给我报了 warning 我一想 报了就报了 反正只是warning而已 然后就炸了
没有将session中的属性调出来

然后debug根据 报的错误信息

empty tag doesn‘t work in some browers

想了一下 大概是 没有找到 标签库 然后 加了

<%@ taglib prefix="s" uri="/struts-tags"%>

依旧 报warning 试了一下依然错
然后 一步步 debug 既然是 empty 那么 可能 这个属性为空 那我再 action放进去之后 又测了一遍 成功 证明 不是 action的问题 那么就可能是 struts.xml 和 main.jsp的问题
接着 测试了 大概半个小时 查了不少资料 struts.xml也被证明没错
呃 然后 我细细想了一下 原来多加了一个空格
我原本写的是

 <s :set name="user" value="#session['user']"/>

呃 比较难过 下次注意... ...

展示一下结构 基本上和 原本 留言板的页面差不多


image.png
image.png

user not null 是我测试 究竟是 从session调UserTable有问题 还是从UserTable里调username有问题

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容