一次成功的Struts2嘗試

今天 下午試了一下午 總算在排除一些錯(cuò)誤 之后 總算成功了
這次同樣是 基于之前的那個(gè)留言板項(xiàng)目 只不過 把控制流程的servlet 換成由struts支配的java類

先看結(jié)構(gòu)圖


結(jié)構(gòu)圖

action 是 struts實(shí)現(xiàn)的java 類 用來控制流程
jdbc 如字面意思 是 jdbc操控類
model.vo是用來記錄信息的類 在這次項(xiàng)目中 lyTable沒有用到
struts.xml 是用來配置struts類的 就像servlet里的web.xml配置servlet類一樣
web用來存放jsp

jdbc 和 model.vo中的類與error.jsp 與之前一樣 便不細(xì)說了

下面 同樣 從進(jìn)入的頁面開始一個(gè)一個(gè)分析

login.jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<%--
  Struts標(biāo)簽類 要使用標(biāo)簽類的話 必須加著行
--%>
<%@ page contentType="text/html;charset=gb2312" language="java" %>
<html>
<head>
    <title>簡易留言板</title>
</head>
<body>
    <s:form action="main" method="post" theme="simple">
<%--
這里就和servlet類不同了 這里直接使用了標(biāo)簽類 而而沒有使用 input按鈕
他把table中收集到的信息送到 用 MainAction類實(shí)現(xiàn)的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>
    如果沒有注冊(cè)單機(jī)<a href="">這里</a>注冊(cè)!
</body>
</html>

/*
MainAction.java
用來控制程序流程 也叫控制器 處理深層業(yè)務(wù)邏輯
*/
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(); //獲得會(huì)話對(duì)象 用來保存當(dāng)前登錄用戶的信息
        UserTable user1 = null;
        //先獲得UserTable對(duì)象 如果是第一次訪問該頁 用戶對(duì)象 肯定為空 但是 如果是 第二次甚至
        // 第三次 就直接登錄 主頁 而無須 再次驗(yàn)證用戶的信息
        // 同 talkboard 原因 只是 實(shí)現(xiàn)方法不同 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();// 創(chuàng)建持久化 的 JavaBean對(duì)象
                        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()方法 原因是待會(huì)使用標(biāo)簽類從session調(diào)UserTable類的時(shí)候 默認(rèn)是 使用getter()函數(shù) 調(diào) 如果將getter()函數(shù)去除
剛剛login.jsp中的 textfield 和 password兩個(gè)地方

user.username
user.password

就會(huì)報(bào)紅

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

呃 其實(shí)這里 就是 我今天大概調(diào)試了 兩個(gè)小時(shí)的地方
一開始 在

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

給我報(bào)了 warning 我一想 報(bào)了就報(bào)了 反正只是warning而已 然后就炸了
沒有將session中的屬性調(diào)出來

然后debug根據(jù) 報(bào)的錯(cuò)誤信息

empty tag doesn‘t work in some browers

想了一下 大概是 沒有找到 標(biāo)簽庫 然后 加了

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

依舊 報(bào)warning 試了一下依然錯(cuò)
然后 一步步 debug 既然是 empty 那么 可能 這個(gè)屬性為空 那我再 action放進(jìn)去之后 又測了一遍 成功 證明 不是 action的問題 那么就可能是 struts.xml 和 main.jsp的問題
接著 測試了 大概半個(gè)小時(shí) 查了不少資料 struts.xml也被證明沒錯(cuò)
呃 然后 我細(xì)細(xì)想了一下 原來多加了一個(gè)空格
我原本寫的是

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

呃 比較難過 下次注意... ...

展示一下結(jié)構(gòu) 基本上和 原本 留言板的頁面差不多


image.png
image.png

user not null 是我測試 究竟是 從session調(diào)UserTable有問題 還是從UserTable里調(diào)username有問題

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,897評(píng)論 18 399
  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,039評(píng)論 0 11
  • spring mvc 工作機(jī)制(原理): DispatcherServlet主要用作職責(zé)調(diào)度工作,本身主要用于控制...
    java大濕兄閱讀 1,987評(píng)論 5 24
  • 《不要為了效率而忽略關(guān)系》劉友龍,持續(xù)原創(chuàng)分享第885天。 親子教育中有不少的家長,為了孩子更快的成長,為...
    無為wyw閱讀 181評(píng)論 0 0
  • 在有跡可循的有限生活里,好奇固執(zhí)如我,讀過很多虛構(gòu)的故事,聽過很多真實(shí)的人生,經(jīng)歷過一些挫折,明白了一些道理,也因...
    夏蘇末閱讀 3,327評(píng)論 10 55

友情鏈接更多精彩內(nèi)容