Struts2 학습노트(5) - 매개 변수 전달 방법

매개 변수 전달은 매개 변수를 프로그램 백그라운드로 전송할 것입니다. 백그라운드는 처리를 한 다음에 내용을 데이터베이스에 저장할 수 있습니다.
매개 변수를 전달하는 방법이 비교적 많으니 일일이 설명하면 다음과 같다.
1. Action에서 직접 매개변수법
다음과 같은 index가 있습니다.jsp 파일
  
<%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding="GB18030"%> 
 
<%  
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> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
<base href="<%=basePath %>"/> 
<title>Insert title here</title> 
</head> 
<body> 
action <a href="user/user!add?name=a&age=8"> </a> 
     
</body> 
</html>
그 중의 에 대해 말하자면, 두 개의 매개 변수를 프로그램에 전달하는데, 하나는name이고, 하나는age이며, struts에 있다.xml의 구성은 다음과 같습니다.
  
<!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="user" extends="struts-default" namespace="/user"> 
         
        <action name="user" class="com.bjsxt.struts2.user.action.UserAction"> 
            <result>/user_add_success.jsp</result> 
        </action> 
    </package> 
</struts>
이때 저희 User Action은 어떻게 써야 하나요?범례는 다음과 같습니다.
package com.bjsxt.struts2.user.action;  
 
import com.opensymphony.xwork2.ActionSupport; 
 
public class UserAction extends ActionSupport { 
     
    private String name; 
    private int age; 
     
    public String add() { 
        System.out.println("name=" + name); 
        System.out.println("age=" + age); 
        return SUCCESS; 
    } 
 
    public String getName() { 
        return name; 
    } 
 
    public void setName(String name) { 
        this.name = name; 
    } 
 
    public int getAge() { 
        return age; 
    } 
 
    public void setAge(int age) { 
        this.age = age; 
    } 
     
     
}
간단합니다. 두 가지 속성을 정의했습니다. 주: 이 두 속성의 set과 get 방법은 반드시 써야 합니다. eclipse의 빠른 생성 방식을 사용할 수 있습니다. 매우 간단합니다.이렇게 하면 상술한 프로그램이 실행될 때 필요한 결과를 출력할 것이다
name=a와 age=8.
설명은 다음과 같다. 첫째,struts2는 자동으로 매개 변수 전달을 하는데 이 과정은 우리가 참여할 필요가 없다.둘째, struts가 매개 변수를 전달할 때 set과 get 방법을 겨냥한 것이지name과age 속성이 아니다. 즉, 만약에 우리가 그 이름을username와 같은 다른 이름으로 수정한다면, 방법은 여전히 setName과 getName이면 전체 기능의 실현에 있어서 아무런 차이가 없고 약간 어색할 뿐이다.셋째, 가장 중요한 점은 만약에 많은 속성이 있다면 우리는 매우 많은 set과 get 방법을 필요로 한다. 이것은 매우 불편하기 때문에 다음과 같은 방식을 도입했다.
2. Action 클래스 객체 추가 방법
이때 우리 1의 속성은 모두 하나의 클래스에 귀속된다. 예를 들어 User
package com.bjsxt.struts2.user.model;  
 
public class User { 
    private String name; 
    private int age; 
    public String getName() { 
        return name; 
    } 
    public void setName(String name) { 
        this.name = name; 
    } 
    public int getAge() { 
        return age; 
    } 
    public void setAge(int age) { 
        this.age = age; 
    } 
}
이렇게 해서 Action 클래스에서 쓰기가 쉬워졌어요.
package com.bjsxt.struts2.user.action;  
 
import com.bjsxt.struts2.user.model.User; 
import com.opensymphony.xwork2.ActionSupport; 
 
public class UserAction extends ActionSupport { 
     
    private User user; 
 
    public String add() { 
        System.out.println("name=" + user.getName()); 
        System.out.println("age=" + user.getAge()); 
        return SUCCESS; 
    } 
 
    public User getUser() { 
        return user; 
    } 
 
    public void setUser(User user) { 
        this.user = user; 
    } 
     
}
주: 이 때 우리는 사용자 대상을 수동으로 생성할 필요가 없습니다. 이 과정은 Struts2가 자동으로 완성합니다.
그리고 이때의 URL도 수정해야 합니다. 즉, index의 라벨을 수정해야 합니다.
  
<%@ page language="java" contentType="text/html; charset=GB18030" 
    pageEncoding="GB18030"%> 
 
<%  
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> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030" /> 
<base href="<%=basePath %>"/> 
<title>Insert title here</title> 
</head> 
<body>  
Domain Model <a href="user/user!add?user.name=a&user.age=8"> </a> 
     
</body> 
</html>
상술한 18행 부분으로 수정하다.
다음은 Struts2 매개 변수 전달의 두 가지 방법을 설명했는데 그 중에서 두 번째 방법은 Domain Model, 도메인 모델이라고 불린다.속성을 저장하는 데 사용할 클래스를 새로 만듭니다.
다음은 모델 드라이브, 모델 드라이브라고 불리는 또 다른 방법을 설명합니다.
그것은 두 번째 방법과 매우 유사하다. 다른 것은 모두 같다. 단지 Action과 방문의 차이가 있을 뿐이다. 그의 Action은 다음과 같다.
package com.bjsxt.struts2.user.action;  
 
import com.bjsxt.struts2.user.model.User; 
import com.opensymphony.xwork2.ActionSupport; 
import com.opensymphony.xwork2.ModelDriven; 
 
public class UserAction extends ActionSupport implements ModelDriven<User>{ 
     
    private User user = new User(); 
     
    public String add() { 
        System.out.println("name=" + user.getName()); 
        System.out.println("age=" + user.getAge()); 
        return SUCCESS; 
    } 
 
    @Override 
    public User getModel() { 
        return user; 
    } 
     
이를 통해 모델Driven 인터페이스를 실현하고 범용 기술을 채택한 것을 알 수 있다.이런 방식으로 Struts2는 자동으로 하나의 대상을 실례화하지 않기 때문에 수동으로만 생성할 수 있습니다.이것은 모델 Driven 인터페이스의 getModel () 방법을 덮어썼는데, 그 역할은 클래스 대상을 되돌려주는 것이다.
액세스는 두 번째 방법과 다릅니다.
 ModelDriven 사용자 추가
그것은 결코 사용자를 채택하지 않았다.name의 방식, 이것도 왜 new의 대상을 필요로 하는 이유입니다.
이런 방식의 기본적인 사상 과정은 다음과 같다. 먼저 Action이 URL을 해석하여 그 중의 매개 변수를 얻은 다음에 Action에 들어가서 이 Action이 모델Driven 인터페이스를 실현한 것을 발견하고 이때 모델Driven 인터페이스의 getModel 방법을 호출하여 클래스의 대상을 얻은 다음에 이런 set와 get 방법을 호출하여 매개 변수를 전송한다.
이런 방식은 Struts2의 MVC 사상, M---Model, V---View, C---Controller를 구현했다. 그러나 이런 방식은 매우 적게 사용되고 우리가 가장 많이 사용하는 것은 위의 두 번째 방식이다.
이상은 Struts2의 매개 변수 전달 방법의 전체 내용입니다. 여러분께 참고가 되고 저희를 많이 사랑해 주시기 바랍니다.

좋은 웹페이지 즐겨찾기