Dev
- jquery mobile 공부 샘플 소스 2013.02.24
- Js, Ajax Example 2013.02.23
- Struts2 Action과 Value Object 매핑 2013.02.21
- Struts2 기본 셋팅과 사용법 2013.02.21
- [iBatis] resultMap, resultClass, parameterClass 에 관한 고찰 2013.02.19
- URI Encoding 2013.02.17
- 스트럿츠2 커스텀태그 2013.02.17
- Alter Table - 컬럼 추가, 삭제, 변경 2013.02.13
- struts.properties 2013.02.08
- Eclipse 자동 주석에 대해 ... 2013.02.08
jquery mobile 공부 샘플 소스
Js, Ajax Example
'Client Standard > Ajax' 카테고리의 다른 글
[Jsonp] POST method 데이터전송 (0) | 2017.03.30 |
---|---|
[Ajax] Http/Https 크로스도메인 문제 (0) | 2017.03.27 |
[AJAX] DB 데이터 받아오기 (0) | 2015.07.29 |
Struts2 Action과 Value Object 매핑
Struts2로 게시판에 관련되어 스트럿츠 값을 어떻게 전달하고 받는지 알아보자.
struts.xml
<action name="list" class="jh.board.action.BoardListAction">
<interceptor-ref name="prepare" />
<interceptor-ref name="modelDriven" />
<interceptor-ref name="params" />
<result name="success" type="dispatcher">/jh/jsp/board/list.jsp</result>
</action>
/list.action 이라고 url에 친다면 BoardListAction을 거쳐 return 값이 SUCCESS 라면
/jh/jsp/board/list.jsp 로 이동하게 된다.
<interceptor> 들도 나오는데 간단히 설명 하자면 Action에 있는 실행 메소드를 타기 전과 후에 prepare과 modelDriven 메소드를 함께 탄다는 것이다. params은 당연히 파라미터값들을 캐치하고 사용하기 위함이다.
BoardListAction.java
public class BoardListAction extends ActionSupport implements Preparable , ModelDriven<BoardVO>{
private BoardBO bo = new BoardBO();
private List<BoardVO> boardList;
private BoardVO vo;
public String execute() throws Exception {
boardList = bo.list(vo);
return SUCCESS;
}
public void prepare() throws Exception {
vo = new BoardVO();
}
public BoardVO getModel() {
return vo;
}
public List<BoardVO> getBoardList() {
return boardList;
}
public void setBoardList(List<BoardVO> boardList) {
this.boardList = boardList;
}
}
간단히 적어 보겠다.
이 리스트 페이지에는 검색할수 있는 기능이 있다.
그렇다면 우선 검색하는 값이 있는지 부터 프레젠테이션 계층에서 받아서 넘겨 줘야 한다.
그 값을 받기 위해 BoardVO vo;를 선언 하였고,
prepare()과 geModel()을 선언 하였다.
우선 prepare() 메소드는 Preparable 클래스에 있는 함수로 BoardListAction에서 implements 후 오버라이딩 한 메소드이다.
이 메소드는 해당 Action의 직접적인 로직을 수행하는 execute() 메소드 이전에 받은 값들을 Object 형으로 맵핑 및 저장해놓는 역할을 한다고 보면 된다.
그리하여 execute() 메소드에서 bo.list(vo); 하여 검색하고자 하는 value를 맵핑해놓은 Object형인 vo를 비즈니스로직단인 bo.list 메소드에 인자로 던져 준다. 그리고 최종적으로 검색을 했든 안했든 게시판 목록들을 List<BoardVO> 형태인 boardList 에 담아 둔다.
execute() 메소드에서 return SUCCESS;를 하는데 여기서 struts.xml에서 명시되어있는 list.jsp에 vo값들을 또다시 던져 주게 된다.
이것이 바로 getModel()의 return vo; 의 역할이라고 보면 되겠다.
그렇다면 List<BoardVO> 형인 boardList 는 어떻게 쓰이느냐 그건 list.jsp 안에서 볼수 있다.
<s:iterator value="boardList" status="stat">
</s:iterator>
위와 같이 boardList 명으로 명시 되어 있는 List 형을 반복하여 돌리는 struts 커스텀태그 iterator 되시겠다.
저와 같이 돌린 후 안에
<s:property value="title" />
프로퍼티 값들을 넣어놓으면 List의 수만큼 돌면서 게시판 목록 row에 값들이 뿌려지게 된다.
즉, DB에 있는 값만 프레젠테이션 계층에 뿌려줄 땐 prepare, ModelDriven을 사용할 필요가 없다. 그저 setter/getter 만 이용하면 된다.
하지만 게시판 jsp 페이지에서 다른 페이지로 이동하거나 어떤 값들을 전달하여야 할때 그 값이 Object 형일 때는 prepare()과 getModel() 메소드를 이용 해야 한다.
물론 여기서 다른페이지로 이동할 때 어떤 값이 Object 형이 아닐 때는 단순히 setter/getter 메소드만 이용하면 편하다.
'Server Enterprise > Struts2' 카테고리의 다른 글
[Struts2] File Download (0) | 2013.05.09 |
---|---|
[Struts2] Multi File Upload (0) | 2013.05.09 |
Struts2 기본 셋팅과 사용법 (0) | 2013.02.21 |
스트럿츠2 커스텀태그 (0) | 2013.02.17 |
struts.properties (0) | 2013.02.08 |
Struts2 기본 셋팅과 사용법
Struts2 Action에서 어떻게 프레젠테이션 계층 값들을 받고 다시 return 해주는지에 관해 몇글자 적어 보려 한다.
MVC 패턴을 숙지 하고 있다면 이해하는데 별 어려움은 없지 않을까 필자는 그렇게 생각 한다.
차근차근 값들이 어떻게 넘어가고 뿌려지는지 순서에 초점을 맞추어 작성 하겠다.
자세한 내용은 또 따로 정리할 내용 이다. (귀찮아서 안할지도 모른다)
우선 원리에 대해 처음부터 상세히 적어 보려 한다. 처음 접하는 분들도 눈으로 따라오면서 흐름을 이해하기 바란다.
Struts로 개발할 해당 프로젝트의 web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
url의 모든 패턴값들을 struts2라는 필터명으로 맵핑을 한다. 어디로? 스트럿츠의 struts2.dispatcher 디스파처로 처리하게 정의 한다.
struts.xml
<struts>
<package name="board" extends="struts-default">
<action name="writeForm">
<result name="success">/jh/jsp/board/writeForm.jsp</result>
</action>
</package>
</struts>
위와 같이 struts.xml을 정의 하면 url 입력창에 /writeForm.action 이라고 치면
result 값으로 맵핑된 /jh/jsp/board/writeForm.jsp로 이동하게 된다.
여기서 한가지 팁이 있다면 struts.properties 파일로 .action을 변경시킬 수 있다.
일단 기본적으로 아무런 스트럿츠 설정이 없다면 /write.action 해야하는게 맞다.
프로젝트에 struts.action.extension=do,action 내용이 적힌 strtus.properties 파일을 추가 하여 사용하면 /writeForm.do 하면 result로 맵핑된 /wrtieForm.jsp로 이동하게 된다.
위와 같이 action 태그에 class="" 설정이 되어있지 않다면 action 클래스를 사용하지 않는 것이다.
( Servlet MVC 에서 보자면 컨트롤러를 거치지 않고 그냥 바로 JSP를 VIew 해준 것이다.)
일단 Struts 셋팅과 간단한 url 맵핑에 대해 알아보았다.
다음엔 좀 더 심화된 Struts 사용법에 대해 알아 보도록 하자.
'Server Enterprise > Struts2' 카테고리의 다른 글
[Struts2] File Download (0) | 2013.05.09 |
---|---|
[Struts2] Multi File Upload (0) | 2013.05.09 |
Struts2 Action과 Value Object 매핑 (0) | 2013.02.21 |
스트럿츠2 커스텀태그 (0) | 2013.02.17 |
struts.properties (0) | 2013.02.08 |
[iBatis] resultMap, resultClass, parameterClass 에 관한 고찰
iBatis 는 실제적으로 많이 사용 하고 있거나, 그렇지 않으면 앞으로 사용 할 때
굉장히 헷갈리는 부분이 있다.
바로 어떻게 value object와 column name을 맵핑 시킬 것인가,
혹은 값들을 어떻게 jsp에 뿌릴 것 인가, 즉슨 자바 코드에 어떻게 담아서 운반 할 것인가
에 대해 많은 고민이 있다.
이제 때에 맞는 iBatis value 맵핑에 대해 알아보자.
우선, 게시판을 예로 들겠다.
1. 글 작성 후 글을 DB에 insert 시킬 시
여기선 아마 write.jsp 라는 페이지에서 form값을 vo에 담아 controller 에다 넘겨 줄 것이다.
// vo 객체를 인스턴스화 하여 가져온다
<typeAlias alias="boardVo" type="jh.board.vo.BoardVO"/>
<insert id="write" parameterClass="boardVo">
이렇게 parameterClass는 vo값을 insert만 하고 아무런 result값도 가져오지 않을 때 주로 쓰인다.
2. 글 목록들을 Select 할 때
여기선 객체 하나만 가져오는게 아니라, 객체의 리스트 제네릭을 리턴 받는다.
<resultMap id="BoardResult" class="boardVo">
<result property="num" column="num" columnIndex="1" />
<result property="author" column="author" columnIndex="2" />
<result property="title" column="title" columnIndex="3" />
<result property="content" column="content" columnIndex="4" />
<result property="writeday" column="writeday" columnIndex="5" />
<result property="readcnt" column="readcnt" columnIndex="6" />
</resultMap>
<select id="list" resultMap="BoardResult" parameterClass="boardVo">
resultMap을 이용하여 boardVo 객체의 겟/셋 변수명과 DB의 column 명을 맵핑 한 후
그 결과를 조회하여 resultMap 을 Controller단 까지 넘겨 받는다.
여기서 유심히 볼 것은 그저 select만 한다면 paramterClass가 필요 없다.
하지만 검색 시 검색명과 검색값을 select 문에 넣기 위해 paramterClass가 또 쓰여 졌다.
3. 상세글이나 업데이트 시
<select id="retrieve" resultMap="BoardResult">
<select id="updateForm" resultMap="BoardResult">
위와 마찬가지로 resultMap을 사용 하여 값을 return 받아 프레젠테이션 층에 넘겨 준다.
4. 그런데 resultClass 는 어디서 사용 될까 ?
<select id="count" resultClass="Integer">
SELECT
COUNT( num )
FROM board
</select>
위와 같이 그냥 Integer(정수형) 으로 num의 count만 받고 싶다면 저렇게 쓰면 된다.
물론 Delete문과 같이 리턴 받을게 없고 그저 삭제만 시킨다 함은 resultMap, resultClass를 쓸 필요가 없는 것이다.
요약 하자면,
resultMap - Object를 return 받을 때 사용
resultClass - Integer 등 1개의 value형을 return 받을 때 사용
parameterClass - Object를 ibatis DML(#num#, #title#)문에 적용 시키고 싶을 때 사용
'Database > MyBatis' 카테고리의 다른 글
[Procedure] ibatis 호출 (0) | 2015.02.12 |
---|---|
[Spring] Repository sqlMapClientTemplate 맵핑 (0) | 2014.08.03 |
org.springframework.dao.DataAccessResourceFailureException / RecoverableDataAccessException (0) | 2014.03.25 |
[iBatis] Multi Insert 시 List 형태와 Map 형태 (0) | 2014.02.24 |
[iBatis] resultMap 할 시 값이 return 되지 않는 현상 (0) | 2013.02.25 |
URI Encoding
우리가 보통 게시판 검색이라던가 어떤 text form에서 값을 넘길 때,
jsp든 sever page든 모두 UTF-8로 인코딩 선언을 해놓아도 값 들이 깨지는 경우가 있다..
이럴 경우는 이렇게 해보자.
1. 우선 JSP 페이지의 인코딩을 모두 같은 인코딩방식으로 선언 해 준다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
2. 해당 프로젝트의 web.xml 설정
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
참고로 본인은 Struts2를 개발 하여서 저 filter 태그 안에 init-param 태그를 선언 해준다 (<init-param>으로 부터 아래 4줄)
3. tomcat 및 weblogic Was의 server.xml
여기가 제일 중요하다.
<Connector connectionTimeout="20000" port="10000" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8" />
아 그런데, 본인은 위 설정만 해줘도 되더라. (이상하게 아래 코드를 넣으니 에러가 났다.. 그이유는 모르겠다)
<Connector executor="tomcatThreadPool"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
useBodyEncodingForURI="true"/>
우선은 위설정 해보고 안되면 밑 설정을 해보되 둘다 했을 때 에러 날 시, 위 Connector만 설정 해보자.
'Server Enterprise > Doc' 카테고리의 다른 글
[Templet & Callback] 패턴 (0) | 2014.01.24 |
---|---|
[JSPF] Jsp Include 방식의 차이와 JSPF 설명 (0) | 2013.10.30 |
객체지향 프로그래밍(object-oriented programming) 캡슐화(Encapsulation) (0) | 2013.01.08 |
Servlet 과 JSP에 대해 주저리 (0) | 2013.01.07 |
EJB (Enterprise JavaBean)에 관해 주저리. (0) | 2013.01.05 |
스트럿츠2 커스텀태그
스트럿츠 커스텀 태그 ...
Action에서 ModelDriven 으로 객체를 return vo; 해준다면,
ibatis에서 resultMap으로 받은 객체를 jsp페이지에서 뿌려줄수 있다.
기본적으로 VO에 searchValue를 받았다면 jsp 커스텀 태그에선 아래와 같이 뿌려줄 수 있다.
<s:property value="%{searchValue}"/>
기본적으로 변수 선언과 if문에 대해서 살펴 보자.
<s:set name="searchValue" value="%{searchValue}" />
위는 action에서 받은 객체를 변수 선언 하는 법이다.
<s:set name="title" value="%{'title'}" />
위는 기본적으로 title이라는 String 값을 title이란 네임으로 변수 선언하는 법이다.
이 2개를 if문으로 매칭하고 싶다면 아래와 같이 쓰면 된다.
<s:if test="%{#searchItem == #title}"></s:if>
<s:if test="%{curPage == 1}"></s:if> <!-- 숫자 비교 -->
커스텀 태그로 for문을 만들고 싶다면 s:iterator 를 쓰면 된다.
아래와 같이, 일단 bean 설정을 한 뒤
<s:bean name="org.apache.struts2.util.Counter" id="pageCounter">
<s:param name="first" value="1" />
<s:param name="last" value="10}" />
</s:bean>
<s:iterator value="pageCounter" status="stat">
<span><s:property value="%{pageCounter.current}" /></span>
<s:/iterator>
위처럼 iterator를 사용하면
<span>1</span> ... <span>10</span>
까지 출력이 된다. 이해가 되지 않는다면 구글찌잉... 께 물어보자.
'Server Enterprise > Struts2' 카테고리의 다른 글
[Struts2] File Download (0) | 2013.05.09 |
---|---|
[Struts2] Multi File Upload (0) | 2013.05.09 |
Struts2 Action과 Value Object 매핑 (0) | 2013.02.21 |
Struts2 기본 셋팅과 사용법 (0) | 2013.02.21 |
struts.properties (0) | 2013.02.08 |
Alter Table - 컬럼 추가, 삭제, 변경
# test table 생성
create table test (
name varchar(10)
);
# test table에 osy란 number(10)타입의 컬럼 추가
SQL > alter table test add(osy number(10));
# test table에 osy 컬럼명을 osy88 로 컬럼명 변경
SQL > alter table test rename column osy to osy88;
# test table에 osy88 컬럼 데이터 타입 변경
SQL > alter table test modify(osy88 varchar(10));
# test table에 osy88 컬럼 삭제
SQL > alter table test drop(osy88);
'Database > Oracle' 카테고리의 다른 글
[OUTER JOIN] sql outer join (0) | 2013.12.04 |
---|---|
Outer Join (LEFT, RIGHT, FULL OUTER JOIN) (0) | 2013.12.03 |
Oracle 자동 증가 컬럼(Sequence) 사용 (0) | 2013.02.06 |
Oracle auto-increment trigger 형식 (0) | 2013.02.06 |
Oracle Tablespace (0) | 2013.01.13 |
struts.properties
struts.i18n.reload=true
struts.devMode=false
struts.configuration.xml.reload=true
struts.configuration.package = org.apache.struts2.showcase
struts.custom.i18n.resources = globalMessages
struts.url.http.port = 8080
struts.serve.static = true
struts.serve.static.browserCache = false
struts.multipart.parser=jakarta
## struts.multipart.saveDir is Temp Directory
struts.multipart.saveDir=D:\\Users\\wjdns\\tmp
## struts.multipart.saveDir=C:\\Users\\vgate\\tomcat\\webapps\\ROOT\\upload
struts.multipart.maxSize=52428800
### Used by the DefaultActionMapper
### You may provide a comma separated list, e.g. struts.action.extension=action,jnlp,do
struts.action.extension=do,action
'Server Enterprise > Struts2' 카테고리의 다른 글
[Struts2] File Download (0) | 2013.05.09 |
---|---|
[Struts2] Multi File Upload (0) | 2013.05.09 |
Struts2 Action과 Value Object 매핑 (0) | 2013.02.21 |
Struts2 기본 셋팅과 사용법 (0) | 2013.02.21 |
스트럿츠2 커스텀태그 (0) | 2013.02.17 |
Eclipse 자동 주석에 대해 ...
프로젝트 개발시, 이클립스의 환경셋팅중 하나인 자동 주석은 여러모로 쓸모가 많다.
주석을 달아야 할 부분은 크게 3가지로 나뉜다. (개인적인 생각이다.)
Java, Jsp, Xml
1. Java
java는 class와 method 바깥에 주석이 달리도록 하면 좋다.
Window > Preferences > Java > Code Style > Code Templates > Comment
까지 들어간다.
Comment > Types : Class 상단 Import 파일 하단에 위치 한다.
sample)
/**
* @Package Name : ${package_name}
* @FileName : ${file_name}
* @작성일 : ${date}
* @작성자 : 이재희
* @프로그램 설명 :
*/
Comment > Methods : Class 하위 Method 상단에 위치 한다.
sample)
/**
* @Method Name : ${enclosing_method}
* @작성일 : ${date}
* @작성자 : 이재희
* @param :
* @Method 설명 :
* ${tags}
*/
2. Jsp
Jsp는 Preferences에서 Web 안에 존재 한다.
Window > Preferences > Web > JSP Files > Editor > Templates
까지 들어간다.
Templates > New JSP File (html) 을 Edit 해준다.
* 참고로 위와 같이 설정 시, HTML이나 그냥 File로 jsp를 만들거나 하면 주석이 달리지 않는다.
(JSP File만 주석이 설정 된다)
sample)
<%
/* =================================================================
*
* 작성일 : ${date}
*
* 작성자 : 이재희
*
* 상세설명 :
*
* =================================================================
* 수정일 작성자 내용
* -----------------------------------------------------------------------
*
* =================================================================
*/
%>
3. Xml
Xml은 찾기가 쉽다. Xml 에 있겠지 뭐...
XML > XML Files > Editor > Templates
까지 들어간다.
Templates > xml declaration 에서 Edit 해준다.
xml declaration 의 default 주석은
<?xml version="1.0" encoding="${encoding}"?>
라고 달려 있는데, 저 주석은 건들지 않고 추가 하고 싶은 주석을
저 XML 하단에 작성하여 Edit 해준다.
sample)
<?xml version="1.0" encoding="${encoding}"?>
<!--
* =================================================================
* 작성일 : ${date}
*
* 작성자 : 이재희
*
* 상세설명 :
*
* =================================================================
* 수정일 작성자 내용
* =============================
*
* =================================================================
-->
'IDE > Eclipse' 카테고리의 다른 글
[encoding] JSP 저장시 ISO-8859-1 인코딩 에러 (0) | 2013.10.25 |
---|---|
[PhoneGap] 이클립스 폰갭 설정 (0) | 2013.07.02 |
[Android] 이클립스 keystore (0) | 2013.07.02 |
[Android] 안드로이드 개발을 위한 이클립스 셋팅 (0) | 2013.07.01 |
Eclipse (IDE) Document Default Encoding 설정 방법 (0) | 2013.02.27 |