JavaWeb_(Struts2框架)struts.xml核心配置、動態方法調用、結果集的處理

 

 

  此係列博文基於同一個項目已上傳至github  傳送門html

  JavaWeb_(Struts2框架)Struts建立Action的三種方式  傳送門java

  JavaWeb_(Struts2框架)struts.xml核心配置、動態方法調用、結果集的處理  傳送門git

  JavaWeb_(Struts2框架)Log4j的配置以及解決中文亂碼  傳送門github

  JavaWeb_(Struts2框架)參數傳遞之接收參數與傳遞參數  傳送門web

  JavaWeb_(Struts2框架)Ognl小案例查詢帖子  傳送門apache

  JavaWeb_(Struts2框架)Action中struts-default下result的各類轉發類型  傳送門安全

  JavaWeb_(Struts2框架)攔截器interceptor  傳送門框架

 

 

  核心配置dom

  動態方法調用jsp

  結果集處理

 

1、核心配置

  struts.xml

    <!-- name:配置包名 namespace:給action的訪問路徑定義一個命名空間 -->
    <package name="MyPackage" namespace="/user" extends="struts-default">
        <!-- action:配置action類
            name:決定了action訪問的資源名稱  servlet:url-pattern 
            class:action的完整類名
            method:指定調用action中的哪一個方法來去處理請求-->
        <action name="LoginAction" class="com.Gary.web.UserAction" method="execute">
            <!-- 默認爲轉發  redirect設置爲重定向-->
            <result name="success" type="redirect">/index.html</result>
            <result name="error">/login.jsp</result>
        </action>
    </package>

 

  namespace:做用是能夠讓不一樣的packet裏面包含相同action名稱,起虛擬路徑做用

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

  此時訪問的路徑http://localhost:8080/項目名字/請求

 

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

  此時訪問路徑此時訪問的路徑http://localhost:8080/項目名字/user/請求

 

 

2、動態方法調用

  在web層UserAction.java類中編寫login()註冊方法

        <action name="LoginAction" class="com.Gary.web.UserAction" method="login">
            <!-- 默認爲轉發  redirect設置爲重定向  -->
            <result name="success" type="redirect">/index.html</result>
            <result name="error">/login.jsp</result>
        </action>

 

public String login() throws Exception {
        
        System.err.println("login()方法");
        
        UserService userService = new UserService();
        boolean success = userService.findUser(user);
        if(success)
        {
            return "success";
        }else{
            ServletActionContext.getRequest().setAttribute("error", "用戶名或密碼錯誤!!!");
            return "error";
        }
            
    }

  

  在web層UserAction.java類中編寫register()註冊方法

        <action name="LoginActionRegister" class="com.Gary.web.UserAction" method="register">
            <!-- 默認爲轉發  redirect設置爲重定向  --> 
            <result name ="success" type="redirect">/index.html</result>
            <result name ="error">/login.jsp</result>
        </action>

 

    //註冊
    public String register() throws Exception {
        
        System.err.println("register()方法");
        
        return null;
    }

 

  此時,若是想要訪問com.Gary.web.UserAction路徑下的login方法,就須要調用http://localhost:8080/StrutsForum_Login/LoginAction,若是想要訪問com.Gary.web.UserAction路徑下的register方法,就須要調用http://localhost:8080/StrutsForum_Login/LoginActionRegister。

 

package com.Gary.web;

import org.apache.struts2.ServletActionContext;

import com.Gary.domain.User;
import com.Gary.service.UserService;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class UserAction extends ActionSupport implements ModelDriven<User>{

    public User user = new User();
    
    public String login() throws Exception {
        
        System.err.println("login()方法");
        
        UserService userService = new UserService();
        boolean success = userService.findUser(user);
        if(success)
        {
            return "success";
        }else{
            ServletActionContext.getRequest().setAttribute("error", "用戶名或密碼錯誤!!!");
            return "error";
        }
            
    }
    
    //註冊
    public String register() throws Exception {
        
        System.err.println("register()方法");
        
        return null;
    }

    
    
    @Override
    public User getModel() {
        // TODO Auto-generated method stub
        return user;
    }
}
UserAction.java

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
    "http://struts.apache.org/dtds/struts-2.5.dtd">
    
    
    
    
<struts>
    <!-- name:配置包名 namespace:給action的訪問路徑定義一個命名空間 -->
    <package name="MyPackage" namespace="/" extends="struts-default">
    
        <!-- action:配置action類
            name:決定了action訪問的資源名稱  servlet:url-pattern 
            class:action的完整類名
            method:指定調用action中的哪一個方法來去處理請求  -->
            
        <action name="LoginAction" class="com.Gary.web.UserAction" method="login">
            <!-- 默認爲轉發  redirect設置爲重定向  -->
            <result name="success" type="redirect">/index.html</result>
            <result name="error">/login.jsp</result>
        </action>
        
        <action name="LoginActionRegister" class="com.Gary.web.UserAction" method="register">
            <!-- 默認爲轉發  redirect設置爲重定向  --> 
            <result name ="success" type="redirect">/index.html</result>
            <result name ="error">/login.jsp</result>
        </action>

        <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
        </action>
        
        <action name="LoginActionImpl" class="com.Gary.web.ImplAction" method="execute">
        
        </action>
    </package>
</struts>
struts.xml

 

  若是每個方法就須要在struct.xml中配置一個<action>,那配置多個方法時就有一些麻煩了,此時咱們能夠用到struct框架中的動態方法調用

  使用動態方法調用必定注意在struct.xml中添加兩行<constant>標籤和一行<global-allowed-methods>

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

<!-- 增長動態方法調用的安全性 -->
<global-allowed-methods>login,register,kill</global-allowed-methods>

 

 

3、結果集

 

            
        <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
            <!-- 默認爲轉發  redirect設置爲重定向  -->
            <result name="success" type="redirect">/index.html</result>
            <!-- 默認爲轉發 -->
            <result name="error">/login.jsp</result>
        </action>

 

  轉發到Action【轉發的路徑是不會變的】

  在struct.xml中配置動態方法調用

        <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
        
        </action>
        
        <action name="LoginActionImpl" class="com.Gary.web.ImplAction" method="execute">
            <!-- 轉發到LoginActionDefault -->
            <result name="defaultAction" type="chain">LoginActionDefault</result>
        </action>

 

  ImplAction.java中編寫execute()方法

    @Override
    public String execute() throws Exception {
        System.out.println("這是實現了Action接口的action");
        return "defaultAction";
    }

 

 

package com.Gary.web;

import com.opensymphony.xwork2.Action;

public class ImplAction implements Action{

    @Override
    public String execute() throws Exception {
        System.out.println("這是實現了Action接口的action");
        return "defaultAction";
    }

    
    
    
}
ImplAction.java

 

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

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

    <!-- name:配置包名 namespace:給action的訪問路徑定義一個命名空間 -->
    <package name="MyPackage" namespace="/" extends="struts-default">
        <!-- 增長動態方法調用的安全性 -->
        <global-allowed-methods>login,register,kill</global-allowed-methods>
    
        <!-- action:配置action類
            name:決定了action訪問的資源名稱  servlet:url-pattern 
            class:action的完整類名
            method:指定調用action中的哪一個方法來去處理請求  -->
            
        <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
            <!-- 默認爲轉發  redirect設置爲重定向  -->
            <result name="success" type="redirect">/index.html</result>
            <!-- 默認爲轉發 -->
            <result name="error">/login.jsp</result>
        </action>


        <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
        
        </action>
        
        <action name="LoginActionImpl" class="com.Gary.web.ImplAction" method="execute">
            <!-- 轉發到LoginActionDefault -->
            <result name="defaultAction" type="chain">LoginActionDefault</result>
        </action>
    </package>
</struts>
struts.xml

 

  重定向到Action【轉發的路徑是不會變的】

  在struts.xml中添加"toLogin"結果集,配置type="redirectAction"

<action name="LoginActionImpl_*" class="com.Gary.web.ImplAction" method="{1}">
            <!-- 轉發到LoginActionDefault -->
            <result name="defaultAction" type="chain">LoginActionDefault</result>
            <!-- 重定向到Action(LoginAction_*) -->
            <result name="toLogin" type="redirectAction">
                <param name="actionName">LoginAction_login</param>
                
                <param name="username">${username}</param>
                <param name="password">${password}</param>
            </result>
        </action>

 

  在ImplAction.java中添加login()方法,return去發起toLogin請求

    public String login()
    {
        //獲得原生的request域
        //ServletActionContext.getRequest().setAttribute("username", "123");
        //ServletActionContext.getRequest().setAttribute("password", "123");
        
        ActionContext.getContext().put("username", "123");
        ActionContext.getContext().put("password", "123");
        
        return "toLogin";
    }

 

  運行程序,在網頁的url中輸入http://localhost:8080/StrutsForum_Login/LoginActionImpl_login請求,請求後【http://localhost:8080/StrutsForum_Login/LoginAction_login路徑不變

 

package com.Gary.web;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;

public class ImplAction implements Action{

    @Override
    public String execute() throws Exception {
        System.out.println("這是實現了Action接口的action");
        return "defaultAction";
    }

    
    public String login()
    {
        //獲得原生的request域
        //ServletActionContext.getRequest().setAttribute("username", "123");
        //ServletActionContext.getRequest().setAttribute("password", "123");
        
        ActionContext.getContext().put("username", "123");
        ActionContext.getContext().put("password", "123");
        
        return "toLogin";
    }
    
    
}
ImplAction.java

 

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

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

    <!-- name:配置包名 namespace:給action的訪問路徑定義一個命名空間 -->
    <package name="MyPackage" namespace="/" extends="struts-default">
        <!-- 增長動態方法調用的安全性 -->
        <global-allowed-methods>regex:.*</global-allowed-methods>
    
        <!-- action:配置action類
            name:決定了action訪問的資源名稱  servlet:url-pattern 
            class:action的完整類名
            method:指定調用action中的哪一個方法來去處理請求  -->
            
        <action name="LoginAction_*" class="com.Gary.web.UserAction" method="{1}">
            <!-- 默認爲轉發  redirect設置爲重定向  -->
            <result name="success" type="redirect">/index.html</result>
            <!-- 默認爲轉發 -->
            <result name="error">/login.jsp</result>
        </action>


        <action name="LoginActionDefault" class="com.Gary.web.DefaultAction" method="execute">
        
        </action>
        
        <action name="LoginActionImpl_*" class="com.Gary.web.ImplAction" method="{1}">
            <!-- 轉發到LoginActionDefault -->
            <result name="defaultAction" type="chain">LoginActionDefault</result>
            <!-- 重定向到Action(LoginAction_*) -->
            <result name="toLogin" type="redirectAction">
                <param name="actionName">LoginAction_login</param>
                
                <param name="username">${username}</param>
                <param name="password">${password}</param>
            </result>
        </action>
    </package>
</struts>
struts.xml
相關文章
相關標籤/搜索