웹사이트 검색

초보자를 위한 Struts 자습서


Struts Tutorial for Beginners에 오신 것을 환영합니다. Struts는 Java 웹 애플리케이션을 구축하는 가장 오래된 프레임워크 중 하나입니다.

Struts 튜토리얼

스트럿츠 2

Apache Struts 2는 Java EE 웹 애플리케이션을 구축하기 위한 오픈 소스, 산업 표준, 유연하고 확장 가능한 프레임워크입니다. Struts 2는 OpenSymphony WebWork 프레임워크를 기반으로 합니다. Struts 2는 개발 및 구성 측면에서 매우 유연하며 Struts 2 프레임워크를 사용하여 웹 애플리케이션을 개발하는 것이 얼마나 쉬운지 살펴보겠습니다.

Struts 2 아키텍처 다이어그램

Struts 2 인터셉터

Struts 인터셉터는 요청이 처리되기 전과 후에 실행되는 서블릿 필터와 같습니다. 다른 작업에 대한 공통 작업을 수행하는 데 사용됩니다. 예를 들어 로깅, 세션 유효성 검사, 응답에 공통 헤더 추가 등

Struts 2 ValueStack 및 OGNL

ValueStack은 클라이언트 요청을 처리하기 위해 Struts 2에 의해 애플리케이션 데이터가 저장되는 스토리지 영역입니다. 데이터는 ThreadLocal을 사용하여 특정 요청 스레드에 특정한 값을 갖는 ActionContext 개체에 저장됩니다. OGNL(Object-Graph Navigation Language)은 ValueStack에 저장된 데이터를 조작하는 데 사용되는 강력한 표현 언어입니다. 아키텍처 다이어그램에서 볼 수 있듯이 인터셉터와 결과 페이지 모두 OGNL을 사용하여 ValueStack에 저장된 데이터에 액세스할 수 있습니다.

스트럿츠 2 액션

Struts 2 Action 구성 요소는 클라이언트 요청을 처리합니다. Struts 2는 Action 클래스를 생성하는 다양한 방법을 제공합니다.

  1. com.opensymphony.xwork2.Action 인터페이스 구현.
  2. com.opensymphony.xwork2.ActionSupport 클래스 확장. 일반적으로 요청을 다른 리소스로 전달하기 위해 빈 작업 클래스를 만드는 데 사용됩니다.
  3. @Actions 주석으로 클래스에 주석 달기.
  4. 클래스 명명 규칙에 따라 이름은 Action으로 끝나야 하며 execute() 메서드가 있어야 합니다.

스트럿츠 2 결과

결과 구성 요소는 일반적으로 클라이언트 응답에 대한 보기를 생성하는 JSP 또는 HTML 페이지입니다. Struts 2는 응답을 생성하기 위해 JSP 페이지에서 사용할 수 있는 자체 태그를 제공합니다. Struts 태그는 JSP 사용자 지정 태그의 좋은 예입니다.

Struts 2 선언적 아키텍처 및 배선

Struts 2는 액션 클래스와 결과 페이지에 대해 애플리케이션을 구성하는 두 가지 방법을 제공합니다.

  1. Struts XML 파일: WEB-INF/classes 디렉토리에 struts.xml 파일이 있으며 여기에서 애플리케이션 액션 클래스 및 결과 페이지를 구성할 수 있습니다.
  2. 주석: @Result 주석을 사용하여 구성 작업 클래스 및 관련 결과 페이지를 만들 수 있습니다.

애플리케이션을 구성하는 데 어떤 방법을 사용하든 최종 결과는 항상 동일합니다.

Struts 튜토리얼 - Hello World XML 기반 애플리케이션

pom.xml

pom.xml 파일을 열고 struts 코어 종속성을 추가하면 최종 pom.xml은 아래와 같습니다.

<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>Struts2XMLHelloWorld</groupId>
	<artifactId>Struts2XMLHelloWorld</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<dependencies>
		<dependency>
			<groupId>org.apache.struts</groupId>
			<artifactId>struts2-core</artifactId>
			<version>2.3.15.1</version>
		</dependency>
	</dependencies>
	<build>
		<sourceDirectory>src</sourceDirectory>
		<plugins>
			<plugin>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.6</source>
					<target>1.6</target>
				</configuration>
			</plugin>
			<plugin>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<warSourceDirectory>WebContent</warSourceDirectory>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
		</plugins>
		<finalName>${project.artifactId}</finalName>
	</build>
</project>

Struts 2 web.xml 구성

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter 필터를 웹 애플리케이션에 추가하고 Struts가 클라이언트 요청을 처리하도록 할 URL 패턴을 제공해야 합니다. web.xml은 아래와 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
	xmlns="https://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	<display-name>Struts2XMLHelloWorld</display-name>
	
	<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>

Struts 2 버전 2.1.3 이하의 경우 필터 클래스는 org.apache.struts2.dispatcher.FilterDispatcher였습니다.

Struts 튜토리얼 - 결과 페이지

애플리케이션에서 사용할 세 개의 JSP 페이지가 있으며 Struts 2 태그를 사용하여 JSP 페이지를 생성합니다. login.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<%-- Using Struts2 Tags in JSP --%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Login Page</title>
</head>
<body>
<h3>Welcome User, please login below</h3>
<s:form action="login">
	<s:textfield name="name" label="User Name"></s:textfield>
	<s:textfield name="pwd" label="Password" type="password"></s:textfield>
	<s:submit value="Login"></s:submit>
</s:form>
</body>
</html>

양식 필드 이름은 namepwd이며 Action 클래스에서 어떻게 사용되는지 살펴보겠습니다. welcome.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Welcome Page</title>
</head>
<body>
<h3>Welcome <s:property value="name"></s:property></h3>
</body>
</html>

요청 속성을 가져오는 데 사용할 수 있는 struts 태그 s:property에 주목하십시오. 이름은 login.jsp에서와 동일합니다. error.jsp

<%@ page language="java" contentType="text/html; charset=US-ASCII"
    pageEncoding="US-ASCII"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
    
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Error Page</title>
</head>
<body>
<h4>User Name or Password is wrong</h4>
<s:include value="login.jsp"></s:include>
</body>
</html>

이것은 오류 메시지를 추가하고 응답에 로그인 페이지를 포함하는 간단한 JSP 페이지입니다.

Struts 튜토리얼 - 액션 클래스

우리 애플리케이션에는 Struts 2 Action 인터페이스를 구현하는 Action 클래스가 하나만 있습니다. LoginAction.java

package com.journaldev.struts2.action;

import com.opensymphony.xwork2.Action;

public class LoginAction implements Action {
	
	@Override
	public String execute() throws Exception {
		if("pankaj".equals(getName()) && "admin".equals(getPwd()))
		return "SUCCESS";
		else return "ERROR";
	}
	
	//Java Bean to hold the form parameters
	private String name;
	private String pwd;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
}

액션 클래스는 login.jsp와 동일한 변수와 getter 및 setter 메소드를 가진 Java Bean이기도 합니다. Struts는 요청 매개변수를 작업 클래스 변수에 매핑하는 작업을 처리합니다.

Struts 자습서 - 구성 파일

애플리케이션 연결을 위해 XML 기반 구성을 사용하고 있으므로 struts.xml이라는 이름으로 WEB-INF/classes 디렉토리 내에 Struts 구성 파일을 생성해야 합니다. struts.xml

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

<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"https://struts.apache.org/dtds/struts-2.3.dtd">
<struts>

<package name="user" namespace="/User" extends="struts-default">
	<action name="home">
		<result>/login.jsp</result>
	</action>
	<action name="login" class="com.journaldev.struts2.action.LoginAction">
	<result name="SUCCESS">/welcome.jsp</result>
	<result name="ERROR">/error.jsp</result>
	</action>

</package>

</struts>

"home\ 액션의 경우 Action 클래스가 없고 하나의 결과만 있으므로 요청이 login.jsp 페이지로 전달됩니다. "login\ 액션의 경우 LoginAction이 액션 클래스이고 execute() 메서드가 "를 반환하면 SUCCESS” 요청은 welcome.jsp에서 처리되고 \ERROR”의 경우 error.jsp 페이지로 전달됩니다. namespace="/User”는 중요하며 액션 클래스에 액세스하기 위해 URL에서 사용되며 다른 모듈을 생성하기 위해 제공됩니다. 따라서 URL https://localhost:8080/Struts2XMLHelloWorld/User/home을 사용하여 애플리케이션에 액세스할 수 있습니다. .action URL은 Struts 1의 .do와 같이 Struts 2 액션의 기본 접미사인 .action으로 끝납니다.

Struts 튜토리얼 - Struts 2 Hello World 테스트

Struts2 Hello World 예제 프로젝트 다운로드

이것이 Struts 2 초보자 튜토리얼의 전부입니다. struts.xml 구성 파일을 사용하지 않고 주석을 사용하여 Struts 2 웹 애플리케이션을 생성하는 다음 기사를 확인하십시오.