분류 전체보기

반응형

 

정상적으로 실행되던 톰켓에서 아래와 같은 오류를 뱉어 낼 경우가 간혼 있다.

Setting property 'source' to 'org.eclipse.jst.jee.server:프로젝트명' did not find a matching property.

그럴 경우 톰캣 설정에 Server Option 탭에 아래와 같은 설정 후 재기동.

 


 


반응형

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

[Java] Collection sort  (0) 2016.01.07
[Java] GMT/UTC 날짜 변환  (1) 2015.04.08
올바른 eqals() 사용법  (0) 2014.02.07
[Java] split 문자열 나누기  (0) 2014.02.05
java e.printStackTrace 로그 남기기  (0) 2014.01.17
반응형
spring기반 json + ajax 처리

mappingJacksonHttpMessageConverter는 @ResponseBody, @RequestBody 어노테이션 사용시 JSON String을 javaClass(get, set)에 자동으로 맵핑이 되도록 변환을 해주는 스프링 애너테이션입니다.

우선 MappingJacksonHttpMessageConverter 관련 bean 설정이 필요합니다.

-board-servlet.xml

<bean id=jacksonMessageConverter class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter ">
</bean> 
<bean class=org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter> 
	<property name="messageConverters"> 
		<list> 
			<ref bean="jacksonMessageConverter" /> 
		</list> 
	</property> 
</bean>

 

@RequestBody는 클라이언트에서 jsonObject로 전송되는 파라미터를 자동으로 javaClass 형식으로 변환한다. (UserBean Class 는 클라이언트에서 받을 파라미터를 get, set 으로 작성하면, bean에 등록된 massageConverters에서 자동으로 javaClass 형식에 맞게 컨버팅이 이뤄진다.)

@ResponseBody는 클라이언요청을 서버에서 처리 후 메소드가 리턴하는 오브젝트를 messageConverters를 통해 json 형태로 변환하여 리턴해주는 역활을 한다.

-UserController.java

  @RequestMapping(value="getLoginCheck.ajax", method=RequestMethod.POST) 
  public @ResponseBody UserBean loginCheck(@RequestBody UserBean userBean){ 	
  	logger.info("userBeanD.getJ_username(){}", userBean.getJ_username()); 	
  	userBean = userService.getUsers(userBean.getJ_username()); 	 	
  	return userBean; 
  }

 

ajax 통신을 위해 jquery ajax method 설정을 아래와 같이 jQuery로 선언해준다.

var _param = {j_username:$("#j_username").val(), j_password:$("#j_password").val()};

_data = JSON2.stringify(_param); //jsonString으로 변환

_url = "localhost:8080/login/getLoginCheck.ajax";

-common.js

$.ajax({   
	type : 'POST',   
    url : _url,   
    cache: false,   
    dataType: "json",   
    data: _data,      
    processData: false,   
    contentType: "application/json; 
    charset=utf-8",    
    success : function(data, status){       
    	console.log("status:"+status+","+"data:"+data);       
        alert(data.nm);    
    },   
    error: function(request, status, error){       
    	//alert("loading error:" + request.status);       
        console.log("code : " +  request.statusText  + "\r\nmessage : " + request.responseText);     
    } 
});
반응형

jquery ajax method 정리

2014. 3. 12. 09:53
반응형
$.ajax({
	type: 'POST',
	url: _url,
	cache: false,
	dataType: "json",
	data: _data,   
	processData: true,
	contentType: "application/json; charset=utf-8", 
	success: function(data, status){
	},
	error: function(request, status, error){
	}
});


 Name

 Value/Description

 파라메터는 한 개 이상의 name/value 쌍으로 표시

 async

 Boolean 값

 요청이 비동기식으로 처리되는지 여부를 나타냄 기본값은 true

 beforeSend(xhr)

 

 요청을 보내기 전에 실행되는 함수

 cache

 Boolean 값

 브라우저가 요청된 페이지를 캐싱해야 하는지 여부를 나타냄

 complete(xhr,status)  요청이 완료됐을 때 실행되는 함수
 contentType  서버로 보내지는 데이터의 content-type
기본값은 “application/x-www-form-urlencoded"
 dataFilter(data,type)  XMLHttpRequest의 응답 데이터를 처리할 때 사용되는 함수
 dataType  서버 응답으로 받는 데이터 타입
 error(xhr,status,error)  요청이 실패했을 때 실행되는 함수
 global Boolean 값 요청에 대해 전역 AJAX 이벤트를 실행할 지 여부를 명시함
 jsonp  jsonp 요청에서 callback 함수를 오버라이딩하는 문자열
 jsonpCallback  jsonp 요청에서 callback 함수 이름을 나타냄password
 password  HTTP 접근 인증(access authentication) 요청에 사용할 password를 나타냄
 processData Boolean 값 요청으로 보낸 데이터를 query string 형태로 변환할지 여부를 나타냄 기본값은 true
 scriptCharset  요청할 때의 charset을 나타냄
 success(result,status,xhr)  요청이 성공했을 때 수행되는 함수
 timeout  요청에 대해 로컬의 응답제한시간(timeout)을 밀리초로 나타냄
 traditional Boolean 값 파라미터 직렬화를 기존 방식으로 사용할 지 여부를 나타냄
 type  요청 type(GET 혹은 POST)을 명시함
 url  요청을 보낼 URL을 나타냄 기본값은 현재페이지
 xhr  XMLHttpRequest 오브젝트를 생성할 때 사용하는 함수


반응형
반응형

Tomcat error

Caused by: java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'socialController' bean method

톰켓 Console에서 위와 같은 오류가 발생한 경험이 있다.

알고 보니 두개에 Controller에서 동일한 URL 맵핑으로 method가 정의 되어 있어서 발생하는 경우 이다.

-homeController.java

@RequestMapping(value = "/facebook/posting") 
public void postings(String message , String accessToken, HttpServletRequest request, HttpServletResponse response)  

-socialController.java

@RequestMapping(value = "/posting") 
public void posting(String message, String accessToken, HttpServletRequest request, HttpServletResponse response) 

한곳의 Request Mapping을 변경하면 해결 된다.

반응형
반응형
Spring AOP 메서드 추적 Flow

 

Spring AOP를 활용한 메소드 흐름을 로깅한 로직을 정리합니다.

Server.xml
<!-- spring aspect --> 
<bean id="loggingAspect" class="com.zz.framework.support.aspect.LoggingAspect" /> 
	<aop:config proxy-target-class="true"> 	
    <aop:aspect id="aspectLoggging" ref="loggingAspect"> 		
    	<aop:pointcut id="servicePointcut" expression="execution(* *..*.service.*Service*.*(..))" /> 		
    	<aop:around method="logAround" pointcut-ref="servicePointcut"  /> 	
    </aop:aspect> 
</aop:config>
 
LoggingAspect.java
public class LoggingAspect { 	
	private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);
    
    public void logBefore(JoinPoint joinPoint) { 		
    	logger.debug("logBefore()"); 	
    }  	
    
    public void logAfter(JoinPoint joinPoint) { 		
    	logger.debug("logAfter()"); 	
    }  	
    
    /** 	 
    * 메소드 별 로그 앞뒤로 남기기 	 
    * @param joinPoint 	 
    * @return 	 
    * @throws Throwable 	 
    * @auther jp1020 2014. 1. 15. 	 
    */  	
    public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable { 		
    	Object thisObj = joinPoint.getTarget(); 		
        String className = thisObj.getClass().getName(); 		
        Object[] args = joinPoint.getArgs(); 		
        long currentTime = System.currentTimeMillis();  		
      
        if(logger.isDebugEnabled()) { 			
        	logger.debug("================================================="); 			
        	logger.debug(">>>>>>>>> LOGGING START >>>>>>>>>>"); 			
            logger.debug("[class]:" + className); 			
            logger.debug("[method]:" + joinPoint.getSignature().getName() + "()"); 	
        }  		
        
        Object returnObj = joinPoint.proceed(); 		
        
        if(logger.isDebugEnabled()) { 			
        	logger.debug("[class]:" + className); 			
            logger.debug("[method]:" + joinPoint.getSignature().getName() + "()"); 	
            logger.debug("[소요시간]: {}ms", new Object[]{(System.currentTimeMillis()-currentTime)}); 
            logger.debug(">>>>>>>>>> LOGGING END >>>>>>>>>>"); 			
            logger.debug("================================================="); 		
        } 		
        
        return returnObj; 	
    } 
            
}

 

페이지 호출시 Console창에 출력된 로그를 확인 합니다.
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():46]:================================================= 
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():47]:>>>>>>>> LOGGING START >>>>>>> 
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():48]:[class]:com.zz.board.business.board.service.impl.BoardServiceImpl 
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():49]:[method]:listBoard() 
[2014-02-13 17:52:23] DEBUG [AbstractBeanFactory.doGetBean():246]:Returning cached instance of singleton bean 'loggingAspect'  

내용생략......... 

[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():55]:[class]:com.zz.board.business.board.service.impl.BoardServiceImpl 
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():56]:[method]:listBoard() 
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():57]:[소요시간]: 281ms 
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():58]:>>>>>>>> LOGGING END >>>>>>>> 
[2014-02-13 17:52:23] DEBUG [LoggingAspect.logAround():59]:=================================================

 

 

반응형

+ Recent posts

반응형