[Struts 2] Struts2/iBatis 초기 세팅 , Struts2 예제
by 무작정 개발2022.03.11(54일 차) - 금요일
오늘부터 struts 2를 배운다
struts2 초기 세팅해주고 struts2를 오전에 간단하게 배우고 오후에는 Struts2로 답 변형 게시판 만들었다.
그래서 초기 세팅과 Struts2+iBatis로 만드는 답 변형 게시판을 따로 정리하고 포스팅할 예정이다.
오늘의 수업 내용
이번 글에서는 Struts2 + iBatis 초기 세팅에 대해 정리할 것이다.
Struts2 또한 Struts1와 초기 세팅이 크게 다른점은 없다.
Struts2 란?
Struts2 프레임워크는 JavaEE 기반의 웹어플리케이션 개발 시에, Model 2 기반의 개발을 쉽게 할 수 있도록
MVC패턴의 적용을 도와주는 프레임워크이다. Struts1 다음으로 나온 프레임워크가 Struts2이다.
Struts2 설치 및 초기 세팅
방법은 Struts1와 거의 유사하므로 자세한 방법은 Struts1 초기 세팅 글 참고하기!
(1) - Struts2 설치하기
https://struts.apache.org/download.cgi#struts2529
(2) - lib 추가하기
- 설치된 Struts2 에서 필요한 jar파일만 가져와서 lib에 추가했다. 그리고 Struts1에서 추가한 ojdbc, log4 j 등 복사
(3) - web.xml에 filter 작성
- 모든 URL이 struts2 환경으로 반영되도록 필터 설정
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>struts2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!-- Struts2 환경 -->
<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>
(4) - iBatis 세팅파일 가져오기
- Struts2에서도 iBatis를 쓰기 때문에 Struts1 프로젝트 폴더에서 관련 세팅 파일을 가져온다.
자세한 방법은 이전 iBatis 초기 세팅 글 참고하기!
(5) - Struts2 파일 세팅(폴더 생성하기)
WEB-INF 폴더 안에 classes 폴더를 생성해주고, 위의 표시된 3가지 파일을 만들어준다.
xml파일은 new -> other에서 xml을 선택해서 생성해주고, struts.properties는 new -> file로 가서 struts.properties로
파일 네임을 작성해서 생성해주면 된다.
struts.properties - (환경설정 파일)
- UTF-8로 인코딩
- Struts(스트럿츠)의 기본 확장자
- multipart = 파일 업로드
- 환경설정 파일인데, struts-default.xml는 Struts2-core(lib)에 존재 / 우측 struts.xml 는 임의 지정(내가 만든 환경설정 파일들을 읽어라)
struts.xml
<!DOCTYPE struts
PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
Struts2에 맞게 DOCTYPE 주소를 적어준다.
package name는 default로 해줬고, extends에는 환경설정 파일(struts-default)을 입력해준다.
아래에 있는 <include file >에는 xml파일이 생길 때마다 추가해야 한다.
struts-board.xml는 답변형 게시판에 관련된 xml 파일이고 다음 글에서 다룰 예정이다.
struts-test.xml는 Struts2 예제에 관련된 xml이다.
struts-temp.xml
temp.xml은 이전에 했던 temp.xml과 동일하기 기본적인 양식이 담긴 xml 파일이다. 사용할 때마다
복사해서 파일명을 변경해주고, 소스를 작성해주면 된다.
package name은 패키지 고유 이름(temp)이며 다른 파일에서 이름으로 호출하지 않는다.
extends는 일단 struts-default를 적어놓고, namespace는 경로의 앞부분을 입력해놓았다.
여기까지 하면 Struts2 + iBatis 초기 세팅 끝!
Struts2 예제
- 입출력 기능 구현
이번 예제는 write.jsp에 아이디, 비밀번호, 이름을 입력하면 view.jsp으로 넘겨 보여주는 예제이다.
(1) - com.package 생성 및 UserDTO, TestAction 클래스 생성하기
UserDTO 클래스 생성
- 사용할 변수들을 선언
package com.test2;
public class UserDTO {
private String userId;
private String userPwd;
private String UserName;
private String mode;//하나의 파일을 두가지 동작으로 사용하려고 생성
//getter/setter 작성
}
userId, userPwd, userName은 사용할 변수들이고,
mode는 하나의 파일로 2가지 동작으로 사용하려고 생성했다. 내용이 뭐에 따라 입력창을 수정 창으로 변경할 수도 있음
TestAction 클래스 생성 - (DAO클래스 역할)
- ActionSupport 클래스를 상속
- Prerparable, ModelDriven 인터페이스를 다중 상속
package com.test2;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.opensymphony.xwork2.Preparable;
public class TestAction extends ActionSupport
implements Preparable, ModelDriven<UserDTO> { //Model은 데이터에 해당
//Servlet에서는 if-else if문으로 사용했고,
//doPost,doGet메서드를 반드시 생성했는데
//Struts1부터는 메서드로 분해하여 호출한다.
//Struts2의 기본형식은 아래와 같다. getDTO(), getModel(), prepare()
private static final long serialVersionUID = 1L;
private UserDTO dto;
//request.setAttribute("dto", dto);를 대신해줌 -> 아래에있는 getDto가
//애가 아이디 패스워드 메세지를 modelDriven으로 넘겨준다.
public UserDTO getDto() {
return dto; //getParameter 역할
}
//ModelDriven 인터페이스를 오버라이드 = getModel()
// - 리턴(반환)되는 dto를 ModelDriven이 가져감
@Override
public UserDTO getModel() {
return dto;
}
//Preparable 인터페이스를 오버라이드 = prepare()
// - UserDTO 객체 생성
@Override
public void prepare() throws Exception {
dto = new UserDTO(); //객체 생성
//호출하는 명령어가 없어도 Struts2가 알아서 해준다.
}
//Struts2에서는 기본적으로 매개변수를 입력하지 않아 메서드 코딩이 단순&가벼워진다.
// 그래서 사용할때마다 요청을 해야 함.
public String created() throws Exception {
if(dto==null||dto.getMode()==null||dto.getMode().equals("")) {
return INPUT;//스트럿츠에 내장되있는 변수 INPUT 안에 input이 들어있다.
}
//넘길때 request를 써야해서 만든다.( 스트럿츠2는 필요할때 만든다.)
HttpServletRequest request = ServletActionContext.getRequest();
//request로 넘김
request.setAttribute("message", "스트럿츠2...");
//request.setAttribute("dto", dto); //로 Struts1에서 데이터를 넘겼는데
//Struts2에서는 자동으로 getDto 메서드를 통해 데이터를 넘긴다.
return SUCCESS;
}
}
하단에 있는 created() 메서드는 xml에서 페이지를 넘길 때 사용하는 메서드이다.
if(dto==null||dto.getMode()==null||dto.getMode().equals("")) {
return INPUT;//스트럿츠에 내장되있는 변수 INPUT 안에 input이 들어있다.
}
dto가 null이거나 dto.getMode() -> 하단 write.jsp에 있는 mode에 값을 주지 않았다면 INPUT이라는 값을 반환한다.
INPUT는 내장 변수이며 소문자 input이 들어있다.
if문이 만족하지 않으면 HttpServletRequest를 만든다.
Struts2는 1과 다르게 필요할 때마다 만들어 사용하기 때문에 request를 사용하기 위해 HttpServletRequest를 만든다.
이때는 SUCCESS를 반환한다.
(2) - struts-test.xml 생성 및 작성
- 웹에서 넘어오는 경로, 값을 받아 나누어 줌
<?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>
<!-- struts.xml의 default랑 맞춰줘야한다. -->
<!-- package name는 사용자 정의 -->
<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="com.test2.TestAction" method="created"> 부분을 보면
클라이언트의 요청 URL에 의해 write.action이 올 경우 com의 test2안에 있는 TestAction 클래스의
created() 메서드를 호출하라는 뜻이다.
<result name="input">/test2/write.jsp </result>
<result name="success">/test2/view.jsp </result>
여기를 보면 created() 메서드 반환 값이 'input'이면 write.jsp를 연결하고, 반환 값이 'success'이면 view.jsp를 연결한다.
그리고 Struts2는 포워드 하면서 dto를 알아서 함께 가져가서 하단에 있는 view.jsp에 가져간 데이터를 출력해준다.
(3) - write.jsp(데이터 입력 페이지) / view.jsp(데이터 출력 페이지) 생성하기
write.jsp - 데이터 입력 페이지
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="<%=cp%>/modelDri/write.action" method="post">
아이디 : <input type="text" name="userId"/><br/>
패스워드 : <input type="password" name="userPwd"/><br/>
이름 : <input type="text" name="userName"/><br/>
<input type="hidden" name="mode" value="save">
<input type="submit" value=" 보내기 "/><br/>
</form>
</body>
</html>
form action에는 가상 주소를 입력하고, 전달 방식은 post 방식이다.
보내기 버튼을 누르면 submit이 action을 찾아가 위의 가상 주소로 이동한다.
넘어갈 때 <input> type을 hidden으로 줘서 mode에 save라는 값을 담아서 보낸다.
view.jsp - 데이터 출력 페이지
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
request.setCharacterEncoding("UTF-8");
String cp = request.getContextPath();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
아이디 : ${dto.userId }<br/>
패스워드 : ${dto.userPwd }<br/>
이름 : ${dto.userName }<br/>
메세지 : ${message }<br/>
</body>
</html>
Struts2는 포워드하면서 dto를 알아서 함께 가져가서 하단에 있는 view.jsp에 가져간 데이터를 출력해준다.
TestAction에서 dto에 값을 넣어줬기 때문에 아이디, 패스워드, 이름은 dto.userId 식으로 작성해줘야 한다.
앞에 dto. 을 안 쓰면 값이 출력이 안된다.
메시지는 request.setAttribute로 넘겼기에 message만 작성해도 된다.
끝! 다음 글에서는 Struts2 + iBatis를 사용하여 답 변형 게시판에 대해 포스팅할 예정이다!
2021년 12월 21일 날 국비교육을 시작해서 벌써 22년 3월 중순이다. 벌써 3개월이라는 시간이 지났고, 5월 말에 수료를
한다. 시간이 참 빠르다. 남은 2개월도 파이팅!!
'Back-End > JSP & Struts & JDBC' 카테고리의 다른 글
[Struts2] Struts2 + iBatis를 이용한 답변 형 게시판 (0) | 2022.03.13 |
---|---|
[Struts1] Struts1 + iBatis 를 사용한 파일 업로드 (0) | 2022.03.10 |
[Struts1] Struts1/iBatis 게시판 만들기 (0) | 2022.03.09 |
iBatis(2.0) 설치 및 초기 세팅 (0) | 2022.03.08 |
[Struts 1] 설치 및 초기 세팅, 게시판 만들기 (0) | 2022.03.07 |
블로그의 정보
무작정 개발
무작정 개발