最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解Java的Struts框架中棧值和OGNL的使用

 更新時間:2015年11月26日 15:58:35   投稿:goldensun  
這篇文章主要介紹了Java的Struts框架中棧值和OGNL的使用,Struts框架是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下

值棧:
值棧是一個集合中的幾個對象保持下列對象提供的順序:

20151126155528201.png (590×348)

值??梢酝ㄟ^JSP,Velocity或者Freemarker的標(biāo)簽。有各種不同的標(biāo)簽在單獨的章節(jié)中,我們將學(xué)習(xí),用于獲取和設(shè)置Struts 2.0 的值棧。 ValueStack的對象里面可以得到動作如下:

ActionContext.getContext().getValueStack()
一旦擁有了值對象,就可以用下面的方法來操縱該對象:
20151126155550681.png (581×604)

OGNL:
對象圖形導(dǎo)航語言(OGNL)是一個功能強大的表達(dá)式語言是用來參考值棧上的數(shù)據(jù)和操縱。 OGNL也有助于在數(shù)據(jù)傳輸和類型轉(zhuǎn)換。

OGNL和JSP表達(dá)式語言很相似。 OGNL 基礎(chǔ)的理念是在 root或默認(rèn)的對象范圍內(nèi)。默認(rèn)或根對象的屬性,可以參考使用的標(biāo)記符號(井號)。

如前所述,OGNL是基于上下文和Struts的構(gòu)建ActionContext 使用OGNL映射。ActionContext中映射包括以下:

application - 應(yīng)用范圍的變量

session - 會話范圍的變量

root / value stack - 所有操作變量都保存在這里

request - 請求范圍的變量

parameters - 請求參數(shù)

atributes - 存儲的屬性頁面,請求,會話和應(yīng)用范圍

重要的是要明白,操作對象是始終可用值棧中的。所以,因此,如果動作對象的屬性x和y有隨時供使用。

在ActionContext中的對象被稱為使用井號的符號,但是,值棧中的對象可以被直接引用,例如,如果員工是一個動作類的屬性,那么就可以得到如下參考:

 <s:property value="name"/>

來代替

 <s:property value="#name"/>

如果會話中有一個屬性叫做“l(fā)ogin”,可以找回如下:

 <s:property value="#session.login"/>

OGNL還支持處理的集合 - 即映射,List和Set。例如,以顯示顏色的下拉列表,可以這樣做:

 <s:select name="color" list="{'red','yellow','green'}" />

本OGNL表達(dá)式是巧妙地的解釋 "red","yellow","green"為顏色,并此基礎(chǔ)上建立一個列表。

OGNL表達(dá)式將被廣泛使用時,在接下來的章節(jié)中,我們將研究不同的標(biāo)簽。因此,讓我們來看看它使用的一些例子在Form標(biāo)簽/標(biāo)簽/數(shù)據(jù)標(biāo)簽控制和Ajax標(biāo)簽。

ValueStack/OGNL 例子: 創(chuàng)建動作:
讓我們考慮以下動作類,當(dāng)我們訪問值棧,然后設(shè)置幾個鍵,我們將在視圖,即訪問使用OGNL,JSP頁面。

package com.yiibai.struts2;

import java.util.*; 

import com.opensymphony.xwork2.util.ValueStack;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport{
  private String name;

  public String execute() throws Exception {
   ValueStack stack = ActionContext.getContext().getValueStack();
   Map<String, Object> context = new HashMap<String, Object>();

   context.put("key1", new String("This is key1")); 
   context.put("key2", new String("This is key2"));
   stack.push(context);

   System.out.println("Size of the valueStack: " + stack.size());
   return "success";
  } 

  public String getName() {
   return name;
  }

  public void setName(String name) {
   this.name = name;
  }
}

其實,Struts 2的值棧的頂部增加了動作時執(zhí)行。所以,通常的方法是把東西值棧添加 getter/setter方法以使這些值在Action類,然后使用<s:property>標(biāo)簽來訪問值。以下是展示如何在struts ActionContext 中 ValueStack  工作。

創(chuàng)建視圖
讓我們創(chuàng)建以下JSP文件 helloWorld.jsp 的要 WebContent 文件夾。這個視圖將被顯示動作返回“success”:

<%@ page contentType="text/html; charset=UTF-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<title>Hello World</title>
</head>
<body>
  Entered value : <s:property value="name"/><br/>
  Value of key 1 : <s:property value="key1" /><br/>
  Value of key 2 : <s:property value="key2" /> <br/>
</body>
</html>

我們還需要創(chuàng)建的index.jsp在WebContent文件夾,其內(nèi)容如下:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
  <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Hello World</title>
</head>
<body>
  <h1>Hello World From Struts2</h1>
  <form action="hello">
   <label for="name">Please enter your name</label><br/>
   <input type="text" name="name"/>
   <input type="submit" value="Say Hello"/>
  </form>
</body>
</html>

配置文件
以下是struts.xml文件的內(nèi)容:

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
  "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
  "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
  <constant name="struts.devMode" value="true" />
  <package name="helloworld" extends="struts-default">

   <action name="hello" 
     class="com.yiibai.struts2.HelloWorldAction" 
     method="execute">
     <result name="success">/HelloWorld.jsp</result>
   </action>

  </package>
</struts>

以下是web.xml文件中的內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://java.sun.com/xml/ns/javaee" 
  xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
  http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
  id="WebApp_ID" version="3.0">
  
  <display-name>Struts 2</display-name>
  <welcome-file-list>
   <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <filter>
   <filter-name>struts2</filter-name>
   <filter-class>
     org.apache.struts2.dispatcher.FilterDispatcher
   </filter-class>
  </filter>

  <filter-mapping>
   <filter-name>struts2</filter-name>
   <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

右鍵點擊項目名稱,并單擊Export > WAR File創(chuàng)建一個WAR文件。然后將此WAR 部署在Tomcat 的 webapps目錄下。最后,啟動Tomcat服務(wù)器和嘗試訪問URL http://localhost:8080/HelloWorldStruts2/index.jsp。如以下畫面:

20151126155820122.jpg (560×285)

現(xiàn)在在給定的文本框中輸入任何單詞,然后點擊"Say Hello"按鈕執(zhí)行已定義的動作?,F(xiàn)在,如果檢查生成的日志,會發(fā)現(xiàn)下面的文本底部:

 
Size of the valueStack: 3

這將顯示以下畫面,這將顯示任何的值,將進(jìn)入值為key1和key2,我們已經(jīng)把它們放入 ValueStack。

相關(guān)文章

  • Java日常練習(xí)題,每天進(jìn)步一點點(28)

    Java日常練習(xí)題,每天進(jìn)步一點點(28)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 6種方法初始化JAVA中的list集合

    6種方法初始化JAVA中的list集合

    這篇文章主要介紹了6種方法初始化JAVA中的list集合,文中講解非常詳細(xì),代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • Java中的阻塞隊列BlockingQueue使用詳解

    Java中的阻塞隊列BlockingQueue使用詳解

    這篇文章主要介紹了Java中的阻塞隊列BlockingQueue使用詳解,阻塞隊列是一種線程安全的數(shù)據(jù)結(jié)構(gòu),用于在多線程環(huán)境下進(jìn)行數(shù)據(jù)交換,它提供了一種阻塞的機(jī)制,當(dāng)隊列為空時,消費者線程將被阻塞,直到隊列中有數(shù)據(jù)可供消費,需要的朋友可以參考下
    2023-10-10
  • 基于Java SSM的健康管理小程序的實現(xiàn)

    基于Java SSM的健康管理小程序的實現(xiàn)

    本篇文章主要為大家分享了基于SSM健康管理小程序的設(shè)計與實現(xiàn)。感興趣的小伙伴可以了解一下
    2021-11-11
  • 基于jdbc處理Clob的使用介紹

    基于jdbc處理Clob的使用介紹

    本篇文章是對jdbc處理Clob的使用進(jìn)行了分析介紹,需要的朋友參考下
    2013-05-05
  • Java Socket設(shè)置timeout的幾種常用方式說明

    Java Socket設(shè)置timeout的幾種常用方式說明

    這篇文章主要介紹了Java Socket設(shè)置timeout的幾種常用方式說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • RocketMQ生產(chǎn)者一個應(yīng)用不能發(fā)送多個NameServer消息解決

    RocketMQ生產(chǎn)者一個應(yīng)用不能發(fā)送多個NameServer消息解決

    這篇文章主要為大家介紹了RocketMQ生產(chǎn)者一個應(yīng)用不能發(fā)送多個NameServer消息原因及解決方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Spring Boot中捕獲異常錯誤信息并將其保存到數(shù)據(jù)庫中的操作方法

    Spring Boot中捕獲異常錯誤信息并將其保存到數(shù)據(jù)庫中的操作方法

    這篇文章主要介紹了Spring Boot中捕獲異常錯誤信息并將其保存到數(shù)據(jù)庫中的操作方法,通過實例代碼介紹了使用Spring Data JPA創(chuàng)建一個異常信息的存儲庫接口,以便將異常信息保存到數(shù)據(jù)庫,需要的朋友可以參考下
    2023-10-10
  • 又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用

    又又叕出BUG啦!理智分析Java NIO的ByteBuffer到底有多難用

    網(wǎng)絡(luò)數(shù)據(jù)的基本單位永遠(yuǎn)是byte,Java NIO提供ByteBuffer作為字節(jié)的容器,但該類過于復(fù)雜,有點難用.本篇文章就帶大家簡單了解一下 ,需要的朋友可以參考下
    2021-06-06
  • 完美解決PermGen space異常的問題

    完美解決PermGen space異常的問題

    這篇文章主要介紹了完美解決PermGen space異常的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01

最新評論

怀化市| 鄱阳县| 南充市| 松滋市| 德保县| 余庆县| 浦江县| 崇文区| 岚皋县| 齐河县| 枣强县| 治多县| 普陀区| 元朗区| 商水县| 石柱| 滨海县| 苍溪县| 滦南县| 马关县| 德安县| 皮山县| 公主岭市| 惠州市| 西昌市| 醴陵市| 噶尔县| 原平市| 东平县| 来宾市| 崇州市| 山东省| 稷山县| 水富县| 内江市| 长葛市| 辽宁省| 万州区| 衢州市| 府谷县| 神农架林区|