一次成功的Struts2尝试

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

先看结构图


一次成功的Struts2尝试_第1张图片
结构图

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" %>


    简易留言板


    
<%--
这里就和servlet类不同了 这里直接使用了标签类 而而没有使用 input按钮
他把table中收集到的信息送到 用 MainAction类实现的main里面去
--%>
        
用户登陆
用户名:
密  码
如果没有注册单机这里注册!
/*
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"%>


    留言板信息



    
    
        user is null
    
    
        user not null
    
    , 你好!欢迎登录留言板.



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

 
 , 你好!欢迎登录留言板.

给我报了 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也被证明没错
呃 然后 我细细想了一下 原来多加了一个空格
我原本写的是

 

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

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


一次成功的Struts2尝试_第2张图片
image.png
一次成功的Struts2尝试_第3张图片
image.png

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

你可能感兴趣的:(一次成功的Struts2尝试)