반응형

프론트페이지(jsp) => controller 에 폼데이터를 전송할때

데이터를 받아보니 문자가 자동 escape 처리가 되어있었다.

'  는  '

"  는 "

<&lt;

>&gt; 로 바뀌어 전달되었다.

근데 어떤 페이지에서 보낸건 escape 처리가 안 되고 어떤 페이지에서 보낸 건 escape 처리가 되어있었다.

ajax로 보낸건 자동 이스케이프가 안 되는데 form을 만들어서 submit한건 자동 이스케이프 처리가 되는거임..

확인해보니 전송하는 데이터의 Content-Typetext/html인 경우 escape 처리가 되는 듯 함.

 

자세한 설명 ..

text/html 콘텐츠에서는 특수 문자(예: `<`, `>`, `&` 등)가 올바르게 표시되고 HTML 문서의 구조를 방해하지 않도록 하기 위해 문자 이스케이프가 사용됩니다. 예를 들어, `<` 문자는 `&lt;`로, `>` 문자는 `&gt;`로, `&` 문자는 `&amp;`로 이스케이프됩니다. 이는 이러한 문자가 HTML 태그나 엔터티로 해석되는 것을 방지하기 위해 수행됩니다.

반면 application/json 콘텐츠에서 문자 이스케이프는 주로 JSON 형식 자체로 표현되는 데이터와 관련이 있습니다. JSON에는 JSON 파서에서 데이터가 올바르게 구문 분석되고 해석되도록 하기 위해 문자열 내의 문자를 이스케이프하는 자체 규칙이 있습니다. 예를 들어 JSON 문자열 내의 큰따옴표(`"`)와 같은 특수 문자는 `\"`로 이스케이프되고 개행 문자는 `\n`으로 표시됩니다.

 

반응형
반응형

가상환경 생성 전 필요한 패키지 설치

pip install ./configparser-4.0.2-py2.py3-none-any.whl
pip install ./contextlib2-0.6.0.post1-py2.py3-none-any.whl
pip install ./zipp-1.2.0-py2.py3-none-any.whl
pip install ./typing-3.10.0.0-py2-none-any.whl
pip install ./six-1.16.0-py2.py3-none-any.whl
pip install ./scandir-1.10.0-cp27-cp27m-win_amd64.whl
pip install ./pathlib2-2.3.7.post1-py2.py3-none-any.whl
pip install ./importlib_metadata-2.1.3-py2.py3-none-any.whl
pip install ./distlib-0.3.6-py2.py3-none-any.whl
pip install platformdirs-2.0.2-py2.py3-none-any.whl
pip install ./filelock-3.2.1-py2.py3-none-any.whl
pip install ./singledispatch-3.7.0-py2.py3-none-any.whl
pip install ./importlib_resources-3.3.1-py2.py3-none-any.whl
pip install ./virtualenv-20.15.1-py2.py3-none-any.whl

가상환경 생성 
python -m virtualenv virtualDirectory

반응형
반응형

NULL값 insert 시 발생한 오류.

"varbinary은(는) text과(와) 호환되지 않습니다."

 

내 테이블의 컬럼은 null이 가능한 컬럼인데..?

 

NULL이 binary 형태의 값으로 변환되어 들어가려고 해서 오류가 남..

해결 : NULL이 아니라 ''  즉 공백으로 넣으니 들어간다.... 거참

 

반응형
반응형

파일 확장자를 바꾸고 업로드 하는 경우 파일타입을 체크하기 위해 MIME타입 확인이 필요하게 되었다.

tika 라이브러리를 사용하였다.

MimeTypesFileTypeMap도 사용해봤는데 application/octet-stream만 반환해서 집어치웠음.

* 개발환경 : java7

* pom.xml에 의존성추가

<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.17</version>
</dependency>

 

Tika 객체를 생성해서 detect 메소드 사용

Tika tika = new Tika();
File file = new File("d:\\example\\file.txt")
String type = tika.detect(file);
System.out.println("type : " + type);

이미지 파일로 테스트 해 본 결과 아래와 같은 type들을 반환해주었다.

image/bmp
image/jpeg
image/png

반응형
반응형

TIKA 라이브러리 사용시 발생한 에러 

java.lang.UnsupportedClassVersionError: org/apache/tika/Tika : Unsupported major.minor version 52.0

 

* 개발환경 : JAVA 7

* 문제점

java7 환경에서는 tika 버전을 최대 1.17까지밖에 못쓴다.

그 이후의 릴리즈는 최소 java 8이 필요함 

 

* 아래 내용 참고 

13 December 2017: Apache Tika ReleaseApache Tika 1.17 has been released! This release includes new support for automatic image captioning, as well as numerous bug fixes and upgrades to dependencies. PLEASE NOTE: this will be the last version that will support Java 7. The next versions will require Java 8. Please see the CHANGES.txt file for the full list of changes in the release and have a look at the download page for more information on how to obtain Apache Tika 1.17.

https://tika.apache.org/

 

Apache Tika – Apache Tika

Apache Tika - a content analysis toolkit The Apache Tika™ toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika

tika.apache.org

 

반응형
반응형

build path에 Maven Dependencies 가 없어가지고.. 온갖 에러가 다 나는데..

1. project clean

2. maven Update Project 

3. maven offline 설정, settings.xml 설정

내 환경은 오프라인이었고..    Maven Dependencies 가 별 염병을 다해봐도 안 생겼다. 

 

프로젝트 루트 경로의 .classpath 파일을 열어서 아래 내용을 추가해주고 프로젝트 클린 및 재정비하고 다시 올리니 잘 된다 ㅠ ㅠ 

	<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
		<attributes>
			<attribute name="maven.pomderived" value="true"/>
			<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
		</attributes>
	</classpathentry>
반응형
반응형

* JSTL 이란

jsp 표준 태그 라이브러리.

연산이나 조건문이나 반복문인 if문, for문, DB를 편하게 처리할 수 있게 하는 태그 라이브러리.

내가 사용해본 라이브러리는 크게 세가지가 있음. core,function,formatting.

 

1. JSTL core 라이브러리

JSP의 헤더에 추가한다.

<% @taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

 

태그명 설명 예시 비고
<c:set> 변수를 세팅하여 값을 할당하거나
javaBean의 값을 변경할수 있음
<c:set var="myData" value="쩝" />

<c:set target="${myList}" property="content" value="어쩌구 저쩌구" />
 
<c:out> 값을 출력함 <c:out value="${myList.content}" />

<c:out value="<script type='text/javascript'>alert(123);</script>" escapeXml="true"/>
c:out에는 escapeXml 속성이 있으며 기본값이 true로, 문자를 텍스트로 그대로 내보낸다. false로 설정하는 경우 특문 escape가 안 되어 보안에 취약할 수 있음
<c:if> if문 <c:if test="${name eq '포도'}" >
 ${name}은 보라색
</c:if>
 
<c:choose>
<c:when>
<c:otherwise>
switch문과 같은 기능으로 여러 조건 중 하나를 선택 <c:choose>
   <c:when test="${number eq '1'}"> 
   </c:when>
   <c:when test="${number eq '2'}">
   </c:when>
   <c:otherwise>
   </c:otherwise>
</c:choose>
 
<c:foreach> 반복문 <c:forEach var="board" items="${boardList}">
    <c:out value="${board.title}" />
</c:forEach>
 

 


2. JSTL formatting 라이브러리

JSP의 헤더에 추가한다.

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

 

 

태그명 설명 예시
parseDate 문자열을 Date 타입으로 변경 <fmt:parseDate var="today" value="20230717" pattern="yyyyMMdd" />
formatDate  Date 타입을 문자열로 변경 <fmt:formatDate var="now_date" value="${now_date}" pattern="yyyyMMdd"/>

 


3. JSTL function 라이브러리

JSP의 헤더에 추가한다.

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

 

태그명 설명 예시
fn:length 문자열 길이 <c:when test="${fn:length(myArray) > 0}">
fn:contains 문자열 포함여부판단 <c:if test="${fn:contains(arrayList, 'AA')}">

 

반응형

'코딩 관련 > JSP 관련' 카테고리의 다른 글

[JSP] EL 안에 EL 넣기  (0) 2020.09.24
[JSP] JSP 주석 관련 <!-- 와 <%--  (0) 2020.09.17
반응형

varbinary은(는) text과(와) 호환되지 않습니다.

내가 insert하려는 컬럼중에 text 타입인 컬럼이 있는데..

NULL이 가능한 컬럼인데.. NULL을 넣으려하니까 에러가난다...

 

 

NULL이 binary 형태의 값으로 변환되어서 들어가려는 모양이다..

 

해결) 그래서 null값이 아니라 ''로 넣음

 

반응형
반응형

환경) 백엔드와 프론트엔드가 분리되어있음

 

첫번째방법

PrintWriter 를 사용하여 script를 뿌려준다. javascript 소스를 텍스트로 넣으면 된다.

location.href='리다이렉트 시킬 주소'

@RequestMapping(value = "/redirect1")
    public void redirect1(HttpServletRequest request, HttpServletResponse response,
            @RequestParam Map<String, Object> paramMap,Model model) throws Exception {
        PrintWriter out = new PrintWriter(response.getWriter());
        out.println("<!DOCTYPE html>");
        out.println("<html>");
        out.println("<meta charset=\"UTF-8\" />");
        out.println("<title>TITLE입니다.</title>");
        out.println("<head>");
        out.println("</head>");
        out.println("<body>");
        out.println("<script type='text/javascript'>");
        out.println("alert('경고~~');");
        out.println("location.href='https://www.google.com';");
        out.println("</script>");
        out.println("</body>");
        out.println("</html>");
        return null;
    }

 

 

두번째방법

HTTP 응답 상태 코드 301 Moved Permanently를 사용한다.

ResponseEntity를 리턴해주는 경우 상태코드를 Moved Permanently로 설정하고 

헤더에 리다이렉트시킬 url을 적어준다. 

@RequestMapping(value = "/redirect2")
    public ResponseEntity redirect2(@RequestBody Map<String, Object> paramMap)
            throws Exception {
        return ResponseEntity
                .status(HttpStatus.MOVED_PERMANENTLY)
                .contentType(MediaType.APPLICATION_JSON)
                .header("location", "http://localhost:8081/redirect2")
                .body("message");
    
}

 

세번째방법

서버페이지를 리턴해주고 서버페이지의 script에서 location.href에 리다이렉트 시킬 url을 적어준다.

@RequestMapping(value = "/redirect1")
    public void redirect1(HttpServletRequest request, HttpServletResponse response) throws Exception {
        return "serverPage/index";
    }
<script type="text/javascript">
    parent.parent.location.href="[[${clientUrl}]]";
</script>
반응형
반응형

오류내용 ▼

기본 클래스 ''를 찾거나 로드할 수 없습니다.

 

 

1. java [java파일] 명령어를 실행하면 컴파일이 된다.

java MyClass.java

class파일이 현재 디렉토리에 생긴다

 

2. javac [클래스파일]  명령어로 클래스파일을 실행한다. (.class를 붙이지 말고..)

javac MyClass

나는 MyClass.class라고 확장자를 붙여 실행하려고 하니까 저 에러가 떴었음.

반응형

+ Recent posts