System.getProperty() 용법, 시스템 프로퍼티

시스템 프로퍼티란 시스템 환경에 관한 정보를 말한다.
System 클래스에 있는 getProperty() 메소드를 이용하면, 현재 사용하고 있는 환경 정보를 얻을 수 있다.

import java.util.*;
.
.
String version = System.getProperty("java.version");


주요 프로퍼티는 아래와 같다.

java.version : Java의 버전 : 1.4.2_13

Java.vendor : Java의 벤더 (공급자) : Sun Microsystems Inc.

java.vendor.url : Java의 벤더의 URL : http://java.sun.com

java.home : Java를 인스톨한 디렉토리 : c:\j2sdk1.6.2_13

java.class.version : Java 클래스의 버전 : 48

java.class.path : Java 클래스가 존재하는 경로 : c"\Java

java.ext.dir : 확장기능 클래스를 포함하는 디렉토리 : null (미설정의 경우)

os.name : OS의 이름 : Window 7

os.arch : OS의 아키텍처 : x86

os.version : OS 의 버전 : 6.1

file.separator : 파일을 구분하는 문자 : \(Unix 에서는 /)

path.separator : 경로를 구분하는 문자 : (Unix 에서는 :)

line.separator : 행을 구분하는 문자(개행코드) : \n

user.name : 사용자 계정 : j

user.home : 사용자 홈 디렉토리 : c:\Document and Settings\j

user.dir : 현재 작업 디렉토리 : c:\Java





'Server Enterprise > Java' 카테고리의 다른 글

[decompile] java decompiler  (0) 2014.12.30
[Encode] 한글 인코딩  (0) 2014.08.15
[Image Object] width, height  (0) 2014.03.11
Java 멤버와 변수에 대한 고찰  (0) 2013.01.08
POJO 개념  (0) 2013.01.05

<s:iterator value="fileList" status="fileStat">


<s:if test="#fileStat.last == true">

<td><input type="button" value="add" onClick="addFile();" /></td>

</s:if>


<s:else>

<td>

<input type="button" value="delete" onClick="delFile(parentNode.parentNode.rowIndex);" />

</td>

</s:else>


</s:iterator>

'Server Enterprise > Struts2' 카테고리의 다른 글

[Struts2] Session 과 로그인  (0) 2013.07.11
[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.xml

<action name="fileDownload" class="jh.board.action.FileDownloadAction">

<result type="stream">

<param name="contentType">binary/octet-stream</param>

<param name="contentLength">${contentLength}</param>

<param name="contentDisposition">${contentDisposition}</param>

<param name="inputName">inputStream</param>

<param name="bufferSize">4096</param>

</result>

</action>


download.java

private String basePath;

private String fileName;

private String contentType;

private String contentDisposition;

private InputStream inputStream;

private long contentLength;

getter/setter 함수 선언;


public String execute() throws Exception {

String inputPath = basePath + "/" + fileName; // 파일을 저장해놓은 경로와 이름

File f = new File(inputPath); // 파일 경로+이름 을 이용하여 파일 생성

setContentLength( f.length() );

setContentDisposition("attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));

setInputStream(new FileInputStream(inputPath));

return SUCCESS;

}


글 작성시, 스트럿츠로 간단하게 업로드 되게 하는 방법을 알아 보자.


writeForm.jsp

<s:form action="/write.do" enctype="multipart/form-data">

<s:file name="uploads" />

<s:file name="uploads" />

<s:file name="uploads" />

<s:submit>
</s:form>

writeAction 에서건 VO 에서건 리스트 파일형태로 들고 와야한다.
private List<File> uploads = new ArrayList<File>();
private List<String> uploadsFileName = new ArrayList<String>();
private List<String> uploadsContentType = new ArrayList<String>();
List<File>과 List<String>의 getter/setter 선언.


위와 같이 uploads 에 한해 "uploadsFileName" 처럼 명명하여 파일 이름을 쓸 수 있다.


WirteAction.java

public String execute() throws Exception {

String filePath = vo.FILEPATH; // 파일 저장 위치

List<File> uploads = vo.getUploads(); // List 형태의 upload file 들

List<String> uploadsFileName = vo.getUploadsFileName(); 


bo.write(vo); 

if (uploads != null) {

for (int i=0 ; i<uploads.size(); i++) {

String saveFileName = System.currentTimeMillis() + "_"

+ uploadsFileName.get(i);

       File destFile = new File(filePath + saveFileName);

       

       fVo.setRealfilename( uploadsFileName.get(i) );

       fVo.setSavefilename( saveFileName );

       

       FileUtils.copyFile(uploads.get(i), destFile);  

       bo.saveFile(fVo);

   }

}

return SUCCESS;

}


retrieve.jsp

<s:iterator value="list" status="stat">

<s:url id="download" action="fileDownload">

<s:param name="basePath" value="basePath" />

<s:param name="fileName">

<s:property value="list[#stat.index].name" />

</s:param>

</s:url>

<li><s:a href="%{download}">

<s:property value="list[#stat.index].name" /></s:a><br /></li>

</s:iterator>




상단의 taglib 선언

<%@ taglib uri="http://java.sun.com/jsp/jstl/functions"  prefix="fn"%>


c:out value = 문법 

${fn:replace(searchResult.mobileNewsMLD.title[news.index], '"', '&quot;')}



'Server Enterprise > JSTL' 카테고리의 다른 글

[JSTL] List Data 출력  (0) 2013.03.27
[JSTL] 문자열 연결하여 출력  (0) 2013.03.18


<%@ taglib uri="http://java.sun.com/jsp/jstl/functions"  prefix="fn"%>


<c:if test="${fn:length(myQnaList) eq '0'}" >

'Server Enterprise > JSTL' 카테고리의 다른 글

[JSTL] replace 문법  (0) 2013.04.25
[JSTL] 문자열 연결하여 출력  (0) 2013.03.18

아 struts taglib 에서는 그냥 value="${val + val2} 이렇게 하면 됐었는데 jstl 에서는 이렇게 하니까 계속 오류가 뜨더라..


한창 찾아보고 나서야 알았다.


<c:set var="subClass" value="menu02_0" />

<c:set var="num" value="${1}" />


출력 방법.

1. <c:out value="${subClass}${num}" />

2. <c:out value="${subClass}" /><c:out value="${num}" />


그냥 중괄호 data값 2개를 붙여서 넣으면 끝.

출력결과는 당연히


menu02_01

'Server Enterprise > JSTL' 카테고리의 다른 글

[JSTL] replace 문법  (0) 2013.04.25
[JSTL] List Data 출력  (0) 2013.03.27

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 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

우리가 보통 게시판 검색이라던가 어떤 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만 설정 해보자.

+ Recent posts