반응형

웹에서 데이터를 주고 받을때 사용하는 html태그들은 한정적이다. input box, radio, selectbox, checkbox 등이 있다.

이 중에서도 checkbox의 경우 동일한 태그 이름(name, id)로 구성을 하고 다중으로 체크한뒤 전송하게 되면
받는쪽에서는 체크되어있던 값들만 전송이 된다.

위에서 말했듯이 동일한 이름이 다중으로 넘어오면 받는쪽에서도 역시 다중으로 받을수 있게 처리해줘야 한다.


일반적인 방법으로는 request.getParameterValues 를 이용하여 배열로 받으면 된다.


[보내는 쪽]

<checkbox name="type" id="type" value="M" />
<checkbox name="type" id="type" value="S" />
<checkbox name="type" id="type" value="W" />

 



[받는쪽]

String[] type = request.getParameterValues("type") ;

 




위와같이 작성하면 체크한 값들만 전송되므로 해당 값들을 이용하여 다음 로직들을 작성하면 된다.


만약 위 소스처럼 받아온 값들이 어떠한 순서를 가지고 있고, 그 순서대로 값이 들어오길 바란다면 해당 방법은 사용 안하는게 좋다.

위에서 전송되는 순서는 사실 순서보장이 될 수도 있고, 보장이 되지 않을수도 있다.
순서가 100번 보장이 된다하더라도 단 1번 안되면 그것은 오류로 연결되므로 문제가 있다.

체크박스의 값들이 순서대로 전송이 되느냐 아니냐는 예전부터 많은 이야기가 있었다.
해당 내용에대한 명백한 결론은 없지만, 개발자들 사이에서 내린 결론은 순서를 보장해야 하는 경우

체크박스나 다른 전송되는 type의 태그 이름을 동일한 이름(name, id)로 처리하지 말자였다.

위에서 말했듯이 100번중에 1번 잘못 전송되면 오류다.

조그마한 확률이라도 오류가 발생하면 문제가 되는만큼 애초에 걱정할거리를 없애는게 맞다.


나 같은경우 순서가 보장되어야 하는 경우 보통은 아래처럼 개발한다.



[보내는 쪽]

<checkbox name="type_0" id="type_0" value="M" />
<checkbox name="type_1" id="type_1" value="S" />
<checkbox name="type_2" id="type_2" value="W" />

 



[받는쪽]

ArrayList arrType = new Arraylist();
for(int i=0; i < 3; i++){
String tmpType = request.getParameter("type_" + i);

if(tmpType != null && !"".equals(tmpType)
arrType.put(tmpType);
}

 




결국은 순서가 보장되어야 하는 태그 이름뒤에 순차적으로 숫자를 부여한 후 받는쪽에서 값이 있는 녀석들만 arrayList 같은곳에 담아 사용하면 된다.

위 두가지의 케이스는 상황에 따르게 적절하게 사용해야 한다.

순서가 보장이 안되도 상관없는 일반적인 상황이라면 request.getParameterValues 를 사용하는게 좋다.
불필요한 코드를 추가할 필요도 없으며 편하게 사용이 가능하니까 말이다.

반응형



Posted by 궁극의 java개발자
,





반응형

웹 개발을 하다보면 GET / POST 방식의 전송시 한글이 깨지는 경우가 종종 있다.
특히 이제 막 웹 개발을 시작하는 분들의 경우 한글깨짐이 발생하여 굉장히 당황스러워 하는데,
사실 웹 개발자라면 초보시절에 한번쯤은 다들 경험해 봤을것이다.
처음 한번 경험하고 그 이후엔 그 경험을 토대로 더이상 실수하지 않는 그런것 이랄까?

오늘은 JSP / Servlet을 통한 웹 개발시 한글깨짐에 대해 처리하는 방법을 정리해 보았다.

참고로 JSP를 구동시키는 WAS는 톰캣을 이용하였고, 모든 웹페이지의 캐릭터셋은 UTF-8로 개발하였다.



1. POST 전송시 한글깨짐
JSP 페이지 상단에 request.setCharacterEncoding 을 명시한다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>

<%@page import="java.util.*"%>
<%

	request.setCharacterEncoding("UTF-8");

%>


2. GET 전송시 한글깨짐
Tomcat의 server.xml에 URIEncoding 옵션을 추가해 준다.

아파치를 연동하여 AJP를 사용할 경우 AJP connector에도 해당 옵션을 추가해 준다.

 

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />

 

위와같이 하면 한글깨짐이 어느정도 해결이 된다.

나 같은 경우 GET 방식으로 파라미터를 넘겨 사용할때는 가급적이면 해당 문자열을 인코딩하여 전달한다.
특히 한글이나 특수문자 공백이 들어갈 경우에는 무조건 문자열을 인코딩하여 사용하는데 이는 잘못된 파라미터의 전달처럼 원치않은 문자열이 들어오는것을 피하기 위해서이다.
또한 최신 브라우저는 상관없지만 IE 6, 7과 같은 구형 브라우저에서 문제가 생기는 경우가 있었다.

그래서 습관적으로 get 방식으로 전송되는 문자열에 대해서 인코딩하여 전송한다.

전송하여야 할 문자열은 URLEncoder를 이용하여 인코딩하면 되고 받는쪽에서는 URLDecoder를 이용하여 디코딩하여 사용하면 된다. (POST 전송시엔 할 필요없다)


 

보내는쪽

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@page import="java.net.URLEncoder"%>

<%
	
	String text = "홍길동" ;

	// 전송 문자 UTF-8 인코딩
	string encText = URLEncoder.encode(text, "UTF-8") ;
%>

 

받는쪽

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@page import="java.net.URLDecoder"%>

<%
	
	// Get 전송 파라미터
	String rText = request.getParameter("text") ;

	// 문자 디코딩
	string text = URLDecoder.decode(text, "UTF-8") ;


%>

 

escape(encodeURIComponent("홍길동"))

 


아무쪼록 이 글이 한글 처리에 대해 당황하고 있는 분들에게 도움이 되었으면 좋겠다.

 

반응형



Posted by 궁극의 java개발자
,





반응형

웹 서비스를 하다보면 이미지들을 화면에서 보여줄때가 많다.
특히 메인화면 이라던지 리스트 화면 같은경우에 이미지들이 많이 쓰일때가 종종 있는데,
이때 사이즈가 큰 원본이미지를 사용하는것 보다는 별도의 썸네일 이미지를 생성하여 사용하는게 좋다.

썸네일 이미지를 생성하여 화면에 보여주게 되면 페이지 자체가 가벼워 지므로 서버 부하가 줄어든다는 장점이 있으며

사용자는 덩치 큰 이미지를 내려받는데 시간을 소비하기 보다는 작은 이미지를 내려받음으로서
더 빠른 페이지 로딩을 할 수 있다.

나 같은경우 사용자가 이미지를 업로드할때 서버에 이미지 저장 처리를 하면서 썸네일 이미지를 별도로 만든다.
즉 사용자는 1장의 이미지를 올리게 되지만 서버쪽에서는 원본 1장, 썸네일 1장을 가지게 된다.

리스트 화면에서는 썸네일 이미지를 보여주고 상세화면에서는 원본이미지를 컨트롤하여 사용자에게 보여준다.

썸네일 이미지를 생성하는 방법은 몇가지 있지만 나는 주로 가장 간단하게 사용할 수 있는 Jimi 라이브러리를 이용한다.


라이브러리 다운

JimiProClasses.jar


다운받은 라이브러리는 /WEB-INF/lib 에 넣는다.


썸네일 생성 예

<%@ page language="java" contentType="text/html; charset=UTF-8" %>

<%@page import="java.awt.Image"%>
<%@page import="com.sun.jimi.core.Jimi"%>
<%@page import="com.sun.jimi.core.JimiException"%>
<%@page import="com.sun.jimi.core.JimiUtils"%>


<%

	// 원본 이미지
	String orgFile = "C:/image/test.jpg" ;

	// 썸네일 이미지
	String thumbFile = "C:/image/test_thumb.jpg"

	// 썸네일 이미지 가로크기(단위 : px)
	int thumbWidth = 320 ;

	// 썸네일 이미지 세로크기(단위 : px)
	int thumbHeight = 160 ;

	try{

		// 썸네일 설정
		Image thumbnail = JimiUtils.getThumbnail(orgFile, thumbWidth, thumbHeight, Jimi.IN_MEMORY);

		// 썸네일 생성
		Jimi.putImage(thumbnail, thumbFile);


	}catch(Exception e){
		e.printStackTrace();
	}


%>

Jimi 라이브러리를 이용할때의 단점은 GIF 이미지는 썸네일 생성을 하지 못한다.
이유는 GIF 자체의 라이센스 문제때문이라고 어디선가 본듯 하다.

반응형

'Programming > Jsp' 카테고리의 다른 글

checkbox 값 받기와 전송순서에 대하여  (0) 2015.12.16
한글 깨짐 처리방법과 문자 인코딩  (0) 2015.12.15



Posted by 궁극의 java개발자
,