zoukankan      html  css  js  c++  java
  • SAStruts リンク記述におけるs:linkとhtml:linkの比較

    http://localhost:8080/app/subapp/action/method/1
    

    ホスト名以降、「メインアプリ/サブアプリ/アクション/メソッド/パラメータ」とします。

    SAStrutsでこのURLアクセスした場合の、<s:link>と<html:link>の挙動を比較してみます。

    s:link

    以下、公式リファレンスの引用です。

    SAStrutsには、Strutshtml:link継承したs:linkが用意されています。 href属性を設定するときに、コンテキストルートを自動的に補完させる場合に使います。パスを/ではじめた場合は、コンテキストルートからみたパスになります。パスが/ではじまっていない場合は、JSPからみたパスになります。

    Super Agile Struts - Feature Reference
    JSP
    <s:linkhref="">A</s:link>
    <s:linkhref="link">B</s:link>
    <s:linkhref="./">C</s:link>
    <s:linkhref="./link">D</s:link>
    <s:linkhref="../">E</s:link>
    <s:linkhref="http://www.cnblogs.com/">F</s:link>
    <s:linkhref="/">G</s:link>
    <s:linkhref="/link">H</s:link>
    
    出力html

    想定される遷移先をコメントで示しています。

    <ahref="/app/subapp/action/">A</a>         <!-- 同じアクションのindexメソッド -->
    <ahref="/app/subapp/action/link">B</a>     <!-- 同じアクションのlinkメソッド -->
    <ahref="/app/subapp/action/./">C</a>       <!-- 同じアクションのindexメソッド -->
    <ahref="/app/subapp/action/./link">D</a>   <!-- 同じアクションのlinkメソッド -->
    <ahref="/app/subapp/action/../">E</a>      <!-- サブアプリのIndexアクション -->
    <ahref="/app/subapp/action/http://www.cnblogs.com/">F</a>   <!-- メインアプリのIndexアクション -->
    <ahref="/app/">G</a>                       <!-- メインアプリのIndexアクション -->
    <ahref="/app/link">H</a>                   <!-- メインアプリのLinkアクション -->
    
    遷移先URL
    A http://localhost:8080/app/subapp/action/
    B http://localhost:8080/app/subapp/action/link
    C http://localhost:8080/app/subapp/action/
    D http://localhost:8080/app/subapp/action/link
    E http://localhost:8080/app/subapp/
    F http://localhost:8080/app/
    G http://localhost:8080/app/
    H http://localhost:8080/app/link
    

    html:link

    JSP
    <html:linkhref="">A</html:link>
    <html:linkhref="link">B</html:link>
    <html:linkhref="./">C</html:link>
    <html:linkhref="./link">D</html:link>
    <html:linkhref="../">E</html:link>
    <html:linkhref="http://www.cnblogs.com/">F</html:link>
    <html:linkhref="/">G</html:link>
    <html:linkhref="/link">H</html:link>
    
    出力html
    <ahref="">A</a>        <!-- 同じアクションの同じメソッド、同じパラメータ -->
    <ahref="link">B</a>    <!-- 同じアクションの同じメソッド、linkパラメータ -->
    <ahref="./">C</a>      <!-- 同じアクションの同じメソッド、パラメータなし -->
    <ahref="./link">D</a>  <!-- 同じアクションの同じメソッド、linkパラメータ -->
    <ahref="../">E</a>     <!-- 同じアクションのindexメソッド -->
    <ahref="http://www.cnblogs.com/">F</a>  <!-- サブアプリのIndexアクション -->
    <ahref="/">G</a>       <!-- ドキュメントルート -->
    <ahref="/link">H</a>   <!-- 別のWebアプリ -->
    
    遷移先URL
    A http://localhost:8080/app/subapp/action/method/1
    B http://localhost:8080/app/subapp/action/method/link
    C http://localhost:8080/app/subapp/action/method/
    D http://localhost:8080/app/subapp/action/method/link
    E http://localhost:8080/app/subapp/action/
    F http://localhost:8080/app/subapp/
    G http://localhost:8080/
    H http://localhost:8080/link
    

    まとめ

    基本的には、<s:link>を使うのが良いと思います。<html:link>だと、以下の場合に遷移先URLが異なってしまいます。

    ※ html:link 「/」で終わるURLの場合
    http://localhost:8080/app/subapp/action/method/1/
    
    A http://localhost:8080/app/subapp/action/method/1/
    B http://localhost:8080/app/subapp/action/method/1/link
    C http://localhost:8080/app/subapp/action/method/1/
    D http://localhost:8080/app/subapp/action/method/1/link
    E http://localhost:8080/app/subapp/action/method/
    F http://localhost:8080/app/subapp/action/
    

    <s:link>であれば、「/」で終わっていても同じURLになります。自動補完により、必ず絶対パスで出力されるためです。

  • 相关阅读:
    axios 进行类库封装
    vue的中vuex为何需要mutation更新状态,vue-router的路由的理解
    发布订阅者模式、观察者模式总结
    es 模块的基础知识,深度了解
    绑定事件的模型
    rem+media+jquery布局结局方案
    VDOM总结
    react-redux
    发布网站配置文件和SSL
    css3d旋转
  • 原文地址:https://www.cnblogs.com/aggavara/p/2708713.html
Copyright © 2011-2022 走看看