2014년 6월 10일 화요일

[펌][SPRING]servlet mapping

첨에 익숙하지 않아서 그렇지 나름 괜찬은 방법인거 같다.
또한 MVC 패턴을 들어가기 위해선 꼭 필요한 방법이기도 하다.(사실 않써도 무관하지만 나중에 파라미터 숨기는 데에도 유용한거 같다.)

서블릿 매핑을 왜 쓰느냐?! 불러올 웹 페이지를 명시적으로 선언해서 보호 하는데 있다.
1. 위와 같이 파일의 이름을 변형시켜서 현재 실행중인 파일을 알리지 않을수 있다
2. 넘겨지는 파라미터들 또한 숨길수 있어서 접근제한,보안,오류페이지 등을 사용자가 설정할수 있다. 
3. 재컴파일을 하지 않아서 자원을 효율적으로 쓸수 있다.
등등의 편의성을 제공한다.

어떻게 쓰느냐 하면은~

웹 어플리케이션에서는 하나의 DD(Deployment Descriptor - 배포 서술자) 가 있다.
이 DD 안에 서블릿 매핑을 한다. 보통 DD는 web-inf 안의 web.xml로 되어 있다.


위와 같이 되어 있는게 매핑이 된 페이지 들이다. 사용자는 알지 못하지만 이벤트시 각각의 이름에 해당하는 서블릿 파일을 불러오도록 설정 되어 있다.

서블릿 매핑에는 두개 이상의 파일이 필요하다. 먼저 매핑된 페이지를 로드할 페이지와 불릴 페이지다. 

1. form으로 데이터를 받을 서블릿을 호출한다. 여기서 매핑된 이름은 login.do 이다.

2. web.xml에서 <servlet-mapping>태크안에 매핑된 이름을 찾는다. 
<url-pattern>태그로 이루어진 곳이 바로 불린 이름이다. 
여기서 웹컨테이너는 위의 <servlet-name>을 따라간다.
3. 찾은 이름으로  <servlet>태그에서 <servlet-name>의 같은 이름을 찾는다.(위에서 loginServlet로 찾은걸 똑같은 이름을 찾는다.)
그리고 마지막으로 불릴 파일의 경로 or 직접적인 이름 을 찾는다.(여기선 com\my\login.java 파일을 찾는다.)
4. 최종 path 는 다음과 같다.



- 간단하면서도 은근히 헷갈린다. 잘 따라해보면 될것이다. 
- 불릴이름이 jsp 파일이면 실행이 안된다. 무조건 서블릿인 java 파일이여야만 한다.
- 만일 다른 사람의 jsp를 서블릿 매핑을 할경우 java파일을 하나 만들어서 서블릿으로 호출하면 된다.
-  대부분의 url-pattern을 작성시 *.do 파일로 표기 한다.

2014년 5월 29일 목요일

[SPRING]자바로 프레임 워크 만들기

1.JdbcHelper.java
  1. package naver.cafe.jjdev.jdbc;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.DriverManager;
  5. import java.sql.SQLException;
  6. import java.sql.Statement;
  7. import java.util.Set;
  8.  
  9. public class JdbcHelper {
  10. //  private DataSource dataSource; 
  11.     private Connection conn;
  12.     private Statement stmt;
  13.    
  14.     public void connect(String url,String user,String pw){
  15.         try {
  16.         //  this.conn = dataSource.getConnection();
  17.             this.conn = DriverManager.getConnection(url,user,pw);
  18.             System.out.println(url+"에 접속 성공!");
  19.         } catch (SQLException e) {
  20.             throw new SQLRuntimeException(e);
  21.         }
  22.     }
  23.    
  24.     public int executeUpdate(String query){
  25.         try {
  26.             this.stmt = this.conn.createStatement();
  27.             // 입력, 수정, 삭제 코드 구현...
  28.         } catch (SQLException e) {
  29.             throw new SQLRuntimeException(e);
  30.         }
  31.         return 0;
  32.     }
  33.    
  34.     public Set<Object> executeQuery(String query){
  35.         try {
  36.             this.stmt = this.conn.createStatement();
  37.             // 조회 코드 구현...
  38.         } catch (SQLException e) {
  39.             throw new SQLRuntimeException(e);
  40.         }
  41.         return null;
  42.     }
  43. }
2.SQLRuntimeException
  1. package naver.cafe.jjdev.jdbc;
  2.  
  3. import java.sql.SQLException;
  4.  
  5. public class SQLRuntimeException extends RuntimeException {
  6.     private static final long serialVersionUID = 1L;
  7.     public SQLRuntimeException(){}
  8.     public SQLRuntimeException(SQLException e){
  9.         System.out.println("실제 일어난 예외 메세지:"+e.getMessage());
  10.         e.printStackTrace();
  11.     }
  12. }
3.MainTest
  1. package naver.cafe.jjdev.jdbc.test;
  2.  
  3. import naver.cafe.jjdev.jdbc.JdbcHelper;
  4.  
  5. public class MainTest {
  6.     public static void main(String[] args){
  7.         /*
  8.             Class.forName("");사용하여 드라이버 로딩
  9.             또는 커넥션풀안에서 DataSource를 로딩...
  10.             DataSource dataSource = ......
  11.         */
  12.        
  13.         /*****************************************************
  14.         JdbcHelper프레임워크를 사용하면 JDBC API는
  15.         프레임워크 안으로 숨겨지고 예외도 강제하지 않는다.
  16.         ******************************************************/
  17.        
  18.         JdbcHelper jdbcHelper = new JdbcHelper();
  19.         jdbcHelper.connect("url입력""user입력","pw입력");
  20.         // jdbcHelper.connect(dataSource)
  21.         jdbcHelper.executeQuery("SELECT * FROM table이름");
  22.     }
  23. }
자바 프로젝트를 jar로 임포트해서 이 프레임 워크를 사용할 프로젝트의 외부 라이브러리에 추가하여 사용

2014년 5월 22일 목요일

[Java]sort(정렬)

1.버블정렬
  1. public class SortBubble {
  2.      
  3.     public static void main(String[] args) {
  4.         int[] src = {4,0,1,6,3,9,2,5,8,7};
  5.         int temp = 0;
  6.        
  7.         for(int j=0; j<src.length-1; j++){
  8.             for(int i=0; i<src.length-1; i++){
  9.                 if(src[i] > src[i+1]){
  10.                     temp = src[i];
  11.                     src[i] = src[i+1];
  12.                     src[i+1] = temp;
  13.                 }
  14.             }
  15.         }
  16.         for(int i=0; i<src.length; i++){
  17.             System.out.print(src[i]+" ");
  18.         }
  19.     }
  20. }
2.선택정렬
  1. public class SelectBubble {
  2.     public static void main(String[] args) {
  3.         int[] src = {4,0,1,6,3,9,2,5,8,7};
  4.         int temp = 0;
  5.         int min = 0;
  6.        
  7.         for(int j=0; j<src.length-1; j++){
  8.             min = j;
  9.             for(int i=j+1; i<src.length; i++){
  10.                 if(src[i] < src[min]){
  11.                     temp = src[min];
  12.                     src[min] = src[i];
  13.                     src[i] = temp;
  14.                 }
  15.             }
  16.         }
  17.         for(int i=0; i<src.length; i++){
  18.             System.out.print(src[i]+" ");
  19.         }
  20.     }
  21. }
3.삽인정렬
  1. package sort;
  2.  
  3. public class SortInsertion {
  4.  
  5.     public static void main(String[] args) {
  6.         int[] src = {4,0,1,6,3,9,2,5,8,7};
  7.         int temp = 0;
  8.         int left = 0;
  9.        
  10.         for(int j=1; j<src.length; j++){
  11.             temp = src[j];
  12.             left = j-1;
  13.            
  14.             while((left>=0)&&temp<src[left]){
  15.                 src[left+1] = src[left];
  16.                 left--;
  17.             }
  18.             src[left+1]=temp;
  19.         }
  20.         for(int i=0; i<src.length; i++){
  21.             System.out.print(src[i]+" ");
  22.         }
  23.     }
  24. }

[SPRING]CGLIB라이브러리 다운

http://mvnrepository.com/search.html?query=cglib 메이븐 중앙 저장소 -
CGLIB검색후 nodep에 있는 최신버전 다운로드

2014년 5월 21일 수요일

[SPRING]빈 등록 방법(XML편)

1.applicationContext.xml
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 빈 등록 방법 5가지중 XML을 사용하는 3가지 방법입니다 -->
  3. <beans xmlns="http://www.springframework.org/schema/beans"
  4.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5.        xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  6.        xmlns:context="http://www.springframework.org/schema/context"
  7.        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
  8.                             http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
  9.                             http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd">
  10.         <!-- 1.bean태그를 사용하여 빈 등록 -->
  11.     <bean id="user" class="domain.User">
  12.     </bean>
  13.         <!-- 2.전용태그를 사용하여 빈 등록 -->
  14.     <jdbc:embedded-database id="embeddedDatabase" type="HSQL">
  15.     </jdbc:embedded-database>
  16.         <!-- 3.stereo type의 annotation을 사용 -->
  17.         <!-- service패키지 아래 모든 스테레오 타입을 빈으로 등록 -->
  18.     <context:component-scan base-package="service"/>
  19. </beans>
2.User.java
  1. package domain;
  2. public class User {
  3.     public void test(){
  4.         System.out.println("User test()실행");
  5.     }
  6. }
3.MyService.java
  1. package service;
  2.  
  3. import org.springframework.stereotype.Component;
  4.  
  5. @Component("myService")
  6. public class MyService {
  7.     public void test(){
  8.         System.out.println("MyService test()실행");
  9.     }
  10. }
4.BeanTagTest
  1. import javax.sql.DataSource;
  2.  
  3. import org.springframework.context.support.GenericApplicationContext;
  4. import org.springframework.context.support.GenericXmlApplicationContext;
  5.  
  6. import service.MyService;
  7. import domain.User;
  8.  
  9. public class BeanTagTest {
  10.     public static void main(String[] args){
  11.         GenericApplicationContext ac = new GenericXmlApplicationContext("applicationContext.xml");
  12.        
  13.         //1.<bean>태그 사용
  14.         User user = ac.getBean("user", User.class);
  15.         user.test();
  16.         //2.전용태그 사용
  17.         DataSource ds = ac.getBean("embeddedDatabase", DataSource.class);
  18.         System.out.println(ds);
  19.         //2.스테레오타입 애노테이션 & 전용태그 빈 스캔 사용
  20.         MyService myService = ac.getBean("myService", MyService.class);
  21.         myService.test();
  22.     }
  23. }
http://hsqldb.org/ 다운로드 후 hsqldb와sqltool jar파일을 외부라이브러리에 추가

  • XML:<bean>태그
<bean>태그를 사용한는 건 가장 단수하면서도 가장 강력한 설정 방법
  • XML:네임스페이스(스키마등록)와<bean>태그
<bean>태그 외에도 다양한 스키마에 정의된 전용 태그를 사용해 빈을 등록하는 방법
  • XML:스테레오타입 애노테이션과 빈 스캐너
XML문서와 같이 한곳에 명식적으로 선언하지 않고도 스프링 빈을 등록하는 방법