아무튼 개발
article thumbnail
반응형

Struts1에 이어 Struts2에 대해 세팅과

ModelDriven, Preparable를 사용한 예제를 알아보겠다.

 


 

Struts2 세팅

 

지난 Struts1의 초기 세팅 게시글의 내용에서

Struts1을 2로 바꾸어 똑같이 파일을 만들어 주고

 

https://struts.apache.org/download.cgi#struts2529

 

Download a Release

 

struts.apache.org

사이트에서 struts-2.3.10-all.zip 파일을 다운받아서 lib 폴더에 넣어준다.

 

Struts2 세팅 파일

 

 

struts.properties

 

1. UTF-8로 인코딩

2. 스트럿츠의 움직이는 확장자

3. multipart = 파일업로드

4. 기본적인 환경 설정 파일. 총 2개로 왼쪽꺼는 struts2-core(lib)에 있는 것이고 오른쪽 파일은 임의 지정

 

 

struts.xml

 

struts2에 맞게 상단의 DOCTYPE 주소를 변경해준다.

 

패키지의 extends 에는 위의 환경설정 파일 인 struts-default를 입력한다.

하단에 include는 새로운 xml 파일이 생길 때마다 추가해야 한다.

 

 

struts-temp.xml
<struts>

<package name="temp" extends="default" namespace="/temp">
</package>

</struts>

 

가장 기본적인 양식이며 이후 내용에 맞게 파일명을 변경하고

파일에 코딩을 추가해주면 된다.

 

name은 패키지의 고유 이름이며 다른 파일에서 이름으로 호출하지는 않는다.

extends는 위의 struts.xml의 name과 같아야 하므로 'default'로 입력한다.

namespace는 경로의 첫번째 부분을 입력해준다.

 

 

 

 

예제

 

아이디, 비밀번호, 이름을 입력하는 입력창과 리스트를 구현하는 코딩이다.

 

UserDTO.java

사용할 변수를 선언해준다.

 

public class UserDTO {
	
	private String userId;
	private String userPwd;
	private String userName;
	
	private String mode;

 

mode는 해당 내용이 어떤건지에 따라 입력창을 수정창으로 바꿀 수도 있다.

지금은 간단하게 알아볼 것이다.

 

추가로 게터, 세터까지 함께 해준다.

 

 

TestAction

실행될 변수와 메소드에 대해 모든 코딩을 해준다.

 

public class TestAction extends ActionSupport implements Preparable, ModelDriven<UserDTO>{

	private static final long serialVersionUID = 1L;
	
	private UserDTO dto;

	public UserDTO getDto() {
		return dto;	
	}

	@Override
	public UserDTO getModel() {
		return dto;
	}

	@Override
	public void prepare() throws Exception {
		dto = new UserDTO();
	}​

 

ActionSupport 클래스를 상속하고 

Preparable, ModelDriven 인터페이스를 다중 상속하였다.

 

앞의 UserDTO를 호출하여 변수 dto로 선언하였으며

게터, 세터 중 게터만 입력했다.

이는 request.setAttribute("dto", dto);와 같이 값을 넘겨주는 역할을 한다.

 

상속한 인터페이스를 각각 오버라이딩 해주었는데

먼저 둘 중 밑의 prepare() 메소드는 Preparable를 오버라이드한 것이며

UserDTO 객체를 생성하였다.

 

그 다음 위에 getModel()메소드는 ModelDriven 의 메소드이며

반환한 dto를 ModelDriven이 가져간다.

 

public String created() throws Exception{
		
		if(dto==null||dto.getMode()==null||dto.getMode().equals("")) {
			return INPUT;
		}
		
		HttpServletRequest request = ServletActionContext.getRequest();
		
		request.setAttribute("message", "스트럿츠2...");
        
		return SUCCESS;		
	}

 

xml에서 페이지를 넘길 때 사용할 created 메소드이며, 밑의 내용에서 다시 한번 나올 것이다.

dto의 데이터 값이 null이거나 또는 아래의 write.jsp와 달리 mode에 값을 주지 않았다면

INPUT이라는 값을 반환한다. 내장되어있는 반환값이며 소문자로도 담겨있다.

 

그렇지 않다면 HttpServletRequest를 만든다.

Struts2는 전과 달리 사용하지 않을 매개변수들을 무겁게 갖고 있지 않고

필요할 때마다 만들어서 사용하기 때문에 더욱 가벼워졌다.

따라서 request를 사용하기 위해 만든 것이다.

 

나아가 이 경우에는 SUCCESS라는 예약어를 반환해준다.

 

 

write.jsp

화면에 구현될 입력창이다.

 

<body>
<form action="<%=cp%>/modelDri/write.action" method="post">

아이디 : <input type="text" name="userId"/><br/>
패스워드 : <input type="text" name="userPwd"/><br/>
이름 : <input type="text" name="userName"/><br/>

<input type="hidden" name="mode" value="save">
<input type="submit" value=" 보내기 "/><br/>

</form>
</body>

 

action에는 가상의 주소를 입력하였으며 post방식으로 넘길 것이다.

 

아이디부터 이름까지 input으로 입력하도록 만들었으며

'보내기'를 누르면 submit으로 인해 action의 주소로 이동하게 한다.

넘어갈 때 인풋 타입에서 hidden을 사용하여 mode에 save라는 값을 담아서 보낸다.

 

 

struts-test.xml

웹페이지에서 넘어오는 경로와 값을 받아 나누어 준다.

 

<struts>
<package name="test2" extends="default" namespace="/modelDri">

	<action name="write" class="com.test2.TestAction" method="created">
		<result name="input">/test2/write.jsp</result>
		<result name="success">/test2/view.jsp</result>	
	</action>

</package>
</struts>

 

action 속의 name이 write라는 것은 경로에 있는 부분이며

class의 파일로 이동하도록 한다. 또한 'created'라는 메소드가 적힌 곳으로 넘어가는 것이며

이는 위의 TestAction 파일에서 본 메소드이다.

 

TestAction에서 반환된 값이 input이라면 write.jsp

success라면 view.jsp로 이동하게 한다.

 

그렇다면 마지막으로 view.jsp까지 설명하겠다.

 

 

view.jsp

화면에 구현될 view.jsp 코딩이다.

 

<body>

아이디: ${dto.userId }<br/>
패스워드: ${dto.userPwd }<br/>
이름: ${dto.userName }<br/>

메세지: ${message }<br/>

</body>

TestAction에서 dto에 값을 넣어주었기 때문에 

view.jsp에서 EL 안에 dto.~으로 값을 불렀다.

 

메세지는 setAttribute를 통해 따로 작성해준 것이기에 단독으로 입력하였다.

 

 

 

3월 11일 금요일 수업 🌕
반응형
profile

아무튼 개발

@릴쥬

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...