1. 程式人生 > >Struts2學習(二)---一個struts2的登陸例子

Struts2學習(二)---一個struts2的登陸例子

struts2作為一個很成熟的mvc框架,經久不衰,雖然有下降趨勢,但是很多公司還是沿用struts2作為mvc框架,接下來就先來完成一個struts2的一個登陸例子,只為了解流程和基本原理。

一:概述
Struts2的核心是一個Filter,Action可以脫離web容器,那麼是什麼讓http請求和action關聯在一起的,下面我們深入原始碼來分析下Struts2是如何工作的。

FilterDispatcher API 寫道

Deprecated. Since Struts 2.1.3, use StrutsPrepareAndExecuteFilter
instead or StrutsPrepareFilter and StrutsExecuteFilter if needing
using the ActionContextCleanUp filter in addition to this one

ps:這裡附上我看的博文http://www.iteye.com/topic/829843,博主也是寫的賊好,在我的理解,StrutsPrepareAndExecuteFilter,struts2核心就是Filter,StrutsPrepareAndExecuteFilter的主要作用就是完成基礎的filter引數配置(如我們在web.xml中配置的filter的初始化引數),解析struts相關的default.properties,struts-default.xml,struts-plugin.xml,struts.xml等等,解析完就會有ActionMapping之類的,匹配請求,重點是建立上下文ActionContext(存session,request,application之類的),之後有請求來的時候就會把請求匹配ActionMapping。

二:實現
這裡我就不傳github了,給個專案結構圖吧
這裡寫圖片描述

1.鑑於常規情況官方推薦使用StrutsPrepareAndExecuteFilter替代FilterDispatcher,我們此文將剖析StrutsPrepareAndExecuteFilter,其在工程中作為一個Filter配置在web.xml中,配置如下:

<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>*.action</url-pattern> </filter-mapping>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.nsu</groupId>
    <artifactId>ClassStudyStruts2_01</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>


    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.struts/struts2-core -->
        <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-core</artifactId>
            <version>2.3.28</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-logging/commons-logging -->
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.23</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.struts.xwork/xwork-core -->
        <dependency>
            <groupId>org.apache.struts.xwork</groupId>
            <artifactId>xwork-core</artifactId>
            <version>2.3.28</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/ognl/ognl -->
        <dependency>
            <groupId>ognl</groupId>
            <artifactId>ognl</artifactId>
            <version>3.1.14</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/jstl/jstl -->
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>


    </dependencies>

</project>

3.login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <c:if test="${errorMessage !=null}">${errorMessage }</c:if>
    <form action="login.action">
        <input type="text" name="username" value="" />
        <input type="password" name="password" value="" />
        <button type="submit">登陸</button>
    </form>
</body>
</html>

4.index.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    index
    ${username }
</body>
</html>

4.struts.xml(前面懶得找那個dtd規範檔案頭的,在專案的Libirary裡面Maven Dependencies裡面struts-core-2.3.28.jar裡面,有struts-default.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>

    <package name="gzr" namespace="/" extends="struts-default">
        <action name="login" class="com.nsu.edu.action.UserAction">
            <result name="ok">/index.jsp</result>
            <result name="fail">/login.jsp</result>
        </action>
    </package>

</struts>

這裡的配置還是挺簡單的,name隨便起,namespace你如果寫個/xx,那你的login請求就應該是/xx/login.action才能請求過來,這裡的action標籤可以指定Action類的method,還有種寫法 action name=”user_*”,method=”{1}”,有興趣的可以去查查如果是user_registPage.action 呼叫方法為 registPage。

5.最後就是UserAction,不難,自己看吧。

package com.nsu.edu.action;

public class UserAction {

    String username;
    String password;
    String errorMessage;

    /**
     * 業務元件
     * @return
     */
    public String execute(){
        System.out.println(username+","+password);
        if("gzr".equals(username.trim())){
            if("Aa11223344".equals(password.trim())){
                return "ok";
            }
            else{
                errorMessage="使用者名稱對了,密碼錯了";
                return "fail";
            }
        }
        else{
            errorMessage="使用者名稱就錯了";
            return "fail";
        }
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getErrorMessage() {
        return errorMessage;
    }

    public void setErrorMessage(String errorMessage) {
        this.errorMessage = errorMessage;
    }


}

相關推薦

Struts2學習---一個struts2登陸例子

struts2作為一個很成熟的mvc框架,經久不衰,雖然有下降趨勢,但是很多公司還是沿用struts2作為mvc框架,接下來就先來完成一個struts2的一個登陸例子,只為了解流程和基本原理。 一:概述 Struts2的核心是一個Filter,Action可

《Kubernetes權威指南第2版》學習一個簡單的例子

stop 輸入 rtu gist 用戶名 server 遠程 dock netstat 1: 安裝VirtualBox, 並下載CentOS-7-x86_64-DVD-1708.iso, 安裝centOS7,具體過程可以百度。 2:開啟centOS的SSH, 步驟如下:

Struts2學習運行Action中方法的三種方式

tracking 利用 content con return -m i++ var itl 1.運行execute()方法 一般的能夠直接在action中書寫execute,調用action時會自己主動運行此方法 2.配置method方法 在s

Struts2學習———— 表單引數自動封裝和引數型別自動轉換

前篇文章對struts2的一個入門,重點是對struts2的架構圖有一個大概的瞭解即可,之後的幾篇文章,就是細化struts2,將struts2中的各種功能進行梳理,其實學完之後,對struts2的使用不外乎這幾點,引數自動封裝,攔截器的使用,資料校驗,ognl表達(值棧和actionContext的講解),

Struts2筆記Struts2的配置檔案

1、struts-default.xml 該檔案是Struts2框架的基本配置檔案,由框架自動載入。 作用:配置了bean,interceptor,result等 位置:org/apache/struts2/struts-default.xml 這個檔案我們需要關注一個地方 這裡定義

Struts2入門學習

Struts2的前身是Opensymphony的Webwork2,實際上Strut和Webwork2合併後形成Struts2。 3.建立控制類HelloWord package com.yyq.action; import com.opensymphon

SSH學習Struts2核心配置

原文來自搬磚工,如需轉載請註明出處 上一篇文章學習了Struts2入門,這篇文章學習Struts2的核心配置 一、struts-default.xml分析 1.struts-default.xml位於struts2-core-2.3.31.jar檔案下,一般來說都是stru

Struts2框架 Web.xml, Struts.xml, Action.Java 基本配置

str web.xml images ava img ima blog XML ges Struts2框架(二) Web.xml, Struts.xml, Action.Java 基本配置

Struts2 學習

jar文件 open cep pri javaee get value throw object 一、Struts 介紹 1、Struts2的概述 1、早期開發模型Servlet+JSP+JavaBean(Model2)顯得力不從心:   流程淩亂、數據傳遞無序、缺乏輔助功

Struts2學習

ade 定向 std lan nio sha symphony als ini struts-defualt.xml指定的result的類型 1、struts-defualt.xml 文件的 181 行 開始定義了: <result-types> &l

Struts2學習1

struts2概述 1.struts2框架應用javaee三層結構中web層框架。 2.strut2框架在struts1和webwork基礎之上發展全新的框架。 3.struts2解決的問題: 4.版本:struts2.3.24 5.web層常見框架 (1)struts2 (2)spring

Struts2學習2

1.結果嗯配置 (1)全域性結果頁面 (2)區域性結果頁面 (3)result標籤type屬性 2.在action獲取表單提交資料 (1)使用ActionContext類獲取 (2)使用ServletActionContext類獲取 (3)使用介面注入方式獲取 3.struts2提供獲取表單資

struts2學習4

Struts2攔截器概述 1 Struts2是框架,封裝了很多功能,struts2裡面封裝的概念都是在攔截器裡面 2 Struts2裡面封裝了很多的概念,有很多攔截器,不是每次這些攔截器都執行,每次執行預設的攔截器 3 Struts2裡面預設攔截器位置 攔截器示例程式碼: <i

struts2筆記action的配置

1. 在Struts.xml中配置一個預設的action則可以攔截處理一些意外的訪問。配置方法如下 <!-- 配置一個預設的Action,預設Action為default_action --> <default-action-ref name="default_

Struts2Struts2的封裝方法&其他介紹&注入方式詳解

1.2 相關知識點 1.2.1 Struts2的Servlet的API的訪問 在Struts2中,Action並沒有直接和Servlet API進行耦合,也就是說在Struts2的Action中不能直接訪問Servlet API。雖然Struts2中的Action訪問Servl

原生WebGL基礎學習 用WebGL繪製一個三角形

在開始之前,需要知道著色器的相關知識,可以參考:webgl介紹裡面的著色器介紹,本文的demo 用到的著色器為: <script id="vertex-shader" type="x-shader/x-vertex"> attribu

Struts2學習————Struts2入門

        首先推薦一本書,雖然我還沒看過,但是我以後肯定會看的,《Struts+技術內幕》提取密碼:kg6w 。現在只是停留在會使用struts2的層次,自己也想繼續深入研究,但是感覺自己的知識面還沒那麼廣,那就等以後工作之後,在回過頭來將那幾個框架研究一下,寫點有深度的文章,而此係列的文章,只是個人的

Struts2學習———— 檔案上傳和下載

一、單檔案上傳       在沒學struts2之前,我們要寫檔案上傳,非常麻煩,需要手動一步步去獲取表單中的各種屬性,然後在進行相應的處理,而在struts2中就不需要了,因為有一個fileUpload攔截器幫我們全做完了。我們只需要新增一點點資訊,就可以完成上傳的功能。         1、Actio

Struts2學習———— s標籤和國際化

一、s標籤     在struts-2.3.15.1/docs/WW/docs/tag-reference.html下,就有著struts2所有標籤的參考文獻,只能看看其中比較常用的標籤。其他的以後遇到了在看參考文獻即可。     通用標籤,control Tags 和 DataTags,下面用方框圈起來

Struts2學習———— ognl表示式、值棧、actionContext之間的關係

一、什麼是Ognl?       通過百度百科查詢到的解釋,其中詳細的說明了OGNL的作用。                  下面我們就對OGNL這5個作用進行講解       1、存取物件的任意屬性,簡單說就是對javabean進行操作(重要)       2、呼叫物件方法。       3、