원인 :  UserDetailsService를 Implements 한 UserDetailServiceImpl 매소드중 로그인 실행시 
실행 되는 loadUserByUsername 매소드의 반환 
return new User(user.getUnm(), user.getPw(), authorities); 안에 파라미터가 하나라도 null 일시 생기는 오류

해결방안

1. 파라미터들(user.getUnm(), user.getPw(), authorities)의 널체크

2. UserEntity user = mapper.selUser(username); 같이 매퍼에 연결 되어 있을 경우 sql 다시 체크 

 

bin 폴더에 가서 

bin $ sudo ./catalina.sh start  구동시 
tomcat started 문구는 떻지만 화면은 안뜰때.

 

1. 로그 파일 확인 (로그 경로 위치파악)

$sudo find / -name catalina.out

 

2. 로그파일 상위에 들어가기 ( 경로는 상황에 다를 수 있음)

$cd /home/ubuntu/apache-tomcat-9.0.52/logs

 

3.로그파일 읽기

$sudo tail -f /home/ubuntu/apache-tomcat-9.0.52/logs/catalina.out

 

4. 발생원인  Caused by: java.lang.IllegalArgumentException: The main resource set specified [] is not valid

conf 안 server.xml 안에 맨밑 <host> <Context path="" docBase="" /></host>

에서 docBase안에 파일을 찾지못해서 발생 docBase경로를 바꾸어준거나 이름 오타 확인

java.lang.NumberFormatException: For input string: "writer"
	java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	java.lang.Integer.parseInt(Integer.java:580)
	java.lang.Integer.parseInt(Integer.java:615)
	javax.el.ListELResolver.coerce(ListELResolver.java:150)
	javax.el.ListELResolver.getValue(ListELResolver.java:67)
	org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:125)
	org.apache.el.parser.AstValue.getValue(AstValue.java:169)
	org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)
	org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:699)
	org.apache.jsp.WEB_002dINF.views.user.info_jsp._jspService(info_jsp.java:129)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:378)

 필자의 오류는 리스트안에 객체중 특정 값을 뽑아낼때 오류가 발생

 

데이터구조: 

Mapper

mapper를 통해 DB에서 데이터를 추출 BoardDomain 타입으로 리턴

infoService.java

리스트 형식으로 묶어서 반환 한뒤

infoController

controller에서 객체를 만들고 model를 사용해 infoUser의 명명으로  jsp에 뿌리고 있었다.

즉 List<BoardDomain>으로 mapper에서 바로 만들어 dto에 담아서 jsp로 날리고 있었음

그중 list안 BoardDomian중 writer를 뽑아낼때  

<div>${requestScope.infoUser.boardList.writer} 님의 프로필</div>

를 사용했었는데 이때 오류가 터진것 

 

원인: List로 날리고 있었기 때문에 for을 돌릴땐 list안 객체수만큼 반복이 되지만 단독으로 뿌릴땐 index번호가 필요 

 

해결: 

<div>${requestScope.infoUser.boardList[0].writer} 님의 프로필</div>

 

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.koreait.alsamo.user.info.InfoMapper.countAllReply
	org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:235)
	org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:53)
	org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:115)
	java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1688)
	org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:102)
	org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:85)
	com.sun.proxy.$Proxy45.countAllReply(Unknown Source)
	com.koreait.alsamo.user.info.InfoService.selAllReplyCount(InfoService.java:36)
	com.koreait.alsamo.user.info.InfoUserController.infoUser(InfoUserController.java:22)
	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

1. mapper 인터페이스 안에 생성된 매소드와 mapper.xml 안에 sql문이 1대1일 매핑이 되어있는지 확인

2. 매핑이 1대1 되어있는게 맞다면 sql문의 id명 오타가 있나 없나 확인

3. 오타도 없다면 mapper.xml과 mapper인터페이스 사이 경로가 제대로 되어있나 확인

Mapper.xml안에 설정 sql문이 없어서 생기는 문제

@Mapper
public interface UserMapper {
    int insUser(UserEntity param);

    UserEntity selUser(UserEntity param);

    int insGoogleUser(UserEntity param);

    UserEntity checkSocialUserExsist(UserEntity param);

    UserEntity chckAuthkey(UserEntity param);

    int upAuth_no(UserEntity param);

    int updUser(UserEntity param);

    UserEntity selId(UserEntity param);

    int updMark(UserEntity param);

    String selNowMark(int authNo);
}

mapper 클래스에 있는 모든 매소드가 mapper.xml 파일안에 sql로 제대로 있는지 확인 있다면 쿼리문 id 오타 확인

<form action="/user/updUserMark" method="post" enctype="multipart/form-data" id="frm" onsubmit="return imgChk();">
    User 마크 선택 : <input type="file" name="profileImg" accept="image/*">
    계층 선택 : <select>
    <option value="1">Superadmim</option>
    <option value="2">Admim</option>
    <option value="3">GenaralUser</option>
</select>
    <input type="submit" value="변경하기">
</form>

문제: select를 post방식으로 보냈으나 무슨 이름으로 보냈는지 지정하지 않아 생기는 이유

 

해결-> select에 name 부여

 

계층 선택 : <select name="authNo">
    <option value="1">Superadmim</option>
    <option value="2">Admim</option>
    <option value="3">GenaralUser</option>
</select>

ErrLog

25-Jun-2021 15:14:57.721 심각 [http-nio-8080-exec-4] org.apache.catalina.core.StandardWrapperValve.invoke 경로 []의 컨텍스트 내의 서블릿 [dispatcher]을(를) 위한 Servlet.service() 호출이, 근본 원인(root cause)과 함께, 예외 [Request processing failed; nested exception is org.apache.tiles.request.render.CannotRenderException: ServletException including path '/WEB-INF/views/template/template.jsp'.]을(를) 발생시켰습니다.
	org.apache.tiles.template.NoSuchAttributeException: Attribute 'content' not found.
		at org.apache.tiles.template.DefaultAttributeResolver.computeAttribute(DefaultAttributeResolver.java:50)
		at org.apache.tiles.template.InsertAttributeModel.resolveAttribute(InsertAttributeModel.java:165)
		at org.apache.tiles.template.InsertAttributeModel.execute(InsertAttributeModel.java:121)
		at org.apache.tiles.jsp.taglib.InsertAttributeTag.doTag(InsertAttributeTag.java:299)
		at org.apache.jsp.WEB_002dINF.views.template.template_jsp._jspx_meth_tiles_005finsertAttribute_005f1(template_jsp.java:283)
		at org.apache.jsp.WEB_002dINF.views.template.template_jsp._jspService(template_jsp.java:157)
		at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:71)
		at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
		at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:467)
		at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:378)
		at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:326)
        
        ========중략========

오류 정의 : 'content' Attribute 된 프로퍼티가 없어서 생긴 문제.

tlies를 설정한 .xml 의 definition 프로퍼티 중 content가 다 들어가있는지 확인하자

content는 꼭 들어 가야한다. 

 

Solution

   <definition name="*/*" extends="main_template">
        <put-attribute name="res" value="{1}/{2}" />
    </definition>

<put-attribute name="content" value=""/> 삽입

   <definition name="*/*" extends="main_template">
        <put-attribute name="res" value="{1}/{2}" />
        <put-attribute name="content" value=""/>
    </definition>

ErroLog

org.springframework.aop.AopInvocationException: Null return value from advice does not match primitive return type for: public int com.koreait.alsamo.user.UserService.join(com.koreait.alsamo.user.UserEntity) throws javax.mail.MessagingException,java.io.UnsupportedEncodingException
		at org.springframework.aop.framework.CglibAopProxy.processReturnType(CglibAopProxy.java:395)
		at org.springframework.aop.framework.CglibAopProxy.access$000(CglibAopProxy.java:85)
		at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:694)
		at com.koreait.alsamo.user.UserService$$EnhancerBySpringCGLIB$$eb198eb.join(<generated>)
		at com.koreait.alsamo.user.UserController.join(UserController.java:49)
		at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
		at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
		at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
		at java.lang.reflect.Method.invoke(Method.java:498)
		 --- 중략 ---

void 매소드가 아닌 return 값이 있는 매도스 위에 사용 할때 뜨는 오류

@Async 애노테이션 사용 할때는 void매소드 위에 할 때 제일 좋고 리턴값이 필요할딴 Furture 처리를 해야한다.

 

 

 

Solution

public int join(UserEntity param) throws MessagingException, UnsupportedEncodingException

int(return 값 필요) -> void

public void join(UserEntity param) throws MessagingException, UnsupportedEncodingException

---끗

 

리턴 값이 필요하다면 따로 처리를 해야한다 대표적인 방법은 furture처리 

+ Recent posts