728x90

사진 업로드를 할때


getServletContext().getRealPath()로 가져온 경로대신


실제 프로젝트 폴더의 업로드된 파일이 저장되는


uploaded 폴더를 경로로 잡았다



하지만 웹 서버가 켜진동안 프로젝트 폴더 안에 업로드 한 파일들이


package explorer로는 확인이 안된다.



이클립스 설정 에 들어가서



General-Workspace에


Refresh on using native hooks or polling과


Refresh on access를 체크해주면


해당 uploaded 폴더를 열거나 새로고침할때마다


업로드된 파일을 확인할수가 있다.




300x250
728x90

request 타입 에러를 해결하고 나서


form 태그에 enctype="multipart/form-data" 추가하고


servlet-context.xml에 multipartResolver도 등록되었다.



스프링 파일업로드는 편리하게도


File file = new File(경로,파일이름);


한 뒤에


request.getFile("파라미터이름").transferTo(file);


만 하면 파일업로드가 되지만


경로를 잡을때 조심해야 한다.



아래는 회원가입 기능을 구현하는 가입 메소드인데

private final static String path = "/resources/uploaded";



 public void signinProcess(MultipartHttpServletRequest request){
  String id = null;
  String password = null;
  
  try {
   id = new String(request.getParameter("id").getBytes(),"utf-8");
   password = new String(request.getParameter("password").getBytes(),"utf-8");
   
  } catch (UnsupportedEncodingException e1) {
   e1.printStackTrace();
  }
  String filePath = request.getSession().getServletContext().getRealPath(path);
  
  String fileName = "default.png";
  
  System.out.println("filePath : " + filePath);
  
  System.out.println("id :  " + id +"  password : " + password);
  
  if(!request.getFile("photo").isEmpty()){
   System.out.println("사진이 존재합니다.");
   
   
   
   fileName = id + ".png";
   File file = new File(filePath,fileName);
   
   try {
    request.getFile("photo").transferTo(file);
    
   } catch (IllegalStateException e) {
    e.printStackTrace();
   } catch (IOException e) {
    e.printStackTrace();
   }
   
  }
  
  System.out.println("fileName : " + fileName);
 }


request.getSession().getServletContext().getRealPath(realPath);



realPath 변수의 실제 경로인


D:\dev\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\Project01\resources\uploaded\


는 직접 저 폴더로 들어가보면 알지만


존재하지 않아서


FileNotFoundException이 발생하게 된다.



그래서 가져온 실제경로를 가지고 파일이 저장될 경로를 잘 설정하자


필자는


프로젝트 폴더의 webapp/resources/uploaded 아래에 저장되도록


filePath를 수정하였다.



String sep = File.separator;
  System.out.println("sep : " + sep);
  

아 경로 지정할때 \ 은 File.separator로 경로구분자를 가져와서 사용해야한다.


  filePath = "C:"+sep+"Users"+sep+"do"+sep+"git"+sep+"Project01"+sep+"src"+sep+"main"+sep+"resources"+sep+"uploaded";


경로 구분자로 filePath를 고쳐주고 다시 폼으로 입력시키면


해당 경로에 파일이 잘 올라온다.

300x250
728x90

스프링으로 파일업로드를 구현하는데


자꾸


Current request is not of type [org.springframework.web.multipart.MultipartHttpServletRequest]


에러가 뜬다


이게 맵핑된 메소드에서 MultipartHttpServletRequest 타입의 인자를 받는 곳에서


요청이 Multipart 타입이 아닌 그냥 HttpServletRequest로 가서 이 에러가 발생하는데



form 태그에다가


enctype="multipart/form-data" 나



servletContext에



 <bean id="multipartResulver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>


를 추가해도 해결되지 않는다.




그런데 조금 더 보니


빈 설정에서 아이디에 오타있더라.. 문제 해결!


<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

300x250
728x90

최근 이틀 동안


오라클 스프링을 jndi 방식으로 연동하는데


계속 dbpool을 못찾아서 웹서버를 못돌리고 있었습니다.


mysql을 연동할때는 jdbcName에


jdbc/dbpool 이름을 적으면 잘 됫지만


 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="jdbc/DBPool01"/>
  <property name="resourceRef" value="true"/>
 </bean>


오라클 연동할때는 이 방식이 전혀 안되더군요.


하루종일 검색하다 보니


http://blog.naver.com/artfile/130159655680


이 페이지에서 답을 찾았습니다



 <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
  <property name="jndiName" value="java:comp/env/jdbc/DBPool01"/>
  <property name="resourceRef" value="true"/>
 </bean>



jndiName 프로퍼티의 벨류를 위 처럼 바꾸시면 오라클 jndi도 잘 작동됩니다

300x250
728x90

servlet-context.xml 에


아래의 태그 처럼


<mvc:view-controller path="signinForm" view-name="member/signinForm"/>
 


받는 요청과 보여줄 뷰 페이지를 입력하시면


Controller에 RequestMapping과 메소드 만들 필요없이 맵핑이 됩니다.

300x250
728x90

var param = {
      id : $("#id").val(),
      password : $("#password").val()
     };
    $.ajax({
     type:"post",
     url:"ajax/loginCheck",
     contentType:"application/json;charset=utf-8",
     dataType:"json",
     async:false,
     data:JSON.stringify(param),
     processData:false,
     success:function(responseData){
      var response = responseData;
      var result = response.result;
      var message = response.message;
      var mes = "<p style='color:red;'>"+message+"</p>";
      $("#loginResult").append(mes);
      
      if(result == "1"){
       bool = true;
      }else if(result == "2"){
      }else{
      }
      
     },error:function(error){
      alert("에러 발생");
     }
     
    })

300x250
728x90

<?xml version="1.0" encoding="UTF-8"?>
<Context>
 <Resource name="jdbc/DBPool01"
  auth="Container"
  type="javax.sql.DataSource"
  driverClassName="oracle.jdbc.driver.OracleDriver"
  url="jdbc:oracle:thin:@localhost:1521:xe"
  factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"
  username="hr"
  password="hr"
  maxActive="20"
  maxIdle="3"/>
</Context>

300x250
728x90

<?xml version="1.0" encoding="UTF-8" ?>

<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

</configuration>

300x250
728x90

오라클과 톰켓은 동일한 8080포트를 사용해서 에러가 발생한다


그래서 오라클 포트를 바꿔줘야하는데


1.sys 계정으로  db 접속


2.현재 포트를 확인하려면

SELECT dbms_xdb.gethttpport() FROM dual;


3. 포트변경은

exec dbms_xdb.sethttpport(9090);

commit;



300x250
728x90

백신 프로그램을 삭제하시면 됩니다.


최근에 새로 산 노트북에서


스프링 환경설정 다 제대로 작동되고


원격 저장소에 있는 라이브러리들도 잘 가지고 오지만


유독 메이븐 인덱스 업데이트만 제대로 안됬습니다.


몇일 동안 해결하겠다고 삽질해봤지만


도저히 해결하지는 못해서


다른 컴퓨터에서 다운받은 메이븐 인덱스 파일을


이 컴퓨터 저장소 위치에 옮겨 놓는 식으로 했었는데


필요없는 백신프로그램 지우고


다시 메이븐 인덱스 업데이트 시키니


제대로 잘 받더군요.


혹시나 저와 같은 문제로 고생하셧을 분들께 도움이 되면 좋겟습니다.


300x250

+ Recent posts