1. 액션 구성의 다양한 기본값
<패키지 이름="csdn" 네임스페이스="/test" 확장="struts-default">
<액션 이름="helloworld" 메서드="실행" >
<result name="success">/WEB-INF/page/hello.jsp</result>
</액션>
</패키지>
1>작업에 클래스가 지정되지 않은 경우 기본값은 ActionSupport입니다.
2>액션에 메소드가 지정되지 않은 경우 해당 액션의 Execute() 메소드가 기본적으로 실행됩니다.
3>결과의 이름 속성이 지정되지 않은 경우 기본값은 성공입니다.
2. Action 결과의 다양한 전달 유형
<액션 이름="helloworld">
<result name="success">/WEB-INF/page/hello.jsp</result>
</액션>
결과 구성은 struts1의 전달과 유사하지만 struts2는 일반적으로 사용되는 유형인 디스패처(기본값), 리디렉션, 리디렉션Action, 일반 텍스트를 제공합니다.
다음은 리디렉션된 작업이 동일한 패키지에 있는 경우 리디렉션Action 결과 유형의 예입니다.
<result type="redirectAction">helloworld</result>
리디렉션된 작업이 다른 네임스페이스에 있는 경우:
<결과 유형="redirectAction">
<param name="actionName">helloworld</param>
<param name="네임스페이스">/test</param>
</결과>
plaintext: 원본 파일 내용을 표시합니다. 예를 들어 jsp 파일 소스 코드를 그대로 표시해야 하는 경우 이 유형을 사용할 수 있습니다.
<result name="source" type="plainText ">
<param name="location">/xxx.jsp</param>
<param name="charSet">UTF-8</param><!-- 파일 읽기를 위한 인코딩 지정 -->
</결과>
결과적으로 ${attribute name} 표현식을 사용하여 작업의 속성에 액세스할 수도 있습니다. 다음과 같이:
<result type="redirect">view.jsp?id=${id}</result>
3. 여러 작업이 하나의 보기를 공유합니다 - 전역 결과 구성
동일한 뷰가 여러 작업에 사용되는 경우 결과를 전역 뷰로 정의해야 합니다. 전역 전달은 struts1에서 제공되며 유사한 기능도 struts2에서 제공됩니다.
<패키지....>
<전역 결과>
<result name="message">/message.jsp</result>
</글로벌 결과>
</패키지>
4. Action 속성에 값을 주입합니다.
Struts2는 Action의 속성에 대한 종속성 주입 기능을 제공합니다. struts2 구성 파일에서는 Action의 속성에 쉽게 값을 주입할 수 있습니다. 참고: 속성은 setter 메서드를 제공해야 합니다.
공개 클래스 HelloWorldAction{
개인 문자열 savePath;
공개 문자열 getSavePath() {
savePath를 반환합니다.
}
공공 무효 setSavePath(문자열 savePath) {
this.savePath = savePath;
}
...
}
<패키지 이름="csdn" 네임스페이스="/test" 확장="struts-default">
<액션 이름="helloworld" >
<param name="savePath">/이미지</param>
<result name="success">/WEB-INF/page/hello.jsp</result>
</액션>
</패키지>
위의 내용은 <param> 노드를 통해 작업의 savePath 속성에 "/images"를 주입합니다.
5. Struts 2에서 처리해야 하는 요청 접미사를 지정합니다.
이전에는 Action에 액세스하기 위해 기본적으로 .action 접미사를 사용했습니다. 실제로 기본 접미사는 "struts.action.extension" 상수를 통해 수정할 수 있습니다. 예를 들어 접미사로 .do가 있는 요청 경로만 처리하도록 Struts 2를 구성할 수 있습니다.
<?xml version="1.0" 인코딩="UTF-8"?>
<!DOCTYPE은 PUBLIC을 스트럿합니다.
"-//Apache Software Foundation//DTD Struts 구성 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<스트럿츠>
<상수 이름="struts.action.extension" value="do"/>
</struts>
사용자가 여러 요청 접미사를 지정해야 하는 경우 여러 접미사를 쉼표(,)로 구분합니다. 좋다:
<상수 이름="struts.action.extension" value="do,go"/>
6. 상수의 정의를 자세히 설명해주세요.
상수는 struts.xml 또는 struts.properties에서 구성할 수 있습니다. struts.xml에서 구성하는 것이 좋습니다.
struts.xml 파일에서 상수 구성
<스트럿츠>
<상수 이름="struts.action.extension" value="do"/>
</struts>
struts.properties에서 상수 구성
struts.action.extension=do
아래의 여러 구성 파일에서 상수를 정의할 수 있으므로 struts2가 상수를 로드하는 검색 순서를 이해해야 합니다.
struts-default.xml
struts-plugin.xml
스트럿츠.xml
스트럿츠.속성
web.xml
여러 파일에 동일한 상수가 구성된 경우 후자 파일에 구성된 상수 값이 이전 파일에 구성된 상수 값을 덮어씁니다.
7. 일반적으로 사용되는 상수 소개
<!-- HttpServletRequest의 setCharacterEncoding 메소드와 freemarker 및 속도의 출력에 대해 작동하는 기본 인코딩 세트를 지정합니다 -->
<상수 이름="struts.i18n.encoding" value="UTF-8"/>
<!-- 이 속성은 Struts 2에서 처리해야 하는 요청 접미사를 지정합니다. 이 속성의 기본값은 action입니다. 즉, *.action과 일치하는 모든 요청은 Struts2에서 처리됩니다.
사용자가 여러 요청 접미사를 지정해야 하는 경우 여러 접미사를 쉼표(,)로 구분합니다. -->
<상수 이름="struts.action.extension" value="do"/>
<!-- 브라우저가 정적 콘텐츠를 캐시하는지 여부를 설정합니다. 기본값은 true입니다(프로덕션 환경에서 사용됨). 개발 단계에서는 끄는 것이 가장 좋습니다. -->
<상수 이름="struts.serve.static.browserCache" 값="false"/>
<!-- Struts 구성 파일이 수정되면 시스템이 자동으로 파일을 다시 로드할지 여부, 기본값은 false(프로덕션 환경에서 사용됨)이므로 개발 단계에서 켜는 것이 가장 좋습니다 -->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 개발 모드에서 사용되므로 더 자세한 오류 메시지를 인쇄할 수 있습니다 -->
<상수 이름="struts.devMode" 값="true" />
<!--기본 보기 테마-->
<상수 이름="struts.ui.theme" value="simple" />
<! Spring과 통합할 때 Spring이 작업 개체 생성을 담당하도록 지정합니다. -->
<상수 이름="struts.objectFactory" value="spring" />
<!이 속성은 Struts 2가 동적 메서드 호출을 지원하는지 여부를 설정합니다. 이 속성의 기본값은 true입니다. 동적 메서드 호출을 해제해야 하는 경우 이 속성을 false로 설정할 수 있습니다. -->
<상수 이름="struts.enable.DynamicMethodInvocation" 값="false"/>
<!--업로드된 파일의 크기 제한-->
<상수 이름="struts.multipart.maxSize" value="10701096"/>
8. 애플리케이션에 대한 여러 Struts 구성 파일 지정
대부분의 애플리케이션에서는 애플리케이션 규모가 증가함에 따라 시스템의 작업 수도 크게 증가하여 struts.xml 구성 파일이 매우 커집니다. struts.xml 파일이 너무 크고 부풀어오르는 것을 방지하고 struts.xml 파일의 가독성을 향상시키기 위해 struts.xml 구성 파일을 여러 구성 파일로 분해한 다음 struts.xml에 다른 구성 파일을 포함할 수 있습니다. 파일. 다음 struts.xml은 <include> 요소를 통해 여러 구성 파일을 지정합니다.
<?xml version="1.0" 인코딩="UTF-8"?>
<!DOCTYPE은 PUBLIC을 스트럿합니다.
"-//Apache Software Foundation//DTD Struts 구성 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<스트럿츠>
<include file="struts-user.xml"/>
<include file="struts-order.xml"/>
</struts>
이러한 방식으로 우리는 모듈별로 여러 구성 파일에 Struts 2 Action을 추가할 수 있습니다.
9. 동적 메소드 호출
Action에 여러 메서드가 있는 경우 !+메서드 이름을 사용하여 지정된 메서드를 호출할 수 있습니다. 다음과 같이:
공개 클래스 HelloWorldAction{
개인 문자열 메시지;
....
공개 문자열 실행()에서 예외 발생{
this.message = "나의 첫 번째 struts2 애플리케이션";
"성공"을 반환합니다.
}
공개 문자열 other()에서 예외 발생{
this.message = "두 번째 방법";
"성공"을 반환합니다.
}
}
위 작업에 액세스하기 위한 URL 경로가 /struts/test/helloworld.action이라고 가정합니다.
액션의 other() 메소드에 접근하기 위해 다음과 같이 호출할 수 있습니다:
/struts/test/helloworld!other.action
동적 메서드 호출을 사용하지 않으려면 struts.enable.DynamicMethodInvocation 상수를 통해 동적 메서드 호출을 끌 수 있습니다.
<상수 이름="struts.enable.DynamicMethodInvocation" 값="false"/>
10. 와일드카드를 사용하여 작업 정의
<패키지 이름="csdn" 네임스페이스="/test" 확장="struts-default">
<작업 이름="helloworld_*" 메서드="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
</액션>
</패키지>
공개 클래스 HelloWorldAction{
개인 문자열 메시지;
....
공개 문자열 실행()에서 예외 발생{
this.message = "나의 첫 번째 struts2 애플리케이션";
"성공"을 반환합니다.
}
공개 문자열 other()에서 예외 발생{
this.message = "두 번째 방법";
"성공"을 반환합니다.
}
}
other() 메소드에 액세스하려면 다음과 같은 URL을 통해 액세스할 수 있습니다: /test/helloworld_other.action
11. 요청 매개변수 수신
기본 유형을 사용하여 요청 매개변수 수신(가져오기/게시)
Action 클래스에 요청 매개변수와 동일한 이름의 속성을 정의하면 struts2는 자동으로 요청 매개변수를 전달받아 동일한 이름의 속성에 할당할 수 있습니다.
요청 경로: http://localhost:8080/test/view.action?id=78
공개 클래스 ProductAction {
개인 정수 ID;
public void setId(Integer id) {//struts2는 리플렉션 기술을 사용하여 요청 매개변수 값을 얻기 위해 요청 매개변수와 동일한 이름을 가진 속성의 setter 메서드를 호출합니다.
this.id = 아이디;
}
공개 정수 getId() {반환 ID;}
}
요청 매개변수 요청 경로를 수신하려면 복합 유형을 사용하십시오: http://localhost:8080/test/view.action?product.id=78
공개 클래스 ProductAction {
개인 제품 제품;
public void setProduct(제품 제품) { this.product = 제품 }
공개 제품 getProduct() {반품 제품;}
}
Struts2는 먼저 Reflection 기술을 통해 Product의 기본 생성자를 호출하여 product 객체를 생성한 후, Reflection 기술을 통해 product의 요청 매개변수와 동일한 이름의 속성의 setter 메소드를 호출하여 요청 매개변수 값을 얻습니다.
12. 유형 변환의 의미
스마트 MVC 프레임워크의 경우 B/S(브라우저/서버) 구조 응용 프로그램의 요청 매개변수가 브라우저를 통해 서버로 전송되기 때문에 이러한 매개변수는 풍부한 데이터 유형을 가질 수 없습니다. 변환은 서버 측에서 완료되어야 합니다
MVC 프레임워크는 프리젠테이션 계층 솔루션이며 유형 변환 지원을 제공해야 합니다. Struts2는 매우 강력한 유형 변환 지원을 제공합니다.
13. 프리젠테이션 계층 데이터 처리
웹 애플리케이션의 경우 프리젠테이션 계층은 사용자 입력 데이터를 수집하고 사용자에게 서버 상태를 표시하는 등 사용자와 상호 작용하는 데 주로 사용됩니다. 따라서 프리젠테이션 계층의 데이터 흐름은 주로 입력 데이터와 출력 데이터라는 두 가지 방향을 갖습니다.
입력 데이터의 경우: 문자열 데이터에서 여러 유형의 데이터로의 변환을 완료해야 합니다. 프로그램은 일반적으로 자동으로 완료될 수 없으며 코드에서 수동으로 변환해야 합니다.
출력 데이터의 경우: java와 jsp는 모두 여러 데이터 유형의 직접 출력을 지원합니다.
프리젠테이션 계층의 또 다른 데이터 처리는 데이터 검증으로, 이는 클라이언트 검증과 서버측 검증으로 구분됩니다. 이에 대해서는 나중에 자세히 설명하겠습니다.
14. 유형 변환
HTTP 매개변수는 모두 문자열 유형입니다. 저장된 데이터는 문자열, 숫자, 부울, 날짜 및 시간 등이거나 JavaBean 유형일 수 있습니다. 문자열을 날짜로 변환하는 것과 같은 수동 유형 변환: request.getParameter 메소드를 통해 문자열을 얻습니다. DateFormat.parse 메소드를 통해 문자열이 Date 객체로 변환됩니다.
15. Struts2 유형 변환
Struts2 내장 유형 변환
문자열과 부울은 문자열과 부울 값 간의 변환을 완료합니다.
일반 문자열과 문자 간의 문자열 및 문자 변환
String, int 및 Integer는 문자열과 정수 간의 변환을 완료합니다.
String 및 Long은 문자열과 긴 정수 값 사이의 변환을 완료합니다.
String, double 및 Double은 문자열과 배정밀도 부동 소수점 값의 변환을 완료합니다.
문자열과 부동 소수점은 문자열과 단정밀도 부동 소수점 간의 변환을 완료합니다.
문자열과 날짜는 문자열과 날짜 유형 간의 변환을 완료합니다. 날짜 형식은 사용자가 형식을 요청하는 로케일의 SHORT 형식을 사용합니다.
문자열 및 배열 기본 경우, 배열 요소는 사용자가 유형 변환기를 정의하는 경우 다른 복합 데이터 유형일 수도 있습니다.
문자열과 맵과 리스트
16. Struts 유형 변환 API
Struts2의 유형 변환기는 실제로 OGNL을 기반으로 구현되어 있습니다. OGNL 프로젝트에는 ognl.TypeConverter 인터페이스가 있습니다. 이 인터페이스는 유형 변환기를 구현하기 위해 반드시 구현해야 하는 인터페이스입니다. 인터페이스는 다음과 같이 정의됩니다.
공용 인터페이스 TypeConverter {
공용 개체 변환 값(지도 arg0, 개체 arg1, 멤버 arg2, 문자열 arg3,
개체 arg4, 클래스 arg5) {
null을 반환;
}
유형 변환기를 구현하려면 위의 TypeConverter를 구현해야 합니다. 그러나 위 인터페이스의 메소드는 너무 복잡하므로 OGNL 프로젝트에서는 이 인터페이스의 구현 클래스인 ognl.DefaultTypeConverter도 제공합니다. 이 클래스를 상속하면 다음과 같이 정의됩니다.
공용 클래스 DefaultTypeConverter는 객체를 확장하여 TypeConverter를 구현합니다.
public Object ConvertValue(Map<String,Object> context, Object value, Class toType) {
}
……//다른 방법
}
ConvertValue 메서드의 역할은 형식 변환을 완료하는 것이지만 이 형식 변환은 문자열을 개체 인스턴스로 변환해야 하는 경우에도 이 메서드를 사용합니다. 사용된. 이 변환은 변환해야 하는 대상 유형인 toType 매개변수 유형을 통해 수행됩니다. 따라서 toType 매개변수에 따라 변환 방향을 결정할 수 있습니다.
ConvertValue 메소드 매개변수 및 반환 의미 첫 번째 매개변수: context는 유형 변환 환경의 컨텍스트입니다. 두 번째 매개변수: value는 변환해야 하는 매개변수입니다. value 매개변수의 값도 변환 방향에 따라 다릅니다.
세 번째 매개변수: toType은 변환된 대상 유형입니다. 이 메소드의 반환 값은 유형 변환 후의 값입니다. 변환 방향에 따라 값 유형도 변경됩니다. 변환된 ConvertValue 메소드는 변환이 필요한 값을 받아들이고, 변환이 필요한 대상 타입이 매개변수이며, 이후 변환된 대상 값을 반환하는 것을 볼 수 있다.
Value가 문자열 배열인 이유는 무엇입니까?
DefaultTypeConverter 변환기의 경우 가장 일반적인 상황을 고려해야 하므로 모든 요청 매개변수를 문자열이 아닌 문자열 배열로 처리합니다. getParameterValues()로 얻은 매개변수 값과 동일