美文网首页
一次成功的Struts2尝试

一次成功的Struts2尝试

作者: 12Dong | 来源:发表于2018-02-01 20:16 被阅读0次

今天 下午试了一下午 总算在排除一些错误 之后 总算成功了
这次同样是 基于之前的那个留言板项目 只不过 把控制流程的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有问题

相关文章

  • 一次成功的Struts2尝试

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

  • 一次成功的尝试

    “咚"我倒在地上。我现在变得伤痕累累。“我不学了,”我决定到。

  • 一次成功的尝试

    “咚"我累倒在地上。经过几次失败的尝试,我现在变得伤痕累累。“我不学了,”我突然决定到。

  • 一次成功的尝试

    我又开始骑了起來。两次失败已经让我伤痕累累、疲倦不堪了,汗水从我头上一滴一滴滚下来了,遮住了我的视线。

  • 一次成功的尝试

    我喜欢自行车,爸爸看我那么喜欢,就给我买了一辆,并/让我自己尝试着去学习,在尝试中长大。

  • 一次成功的尝试

    人生中有许多次尝试,有的是成功,有的是失败…它们就像五彩的石头,在我的心中铺起一条五彩缤纷的小路。但让我难以忘怀的...

  • 一次成功的尝试

    我坐上自行车,双脚使劲蹬'脚蹬。不好,我没有掌握住中心,题摔了一个大马趴。

  • 一次成功的尝试

    “我会骑自行车了”我骄傲的喊到。由于骄傲使我大意,没有看清前面的大石头。“咚”,一声,我撞到了大石头上。

  • 一次成功的尝试

    “好痛呀”我自言自语道。随后,我连滚带爬站了起来,拍拍身上的土,扶起了自行车,要战胜困难。

  • 一次成功的尝试

    改:我挑选了一个阳光明媚的一天,在我家南边的一个操场上学骑自行车。我坐上自行车,准备好第一次“成功”的尝试。

网友评论

      本文标题:一次成功的Struts2尝试

      本文链接:https://www.haomeiwen.com/subject/xfrjzxtx.html