반응형

http로 요청들어온것 https로 보내는 방법

 

아래와 같이 아파치의 redirect 옵션을 이용한다.

<VirtualHost *:80>
    ServerName 도메인
    Redirect permanent / https://도메인
</VirtualHost>

 

그럼 http [80포트] 로 들어오는것을 https[443포트]로 보내게 된다.

아파치 설정하는 방법은 다양하기 때문에 해당 서버에 맞게 설정하면 된다.

위와 같은 경우는 아래와 같이 443 포트도 설정이 되어있어야지 https로 갔을때 에러가 발생하지 않는다.

<VirtualHost *:443>
	내용
</VirtualHost>
반응형
반응형

Spring 에서 json으로 응답시 null인 값은 제외하고 response 시킬때

 

아래와 같이 객체 설정을 하면된다.

@Data
@JsonInclude(Include.NON_NULL)
public class TestVO {
	private String ID;
	private String PW;
 }

 

위 어노테이션이 사용이 안된다면 mavenrepasitory에서 혹은 gradle에서 추가하면 된다.

 

	<dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-core</artifactId>
       <version>2.7.3</version>
   </dependency>
    
   <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-databind</artifactId>
       <version>2.7.3</version>
   </dependency>
    
   <dependency>
       <groupId>com.fasterxml.jackson.core</groupId>
       <artifactId>jackson-annotations</artifactId>
       <version>2.7.3</version>
   </dependency>

반응형
반응형

실서버 ajax, rest api 응답 timeout 30초일 경우

서버가 톰캣인 경우이다.

로컬 테스트 개발 환경에선 timeout이 30초가 아니였으나, 실서버 배포 이후 timeout이 30초일 경우이다.

 

아래 두가지를 추가해준다.

asyncTimeout : 비동기 요청의 기본 대기 시간

connectionTimeout : 연결 수락 후 응답 받을때까지 대기 시간.

 

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

 

반응형
반응형

mysql 에서 source 명령어로 import 하려고 할때 sql 혹은 dmp 파일이 여러개일 경우에 한번에 처리하는 방법.

 

예를 들어 나에게 test01.sql, test02.sql, test03.sql 파일이 있다고하자.

그럼 아래와 같이 3번 명령어를 보내야되는데 각각 언제 끝날지 모르는 쿼리를 기다려야될 상황이 생긴다.

source 절대경로/test01.sql;
source 절대경로/test02.sql;
source 절대경로/test03.sql;

 

그럴 경우에 저 3개의 명령어를 하나의 sql로 묶는것이다.

vim import_test.sql
source 절대경로/test01.sql;
source 절대경로/test02.sql;
source 절대경로/test03.sql;

위와 같이 import_test.sql에 3개의 명령어를 적은 후에

source 절대경로/import_test.sql

위 명령어 한번만 실행하면 된다.

반응형
반응형

톰캣을 최초 실행시켰는데, 정상적으로 화면은 나오나, 아래와 같은 에러가 나오는 경우

java.lang.AbstractMethodError: org.apache.tomcat.websocket.server.WsSessionListener.sessionCreated(Ljavax/servlet/http/HttpSessionEvent;)V

 

2가지의 방법이 있습니다.

각각 해보시고 실행하시면 됩니다.

 

pom.xml 에서 아래 부분을 수정하시면 됩니다.

해당 프로젝트의 dynamic web module별로 설정하시면 됩니다.

<dependency>
	<groupId>javax.servlet</groupId>
	<artifactId>javax.servlet-api</artifactId>
	<version>4.0.1</version>
	<scope>provided</scope>
</dependency>

 

아래 manvmvnrepository 에서 버전별로 설정하고 maven update 하시면 됩니다.

 

mvnrepository.com/artifact/javax.servlet/javax.servlet-api

 

Maven Repository: javax.servlet » javax.servlet-api

Professional Java Data: RDBMS, JDBC, SQLJ, OODBMS, JNDI, LDAP, Servlets, JSP, WAP, XML, EJBs, CMP2.0, JDO, Transactions, Performance, Scalability, Object and Data Modeling (2001)by Carl Calvert Bettis, Michael Bogovich, Sean Rhody, Mark Wilcox, Kelly Lin P

mvnrepository.com

 

 

그래도 안될때에는

jdk 경로에 servlet-api.jar 파일이 없을때이다.

 

톰캣 경로의 servlet-api.jar 파일을 복사해서 jdk 경로에 붙여넣기를한 뒤에 프로젝트 jdk 설정 확인 후에 다시 실행하면 된다.

C:\Users\Administrator\apache-tomcat-9.0.34\libservlet-api.jar

위 파일 복사

C:\Program Files\Java\jdk1.8.0_201\jre\lib\ext

위 폴더에 붙여넣기

 

 

반응형
반응형

전자정부프레임워크에서 dynamic web module 버전을 4.0으로 생성하였는데,

cannot change version of project facet dynamic web module to 2.5 라는 에러가 발생 할 경우.

 

 

web.xml을 수정 후에 alt+5를 눌러서 메이븐 업데이트하면 버전 변경 성공.

초기에 생성되는 web.xml 내용

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	id="WebApp_ID" version="2.5">

수정후 web.xml 내용 (4.0으로 생성한 경우). 다른 버전일 경우는 아래 내용을 참고하시면 됩니다.

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0"> 

 

 

 

 

아래는 dynamic web module 별로 web.xml 수정 방법입니다.

 

dynamic web module : 2.5

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      version="2.5">

dynamic web module : 3.0

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
      version="3.0">

dynamic web module : 3.1

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    version="3.1">

dynamic web module : 4.0

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">
반응형
반응형

특정 session의 timeout설정 방법

 

setMaxInactiveInterval 를 사용하면 된다. 해당 세션 설정 다음에 코드 추가하면 된다.

단위는 초단위 임으로 아래의 설정 같은 경우는 10분이다.

session.setAttribute("name", "홍길동");
session.setAttribute("id",  "test");;
session.setMaxInactiveInterval(10*60);
반응형
반응형

jsp 에서 jstl을 사용하여 date format 형식으로 출력하는 방법

 

우선 fmt 태그를 사용하기 위해 jsp 상단에 추가해줘야 합니다.

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

 

추가를 하였으면 예를 들어 백단에서 가져온 값을 출력하는 방법을 보여드리겠습니다.

 

String 형식으로 가져왔을 경우 ( yyyyMMdd )

<fmt:parseDate value="${REQUEST_DATE}" var="REQUEST_DATE" pattern="yyyyMMdd"/>
<fmt:formatDate value="${REQUEST_DATE}" pattern="yyyy/MM/dd"/> 

 

Date 형식으로 가져왔을 경우 ( yyyyMMdd )

<fmt:formatDate value="${REQUEST_DATE}" pattern="yyyy/MM/dd"/>
반응형
반응형

ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다. 해결 방법

 

해당 내용은 오라클 접속 후에 계정 생성할때 나는 에러이니 별도로 접속하는 방법은 설명하지 않겠습니다.

 

오라클 12c로 넘어오면서 계정이름 앞에 c##을 붙여줘야 공통 사용자를 생성가능 하도록 변경되었습니다.

그러면 계정이 C##TEST 로 생성됩니다.

 

예는 아래의 소스를 확인하시면 됩니다.

에러 발생하는 코드

SQL> CREATE USER test IDENTIFIED BY 1234;

에러 발생하지 않는 코드

SQL> CREATE USER c##test IDENTIFIED BY 1234;

 

만약 이전과 같이 C##을 안붙이고 사용하고 싶으시면 아래와 같이 명령어 실행 후에 기존과 동일하게 user 생성하시면 됩니다.

SQL> ALTER SESSION SET "_ORACLE_SCRIPT"=true;
SQL> CREATE USER test IDENTIFIED BY 1234;
반응형
반응형

Java map 추가 및 수정하는 방법

기본적인 부분이지만 기본적인것을 깜박하고 많은시간을 버릴 수가 있다.

 

우선 기본적인 get,put 이다.

 

LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>();
map.put("1",1); //추가
int val = (int)map.get("1"); //가져오기
System.out.println(val);

 

값을 가져와서 변경할 때이다.

아래와 같이 할 경우에는 map의 주소를 저장하는것이기 때문에 해당 map을 변경하여도

이전 map의 값도 변경하게 된다.

 

import java.util.LinkedHashMap;

public class MainApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		LinkedHashMap<String, Object> newMap = new LinkedHashMap<String, Object>();
		newMap.put("1", 1);
		newMap.put("2", 2);
		newMap.put("3", 3);
		newMap.put("4", 4);
		newMap.put("5", 5);
		
		LinkedHashMap<String, Object> newMap2 = new LinkedHashMap<String, Object>();
		
		newMap2 = newMap;
		
		newMap2.put("1", (int)newMap2.get("1")+5);
		
		for (String key : newMap2.keySet()){
			System.out.println("key : " + key + "val : " + newMap2.get(key));
		}
		
		System.out.println("\n");
		
		for (String key : newMap.keySet()){
			System.out.println("key : " + key + "val : " + newMap.get(key));
		}
	}
	

}

결과값.

key : 1val : 6
key : 2val : 2
key : 3val : 3
key : 4val : 4
key : 5val : 5


key : 1val : 6
key : 2val : 2
key : 3val : 3
key : 4val : 4
key : 5val : 5

 

해당 맵의 값을 변경하지 않을경우에는 map의 주소를 저장하는것이 아니라, map의 값을 저장해주어야된다.

아래와 같은 방법을 사용하면 된다.

import java.util.LinkedHashMap;

public class MainApp {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		LinkedHashMap<String, Object> newMap = new LinkedHashMap<String, Object>();
		newMap.put("1", 1);
		newMap.put("2", 2);
		newMap.put("3", 3);
		newMap.put("4", 4);
		newMap.put("5", 5);
		
		LinkedHashMap<String, Object> newMap2 = new LinkedHashMap<String, Object>();
		
		newMap2.putAll(newMap); 
		
		newMap2.put("1", (int)newMap2.get("1")+5);
		
		for (String key : newMap2.keySet()){
			System.out.println("key : " + key + "val : " + newMap2.get(key));
		}
		
		System.out.println("\n");
		
		for (String key : newMap.keySet()){
			System.out.println("key : " + key + "val : " + newMap.get(key));
		}
	}
	

}

결과값.

key : 1val : 6
key : 2val : 2
key : 3val : 3
key : 4val : 4
key : 5val : 5


key : 1val : 1
key : 2val : 2
key : 3val : 3
key : 4val : 4
key : 5val : 5

반응형

+ Recent posts