Struts 2-유형 변환

HTTP 요청의 모든 것은 String프로토콜에 의해. 여기에는 숫자, 부울, 정수, 날짜, 소수 및 기타 모든 것이 포함됩니다. 그러나 Struts 클래스에서는 모든 데이터 유형의 속성을 가질 수 있습니다.

Struts는 어떻게 속성을 자동 연결합니까?

Struts 무거운 작업을 수행하기 위해 덮개 아래에 다양한 유형 변환기를 사용합니다.

예를 들어, Action 클래스에 정수 속성이있는 경우 Struts는 사용자가 아무것도하지 않고 요청 매개 변수를 정수 속성으로 자동 변환합니다. 기본적으로 Struts는 여러 유형 변환기와 함께 제공됩니다.

아래 나열된 변환기 중 하나를 사용하는 경우 걱정할 필요가 없습니다.

  • 정수, 부동 소수점, 이중, 10 진수
  • 날짜 및 일시
  • 배열 및 컬렉션
  • Enumerations
  • Boolean
  • BigDecimal

고유 한 데이터 유형을 사용하는 경우 Struts가 표시하기 전에 해당 값을 변환하는 방법을 인식하도록 자체 변환기를 추가해야합니다. 다음 POJO 클래스를 고려하십시오.Environment.java.

package com.tutorialspoint.struts2;

public class Environment {
   private String name;
   
   public  Environment(String name) {
      this.name = name;
   }
   
   public String getName() {
      return name;
   }
   
   public void setName(String name) {
      this.name = name;
   }
}

이것은 다음과 같은 속성을 가진 매우 간단한 클래스입니다. name, 그래서이 클래스에 특별한 것은 없습니다. 시스템에 대한 정보를 포함하는 다른 클래스를 만들어 보겠습니다.SystemDetails.java.

이 연습에서는 환경을 "개발"로, 운영 체제를 "Windows XP SP3"으로 하드 코딩했습니다.

실시간 프로젝트에서는 시스템 구성에서이 정보를 얻을 수 있습니다.

다음과 같은 액션 클래스가 있습니다.

package com.tutorialspoint.struts2;
import com.opensymphony.xwork2.ActionSupport;

public class SystemDetails extends ActionSupport {
   private Environment environment = new Environment("Development");
   private String operatingSystem = "Windows XP SP3";

   public String execute() {
      return SUCCESS;
   }
   
   public Environment getEnvironment() {
      return environment;
   }
   
   public void setEnvironment(Environment environment) {
      this.environment = environment;
   }
   
   public String getOperatingSystem() {
      return operatingSystem;
   }
   
   public void setOperatingSystem(String operatingSystem) {
      this.operatingSystem = operatingSystem;
   }
}

다음으로 간단한 JSP 파일을 생성하겠습니다. System.jsp 환경 및 운영 체제 정보를 표시합니다.

<%@ page language = "java" contentType = "text/html; charset = ISO-8859-1"
pageEncoding = "ISO-8859-1"%>
<%@ taglib prefix = "s" uri = "/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
   <head>
      <title>System Details</title>
   </head>
   
   <body>
      Environment: <s:property value = "environment"/><br/>
      Operating System:<s:property value = "operatingSystem"/>
   </body>
</html>

우리가 system.jsp 그리고 SystemDetails.java 함께 수업 struts.xml.

SystemDetails 클래스에는 문자열 "을 반환하는 간단한 execute () 메서드가 있습니다.SUCCESS".

<?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 = "helloworld" extends = "struts-default">
      
      <action name = "system" 
            class = "com.tutorialspoint.struts2.SystemDetails" 
            method = "execute">
         <result name = "success">/System.jsp</result>
      </action>
   </package>
</struts>
  • 프로젝트 이름을 마우스 오른쪽 버튼으로 클릭하고 Export > WAR File War 파일을 만듭니다.

  • 그런 다음 Tomcat의 webapps 디렉토리에이 WAR을 배포합니다.

  • 마지막으로 Tomcat 서버를 시작하고 URL에 액세스하십시오. http://localhost:8080/HelloWorldStruts2/system.action. 다음 화면이 생성됩니다.

위의 출력에 어떤 문제가 있습니까? Struts는 문자열 "Windows XP SP3"및 기타 기본 제공 데이터 유형을 표시하고 변환하는 방법을 알고 있지만 속성으로 수행 할 작업을 모릅니다.Environment유형. 간단히toString() 수업 방법

이 문제를 해결하기 위해 이제 간단한 TypeConverter 환경 클래스.

라는 클래스를 만듭니다. EnvironmentConverter.java 다음과 함께.

package com.tutorialspoint.struts2;

import java.util.Map;
import org.apache.struts2.util.StrutsTypeConverter;

public class EnvironmentConverter extends StrutsTypeConverter {
   @Override
   public Object convertFromString(Map context, String[] values, Class clazz) {
      Environment env = new Environment(values[0]);
      return env;
   }

   @Override
   public String convertToString(Map context, Object value) {
      Environment env  = (Environment) value;
      return env == null ? null : env.getName();
   }	
}

그만큼 EnvironmentConverter 확장 StrutsTypeConverter 클래스를 만들고 Struts에게 환경을 문자열로 또는 그 반대로 변환하는 방법을 알려줍니다. convertFromString()convertToString().

이제 애플리케이션에서 사용하기 전에이 변환기를 등록 해 보겠습니다. 변환기를 등록하는 방법에는 두 가지가 있습니다.

변환기가 특정 작업에서만 사용되는 경우 다음과 같이 이름이 지정되어야하는 속성 파일을 만들어야합니다. '[action-class]'converstion.properties.

우리의 경우에는 SystemDetails-converstion.properties 다음 등록 항목으로-

environment = com.tutorialspoint.struts2.EnvironmentConverter

위의 예에서 "environment"는 SystemDetails.java 클래스와 우리는 Struts에게 EnvironmentConverter 이 속성과의 변환을 위해.

그러나이 작업을 수행하지 않고 대신이 변환기를 전역 적으로 등록하여 응용 프로그램 전체에서 사용할 수 있도록 할 것입니다. 이렇게하려면 다음과 같은 속성 파일을 만듭니다.xwork-conversion.propertiesWEBINF/classes 다음 줄이있는 폴더

com.tutorialspoint.struts2.Environment = \
   com.tutorialspoint.struts2.EnvironmentConverter

이것은 단순히 변환기를 전역 적으로 등록하므로 Struts환경 유형의 객체를 만날 때마다 자동으로 변환을 수행 할 수 있습니다. 이제 프로그램을 다시 컴파일하고 다시 실행하면 다음과 같이 더 나은 출력을 얻을 수 있습니다.

분명히 이제 결과가 더 나아질 것입니다. 이는 Struts 변환기가 잘 작동 함을 의미합니다.

이것이 여러 변환기를 만들고 요구 사항에 따라 사용하도록 등록하는 방법입니다.