zoukankan      html  css  js  c++  java
  • Struts2—Action

    二、命名空间namespace

    ·命名空间namespace须要放在相应的package

    ·Namespace必须以“/开头”。

    ·Resultname是“success”的<result>能够不写其name。即:

      <result name=”success”><result>效果同样。

    ·Namespace为空的情形是:

      当找到url找到相应的namespace下的action时,假设资源没有找到。那么就能够使用na  mespace为空的namespace下相应的action

    范例:

    1.新建一个名叫NamespaceWeb Project。配置当中的web.xml

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 

    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

    <display-name></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.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

    </filter>

    <filter-mapping>

    <filter-name>struts2</filter-name>

    <url-pattern>/*</url-pattern>

    </filter-mapping>

    </web-app>

    2.配置当中的Struts.xml,配置namespace=“”的场景

    struts.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>

    <!-- <constant name="struts.enable.DynamicMethodInvocation" value="false" 

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

    namespace="/" extends="struts-default"> <default-action-ref name="index" 

    /> <global-results> <result name="error">/WEB-INF/jsp/error.jsp</result> 

    </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" 

    result="error"/> </global-exception-mappings> <action name="index"> <result 

    type="redirectAction"> <param name="actionName">HelloWorld</param> <param 

    name="namespace">/example</param> </result> </action> </package> <include 

    file="example.xml"/> -->

    <!-- Add packages here -->

    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/" extends="struts-default">

    <action name="helloworld">

    <result>

    /Hello.jsp

    </result>

    </action>

    </package>

    <package name="namespacepackage" namespace="" extends="struts-default">

    <action name="index">

    <result>

    /index.jsp

    </result>

    </action>

    </package>

    </struts>

    3.编写index.jsp页面

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

    <%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

      <head>

        <base href="<%=basePath%>">

        

        <title>My JSP 'index.jsp' starting page</title>

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">    

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <!--

    <link rel="stylesheet" type="text/csshref="styles.css">

    -->

      </head>

      

      <body>

       this is index jsp <br>

      </body>

    </html>

    4.
    訪问namepace=”/”下的名为index的页面(没有该页面)

    三、Action

    ·Action中的class的含义

      class能够是随意的一个Java类。其组成为:

    ·返回值为String的方法,比如  execute()方法

     ·该class的实例化对象是在每次訪问的时候,都会创建一个新的对象出来。

    当该对象创建   之后,就能够使用其execute()方法。然后依据其返回值,訪问对应的result

    定义class的方法:

    (1)直接使用POJO

    定义一个Java类,定义当中的execute()方法

    (2)实现Action接口

    在当中实现execute()方法

    (3)继承ActionSupport

    ·当class属性不存在的时候,默认使用的是x-work中的ActionSupport类,该类的execute  ()方法默认返回的是success

    ·在实际应用中。指选择第三种继承ActionSupport类的方法来实现所须要的class

    范例:

    1.配置struts.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>

    <!-- <constant name="struts.enable.DynamicMethodInvocation" value="false" 

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

    namespace="/" extends="struts-default"> <default-action-ref name="index" 

    /> <global-results> <result name="error">/WEB-INF/jsp/error.jsp</result> 

    </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" 

    result="error"/> </global-exception-mappings> <action name="index"> <result 

    type="redirectAction"> <param name="actionName">HelloWorld</param> <param 

    name="namespace">/example</param> </result> </action> </package> <include 

    file="example.xml"/> -->

    <!-- Add packages here -->

    <constant name="struts.devMode" value="true" />

    <package name="default" namespace="/actionclass" extends="struts-default">

    <action name="action" class="com.zgy.action.Action">

    <result name="success">

    /Hello.jsp

    </result>

    </action>

    </package>

    </struts>

    2.创建Action类。该类仅仅有一个execute()方法

    package com.zgy.action;

    import com.opensymphony.xwork2.ActionSupport;

    public class Action extends ActionSupport {

    /**

     * 

     */

    private static final long serialVersionUID = 1L;

    public String execute(){

    return "success";

    }

    }

    3.编写Hello.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>

    <%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    %>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

    <html>

      <head>

        <base href="<%=basePath%>">

        

        <title>My JSP 'Hello.jsp' starting page</title>

        

    <meta http-equiv="pragma" content="no-cache">

    <meta http-equiv="cache-control" content="no-cache">

    <meta http-equiv="expires" content="0">    

    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

    <meta http-equiv="description" content="This is my page">

    <!--

    <link rel="stylesheet" type="text/csshref="styles.css">

    -->

      </head>

      

      <body>

        This is Hello Jsp <br>

      </body>

    </html>

    4.浏览器端訪问

    http://localhost:8080/ActionClass/actionclass/action


    四、路径问题

    ·当訪问的namespace不存在的时候。就直接会在web.xml中进行处理。

    web.xml中配置  的<welcome-file>中配置的页面将会显示到浏览器。

    ·struts 2 中的路径是依据action的路径而不是jsp的路径来确定的,所以尽量不要使用相   对路径

    ·假设仅仅是在映射页面的URL中使用绝对路径,还是不能准确定位页面的位置

    ·解决方法:

      在页面中,使用例如以下的配置

    <%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    %>

    request.getContextPath()得到的路径是整个project的名

    request.getScheme()得到的是协议如:http

    request.getServerName()得到的是server地址如localhost

    request.getServerPort()得到的是port号如:8080

    ·在写URL的绝对路径的时候,在前面加上<%=basepath%>

    ·使用<base href="<%=basePath%>">指定base

    范例:

    1.配置struts.xml

    <?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="path" extends="struts-default" namespace="/path">

            <action name="path" class="com.zgy.path.PathAction">

                <result name="path">/path.jsp</result>

            </action>

        </package>

    </struts>

    2.编写PathAction

    package com.zgy.path;

    public class PathAction {

    public String execute() {

    return "path";

    }

    }

    3.编写index.jsp

    <?xml version="1.0" encoding="GB18030" ?

    >

    <%@ page language="java" contentType="text/html; charset=GB18030"

        pageEncoding="GB18030"%>

    <%--

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    //在head中<base href>指定basePath

    --%>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>

    <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />

    <title>Insert title here</title>

    </head>

    <body>

    <a href="path/path">路径问题说明</a>

    </body>

    </html>

     

    4.编写path.jsp

    <?xml version="1.0" encoding="GB18030" ?>

    <%@ page language="java" contentType="text/html; charset=GB18030"

        pageEncoding="GB18030"%>

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

        <%

    String path = request.getContextPath();

    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

    %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">

    <head>

    <base href="<%=basePath%>" />

    <meta http-equiv="Content-Type" content="text/html; charset=GB18030" />

    <title>Insert title here</title>

    </head>

    <body>

    struts2中的路径问题是依据action的路径而不是jsp路径来确定,所以尽量不要使用相对路径。<br />

    <a href="index.jsp">index.jsp</a>

    <br />

    尽管能够用redirect方式解决,但redirect方式并不是必要。

    <br />

    解决的方法很easy,统一使用绝对路径。

    (在jsp中用request.getContextRoot方式来拿到webapp的路径)

    <br />

    或者使用myeclipse经经常使用的,指定basePath

    </body>

    </html>

    5.浏览器訪问index.jsp页面



  • 相关阅读:
    code3728 联合权值
    Codevs 4600 [NOI2015]程序自动分析
    code1540 银河英雄传说
    code1074 食物链
    堆排序
    哈夫曼树与哈夫曼码
    优先队列用法
    code1154 能量项链
    code1225 八数码Bfs
    javascript5
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6910563.html
Copyright © 2011-2022 走看看