☆ 태그 적용 안되게..텍스트로...

htmlspecialchars(변수);

htmlspecialchars 함수는 HTML의 특수문자변환 함수로

< 는 &lt; 로 변환하고

> 는 &gt; 로 변환합니다.

★ addslashes() 함수
게시판에 글쓰기할때 사용자들이 특정문자를 입력하면 데이타베이스에 저장할때 오류가 발생할 수 있는데 이 함수는 따옴표나 \(역슬래쉬) 같은 문자들을 포함하고 있는 것에 문자열에서 해당문자의 앞에 역슬래쉬 문자를 집어넣어서 반환해주는 함수임.

예를 들어, $a 라는 php 변수에 방명록에 입력된 내용이 기억되었다고 가정할때
프로그램에서 다음과 같은 명령을 썼다고 가정해보면..
query문으로 insert into dbtable (bang) values ('$a');
그런데 $a에 입력한 사람이 '설악산'이 좋아요.
라고 입력하면 php에서 파싱한 후에는 다음과 같은 query문이 되겠죠.
insert into dbtable (bang) values (''설악산'이 좋아요.');
이와 같이 되면 정확한 내용이 디비테이블에 저장될 수가 없습니다.
에러가 납니다. 문법이 안 맞다고..

따라서 $a = addslashes($a) 해준 다음에 query를 준다면 다음과 같은
의미로 변하고 정상적으로 저장되겠죠.
insert into dbtable (bang) values ('\'설악산\'이 좋아요.');
이와같이 특수문자로 부터 발생될 수 있는 에러를 피하기위해
특수문자 앞에 역스래쉬를 붙여주는 일을 하는 함수입니다.

나중에 DB에서 읽어와서 웹브라우저에 뿌려줄때는 원래대로 되돌려서
출력해야하니까 백슬래쉬를 제거해주는
함수를 사용해야하는데 이것이 stripslashes() 함수라지요..

★ 텍스트박스..

<TEXTAREA name="" STYLE="ime-mode:active; overflow:auto">

한/영 키를 누르지 않고도 한글로 나오게 하려면 ime-mode:active;

그냥 영어 나오게 하려면 ime-mode:inactive;

텍스트박스에 스크롤 필요시에만 생기게 하려면 overflow:auto

아예 없애려면 overflow:hidden

참고) textarea에서는 태그가 텍스트로 나온다;;

그래서 사용하는 방법은 textarea를 hidden으로 하고 레이어나 아이프레임을 써서 한다고 하는데

아직 해보진 않았다;;

사실..이모티콘을 선택하면 텍스트박스안에 이모티콘이 나오게 하려고 했으나;;

하다가 포기하고 원시적인 방법으로 대충 해결..-_-;;

☆ 글쓰면 밑줄 나오게 하는 방법..

방법이야 여러가지가 있겠지;;

리스트를 보여줄때는 하나 뿌려줄때마다 밑줄 이미지도 뿌려주게 하면 될테고..

근데 글 내용을 보여줄때 밑줄나오게 하는거라;;

배경으로 넣으면 된다네요..

<div style='background-image: url(밑줄이미지경로); font-size:9pt; line-height:30px'>

밑줄이미지 예) http://myhome.naver.com/plandas/bgLine.jpg

->퍼온거라누가만들었는지는 잘 모름

 

 

 

 pom.xml

 

<opensymphony.sitemesh-version>2.4.2</opensymphony.sitemesh-version>

<dependency>
<groupId>opensymphony</groupId>
<artifactId>sitemesh</artifactId>
<version>${opensymphony.sitemesh-version}</version>
</dependency>

 

 

/osstem.synervelly/src/main/webapp/WEB-INF/sitemesh.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<sitemesh>
    <property name="decorators-file" value="/WEB-INF/config/decorators.xml"/>
    <excludes file="${decorators-file}"/>

    <page-parsers>
        <parser content-type="text/html" class="com.opensymphony.module.sitemesh.parser.FastPageParser"/>
    </page-parsers>

    <decorator-mappers>

        <mapper class="com.opensymphony.module.sitemesh.mapper.PageDecoratorMapper">
            <param name="property.1" value="meta.decorator"/>
            <param name="property.2" value="decorator"/>
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.FrameSetDecoratorMapper">
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.AgentDecoratorMapper">
            <param name="match.MSIE" value="ie"/>
            <param name="match.Mozilla [" value="ns"/>
            <param name="match.Opera" value="opera"/>
            <param name="match.Lynx" value="lynx"/>
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.PrintableDecoratorMapper">
            <param name="decorator" value="printable"/>
            <param name="parameter.name" value="printable"/>
            <param name="parameter.value" value="true"/>
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.RobotDecoratorMapper">
            <param name="decorator" value="robot"/>
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.ParameterDecoratorMapper">
            <param name="decorator.parameter" value="decorator"/>
            <param name="parameter.name" value="confirm"/>
            <param name="parameter.value" value="true"/>
        </mapper>

        <mapper class="com.opensymphony.module.sitemesh.mapper.FileDecoratorMapper">
        </mapper>

  

        <mapper class="com.opensymphony.module.sitemesh.mapper.ConfigDecoratorMapper">
            <param name="config" value="${decorators-file}"/>
        </mapper>

    </decorator-mappers>

</sitemesh>  

 

 /osstem.synervelly/src/main/webapp/WEB-INF/config/decorators.xml

 <?xml version="1.0" encoding="euc-kr"?>


<decorators defaultdir="/WEB-INF/jsp/layout">
 <excludes><!-- 예외 URL -->
  
  
    </excludes>

    <decorator name="cadmin-main" page="main-layout.jsp">
        <pattern>/main/*</pattern>
    </decorator>

   
   
</decorators>

 /osstem.synervelly/src/main/webapp/WEB-INF/jsp/layout/main-layout.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="decorator" uri="http://www.opensymphony.com/sitemesh/decorator" %>
<!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><decorator:title default="제목없음" /></title>
<c:import url="/admin/include/style.do" />
<decorator:head />
</head>

<body onload="<decorator:getProperty property="body.onload" />">

<decorator:body />
</body>


</html> 

 

 

 

 

 

정부 프레임워크에 타일즈 적용

pom.xml

 

 

<org.apache.tiles-version>2.2.2</org.apache.tiles-version> 

 

<!-- tiles -->
  <dependency>
   <groupId>org.apache.tiles</groupId>
   <artifactId>tiles-core</artifactId>
   <version>${org.apache.tiles-version}</version>
  </dependency>
  <dependency>
   <groupId>org.apache.tiles</groupId>
   <artifactId>tiles-servlet</artifactId>
   <version>${org.apache.tiles-version}</version>
  </dependency>
  <dependency>
   <groupId>org.apache.tiles</groupId>
   <artifactId>tiles-jsp</artifactId>
   <version>${org.apache.tiles-version}</version>
  </dependency>

 

 

 /WEB-INF/config/egovframework/springmvc/egov-com-servlet.xml

설명 tilesViewResolver 설정 을 1순위

viewResolver 2 순위로 설정하여 화면에 뿌림

타일즈가 아닐경우는 일반적인  jsp 호출

 

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.tiles2.TilesView" />
<property name="order" value="1" />
</bean>
<!-- Tiles 2 definition lists. 20110916. -->
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>classpath:/egovframework/tiles/layouts.xml</value>
</list>
</property>
</bean>
<!-- UrlBasedViewResolver InternalResourceViewResolver -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
<property name="order" value="2" />
</bean>

 

 

 

 

layouts.xml 

설정 맘대로 만지자.. 설정에 맞게만 ..

 <?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 2.1//EN"
       "http://tiles.apache.org/dtds/tiles-config_2_1.dtd">
 
<tiles-definitions>
 
 <definition name="layouts-tiles" template="/WEB-INF/jsp/layouts-tiles.jsp">
  <put-attribute name="header"    value="/WEB-INF/jsp/header.jsp" />
  <put-attribute name="content"   value="" />
  <put-attribute name="footer"    value="/WEB-INF/jsp/footer.jsp" />
 </definition>
 
 <definition name="*.tiles" extends="layouts-tiles">
  <put-attribute name="content"   value="/WEB-INF/jsp/{1}.jsp" />
 </definition>
 <definition name="*/*.tiles" extends="layouts-tiles">
  <put-attribute name="content"   value="/WEB-INF/jsp/{1}/{2}.jsp" />
 </definition>
 <definition name="*/*/*.tiles" extends="layouts-tiles">
  <put-attribute name="content"   value="/WEB-INF/jsp/{1}/{2}/{3}.jsp" />
 </definition>
 
</tiles-definitions>

 

 jsp 파일 모음

jsp.zip

 

 

jazzlib.jar

 

juno64.zip

 

 

자바 한글 깨짐 문제 해결 자바 파일

팝업 POST 전송

 

var width = 400;
        var height = 500;
        var left = (screen.width/2)-(width/2);
        var top = (screen.height/2)-(height/2);       
        var win = window.open ("", "popupWindow", 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=yes, resizable=no, copyhistory=no, width='+width+', height='+height+', top='+top+', left='+left);
        document.searchForm.target = "popupWindow";     
     document.searchForm.action = "<c:url value='/talk/store/massageRegit.do'/>";
     document.searchForm.submit();

Servers 에서 설정한 톰켓서버 더블클릭 하고...
Server modules without publishing 체크한 위에 보면...
Open launch configuration 이라고 있는데... 클릭해서 창을 띄운 후
Classpath 탭에 Bootstrap Entries 에서 Add External JARs... 로
톰캣 디렉토리 lib 폴더에 있는 servlet-api.jar 를 추가 하니까...
해결(?) 되네요...
javax.servlet.Filter 를 찾는것이니...
일단 위의 에러는 나지 않습니다...

 

필요한  오픈 컴포넌트

ajaxfileupload.js

http://www.phpletter.com/Our-Projects/AjaxFileUpload/

 

 

  스크립트 부분

 function ajaxFileUpload(index)
{
 var filePath = document.fileUploadForm.elements["file_img_"+index].value;
 if ( !(filePath.match(/\.(gif|jpg|jpeg|png)$/i)) ){ 
  modal.alert("이미지 파일을 선택해주세요.");
  return true;
 }
 
 $.ajaxFileUpload
 (
  {
   url:'주소',
   secureuri:false,
   fileElementId:'file_img_'+index,
   dataType: 'json',    
   success: function (data, status)
   {
       //처리프레서스

      //data  json 객체 이미 처리되어 넘어옴
     },
   error: function (data, status, e)
   {
    alert(e);
   }
  }
 )
 return false;
}

 

# 작동 방식

페이지에 파일 input 박스를 찾는다 [이름지정]

그후 아이프레임 만든후 넘어온 데이터를 success에다가 데이터를 넣어준다.

 

ps : iframe가 안돼는 부라우저에서는 실행 불가능할것으로 예상된다.

 

 

참고 자료

http://whitememo.tistory.com/167

http://malsup.com/jquery/form/progress3.html

 

 

한번에 10개 데이터 받아와 5개식층을 지어 만드는 테크

 

<c:set  var="listLength"  value="${fn:length(resultList)%5}"  /> 
<c:out value="${fn:length(resultList)/5}"></c:out> <br/>
<c:forEach items="${resultList}" var="result" varStatus="status">
 <c:if test="${status.count ==1}">
 start
 </c:if>
 <c:out value="${(status.count) %5}"/>
    내용
 <c:if test="${status.count %5==0 and status.count !=1}">
  end
 </c:if>
 </br>
</c:forEach>
<c:out value="${(fn:length(resultList)%5 ) + 1 }" />
<c:set  var="tempCnt"  value="${(fn:length(resultList)%5 ) + 1 }"  />
<c:forEach begin="${tempCnt}" end="5"  varStatus="status"> 
 <c:out value="${(tempCnt) %5}"/>
    내용
 <c:if test="${tempCnt %5==0}">
  end
 </c:if>
 <c:set  var="tempCnt"  value="${tempCnt+1}"  />
 </br>
</c:forEach>

 


Expression Language는 JSP에서 기본으로 지원한다
세팅해야 할 것은 JSTL( JavaServer Pages Standard Tag Library ) 이다

1. 다운로드
http://tomcat.apache.org/ - Taglibs - Standard - JSTL 1.1 download - binaries - jakarta-taglibs-standard-1.1.2.zip

2. 설치

다운로드 받은 파일에 압축을 풀고 lib 폴더의 jstl.jar 와 standard.jar 파일을 /WEB-INF/lib 에 복사 후
JSP 파일 상단에 다음의 지시문을 추가한다
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
( core 태그 lib만 추가하였고 그외 fmt, sql, x 태그를 사용하기 위해선 지시문을 추가해야 한다 )
tip) 이클립스에서 JSP 생성시 자동으로 소스 추가하는 방법
window - Prefrences - Web - JSP Files - Templates - JSP HTML에 내용 추가

3. Expression language

EL이란 JSP에서 저장객체를 출력할때 스크립팅을 전혀 쓰지 않을 수 있는 기술이다
이것으로 인해 <%=request.getParameter("name")%> 와 같은 스크립팅 들을 쓸필요가 없어진다
(1) 저장객체 접근

${param.name} => request.getParameter("name");

${member} => request.getAttribute("member");

저장객체의 attribute 에 자동으로 접근하는데
자동검색순위는 page, request, session, application 순이다

${member.name} => Member m = (Member)request.getAttribute("member");
m.getName();

attribute 저장된 member의 name속성(또는 키)에 접근
도트(.) 의 왼쪽은 Beans 이거나 Map 타입이어야 한다


$
{list["0"]} => List list = (List)request.getAttribute("list");
list.get(0);
attribute 저장된 list를 가져온다
[]안에 값은 list의 키값 or 프로퍼티명 or 인덱스이다
[]의 왼쪽은 Map, Beans, 배열, List 타입이 올 수 있다

여기서 알아야 할 점이 하나 있는데 EL에서는 해당값이 null이거나 공백일 경우에는
아무 내용도 표시하지 않고 에러도 발생하지 않는다..

(2) 연산자
EL은 연산자들을 사용할 수 있다. 예제는 JSTL에서 같이 사용하는걸 보자

1) 산술연산자 : + - * / (div) % (mod)
2) 논리연산자 : &&(and) ||(or) !(not)
3) 관계연산자 : ==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge)
4) 삼항연산자 : ?:
예) ${colors == null ? "transparent" : colors}

5) 그 외 예약어 : true, false, null, instanceof, empty( null이거나 공백일때 )

4. JSTL

core태그 중에서 유용한 것들만 살펴보자
모든 내용을 보고 싶다면 JSTL 매뉴얼 참조
태그에 진하게 표시된 속성은 필수 항목이다

(1) <c:out>

단순히 내용을 출력하는 기능이다

<c:out value="${member.name}" default="이재원" />

위와 과 같이 쓸 경우 일반적으로 ${member.name} 을 쓴것과 같지만
${member.name}이 null일 경우 dafault에 있는 값으로 대채한다

(2) <c:set>

저장객체의 setAttriubte 기능을 한다

<c:set var="addr" value="myaddr" scope="session" />
<c:set var="no" value="${member.age+1}" />
첫번째는 session 에 addr 이란이름으로 myaddr 스트링을 저장한 것이다
두번째는 no 이란이름으로 member.age+1으로 산술연산된 값을 저장하는데
scope를 생략하면 기본으로 page에 저장된다

(3) <c:remove>
removeAttribute의 기능을 한다

<c:remove var="no" scope="page" />

지정된 scope의 no란 이름이 attribute를 remove한다
scope를 생략할 경우 모든 범위의 attribute 가 지워진다


(4) <c:if>

if 조건문을 사용한다.. 단 else if 와 else는 지원하진 않고 유사한 <c:choose> 가 존재한다

<c:if test="${member.age < 20}" var="result" scope="page">
당신은 미성년자입니다
</c:if>
<c:if test="${!empty list}" >
content
</c:if>

test에서 조건을 검사하고 true 일 경우에만 <c:if>태그안의 내용이 보여진다
여기서 EL 의 연산자들을 쓸 수 있다!!

var는 조건을 검사하고 리턴되는 boolean값을 저장하는 attribute이름이고
scope는 var가 저장되는 범위입니다. scope가 없을시 기본값은 page이다


(5) <c:choose>

if, else if, else 와 유사하다. 아니 똑같다고 봐도 된다
<c:choose> 태그안에는 <c:when> 과 <c:otherwise>가 들어간다
<c:choose>
<c:when test="${vo.type==1}">
<img src="<%=cp%>/images/antenna/type1.jpg" />
</c:when>
<c:when test="${vo.type==2}">
<img src="<%=cp%>/images/antenna/type2.jpg" />
</c:when>
<c:when test="${vo.type==0 or vo.type==3}">
<img src="<%=cp%>/images/antenna/type_ment.jpg" />
</c:when>
<c:otherwise>
<img src="<%=cp%>/images/antenna/type_heart.jpg" />
</c:otherwise>
</c:choose>

<c:choose>안에서 순서대로 <c:when> 의 조건문을 검사해 true가 나오면
해당 <c:when> 태그안에 내용을 보여주고 <c:choose>문은 끝나게 된다

만약 모든 <c:when>의 조건문이 false일 경우 <c:otherwise>안에 내용을 보여주게된다


(6) <c:forEach>

Collection을 반복할때 쓰인다. 게시판 같은 반복적인 처리를 할때 매우 유용하다

지원되는 컬렉션을 다음과 같다
Arrays ( 배열 )
java.util.Collection
java.util.Iterator
java.util.Enumeration
java.util.Map

<table>
<c:forEach items="${list}" var="notice" varStatus="status">
<tr>
<td>${status.count}</td>
<td>${notice.title}</td>
<td>${notice.writer}</td>
<td>${notice.wdate}</td>
<td>${notice.readcount}</td>
</tr>
</c:forEach>
</table>

items는 Collection 객체를 말한다
var는 Collection에서 객체를 하나씩 가져올때마다 담는 객체다
객체가 Beans일 경우 Beans클래스를 자동으로 찾아 담는다
varStatus는 일련의 속성들을 정의한 객체다 ( javax.servlet.jsp.jstl.core.LoopTagStatus )

다음은 일반적은 for문 처럼 사용한 예다

<c:forEach var="x" begin="0" end="10" step="2">
${x},
${x*x}
</c:forEach>
(7) <c:forTokens>

<c:forEach> 와 같이 반복 태그로 이것은 StringTokenizer 클래스를 이용한다.. 그다지 쓸일은 없다
구분자( delims ) 를 공백, 쉼표, 마침표 로 한 예이다

<c:forTokens items="${param.text}" delims=" ,." var="word" begin="1" end="10" step="1" >
${word}
</c:forTokens>

 

 

 1. 스프링 XML 설정

 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.StringHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/plain;charset=UTF-8</value>
</list>
</property>
</bean>
</list>
</property>
</bean>

 설명

리턴값중 text 일경우 UTF-8형태를 가추라는 부분

 

 

 2. 전송부 jsp - script

 

function fn_Ajax(){
$.ajax({
type: 'post'
, async: true
, url: '/admin/templet/templetAjax.do'
, data: $("#listForm").serialize()
, beforeSend: function() {
//$('#ajax_load_indicator').show().fadeIn('fast');
//alert("1");
}
, success: function(data) {
// var response = data.trim();
// console.log("success forward : "+response);
// 메세지 할당
alert(data);
//alert(response);
/*
switch(response) {
case "nomatch":
msg = "아이디 또는 비밀번호가 일치하지 않습니다."; break;
case "fail":
msg = "로그인에 실패 했습니다."; break;
default :
msg = "존재하지 않는 사용자입니다."; break;
} */
}
, error: function(data, status, err) {
alert('서버와의 통신이 실패했습니다.');
}

, complete: function() {
//$('#ajax_load_indicator').fadeOut();
// alert("2");
}

});



}

 설명

jsp 단 스크립트로 전송하는 AJAX 부분  JQUERY 이용 하였다. 

 

 

 3. JAVA 구현 및 RESPON 부분

 

@RequestMapping(value="/admin/templet/templetAjax.do", method = RequestMethod.POST)
public @ResponseBody String getTime(@ModelAttribute("templetVO") TempletVO templetVO,@ModelAttribute("SessionVO") SessionVO sessionVO) {
String result = "Time for is " + new Date().toString();
return result;
}

 설명

 위함 수부분에 이노테이션설정