2010년 11월 24일 수요일

javascript getElementBy-----() 함수 : IE(InternetExplorer)와 FF(FireFox) 차이

1. getElementById() - document.getElementByid("값")

 

- id를 이용해서 특정 태그 객체를 찾음.

 

- id는 원래 html 문서내에서 유일해야 하므로 지정된 id를 가진 태그가 없거나,

 

  두개 이상이면 getElementByid 메서드는  null로 리턴.

 

ex) 

 

<script type="text/javascript">

    var a = document.getElementByid("test");

    alert(a.value);

</script>

 

<input id="test" value="one">

 

# IE : ID와 Name 둘다 찾아 먼저 나온 것 하나를 return.

  ( IE8부터 FF와 동일하게 ID만 찾음 )

# FF : ID만 찾아 먼저 나온 것 하나를 return.

 

 

2. getElementsByName() - document.getElementsByName("값")

 

- name 이 같은 객체를 배열로 가져오는 매소드.

 

- 지정된 이름이나 태그이름을 가진 태그 객체의 배열을 리턴하며,

 

  객체를 찾지 못하면 길이가 0인 배열을 리턴함.

 

- 중복되지 않게 이름을 고유하게 줬더라고 배열로 들어와서 0번을 차지함.

 

# getElementByName 이란 method는 존재하지 않음.

 

ex)

 

<script type="text/javascript">

    var a = document.getElementsByName("test");

    document.write("배열 값 출력 : ");

    for(var i=0; i<a.length; i++){

        document.write(a.value[i] + " ");

    }

</script>

 

<input type="text" name="NAME" />

<input type="hidden" name="test" value="one" />

<input type="hidden" name="test" value="two" />

<input type="hidden" name="test" value="three" />

 

3. getElementByTagName() - document.getElementsByTagName("태그명")

 

- 요소노드의 태그명을 가지고 접근하는 메소드.

 

ex)

<script type="text/javascript">

    function fun(){

        var items = document.getElementsByTagName("");

        alert(items.length);

        window.onload = func;

    }

</script>

 

 

 

- 문서내의 태그명들을 모두 불러와 items 이라는 변수에 저장하게 된다.  

 

- items 라는 변수는 물론 객체변수이고, 만약에 문서내 태그명들이 여러개라면

 

  items라는 변수는 1차원 배열이 된다. (items[0], items[1], items[2] ... )

 

- items.length : 문서내에 존재하는 태그의 갯수이다.

 

 

 

 

 

2010년 11월 15일 월요일

@RequestParam

@RequestParam

 

 

- RequestParam annotation은 key=value 형태로 화면에서 넘어오는 파라미터를 맵핑된

 

  메소드의 파라미터로 지정해준다.

 

- 주로 get 방식으로 들어오는 request에서 사용한다.

 

- 필수 요건이 아닐 경우, @RequestParam(value="id", required="false")와 같이 옵션을 주고

 

  사용할 수 있다.

 

----------------------------------------------------------------------------------

 

@Controller
public class LoginController {

    @Autowired
    private LoginService loginService;

    @Autowired
    private SampleService sampleService;


    /**
     * 사용자로 부터 아이디, 패스워드를 입력받아 인증 성공이면 세션 객체에 계정정보를 담고 사원정보리스트 페이지로 포워딩한다. 인증에
     * 실패하면 로그인 페이지로 다시 리턴한다.
     */
    @RequestMapping("/loginProcess.do")
    public String login(HttpServletRequest request, @RequestParam("id") String id,
            @RequestParam("password") String password) {

        // TODO [Step 4-1-01]
        // LoginService의 authenticate메소드를 이용하여 로긴여부 체크 Account 객체를 리턴 받는다.
     Account account = (Account) loginService.authenticate(id, password);

       
        /*
         * TODO [Step 4-1-03]
         * 가져온 account 객체가 null 아닌 경우
         * request.getSession() 메소드를 통해 Session을 구해 UserAccount 이름으로 Session 에
         * Attribute로 저장한다. 그리고 "redirect:/loginSuccess.do" 값을 반환한다. null 인경우
         * "login" 반환한다.
         */
     if (account != null) {
      request.getSession().setAttribute("UserAccount", account);
      return "redirect:/loginSuccess.do";
      } else {
      return "login";
      }
    }

    // TODO [Step 4-1-04]
    // loginSuccess.do 로 호출된 처리(@RequestMapping(value="/loginSuccess.do", method=RequestMethod.GET) 를 위한
    // 메소드(loginSuccess) 를 void 타입의 public 메소드를 만들어라.
    @RequestMapping(value = "/loginSuccess.do", method = RequestMethod.GET)
    public void loginSuccess() {
    }

    @RequestMapping("/exception.do")
    public String invokeException(@RequestParam("id") String id ) throws Exception {
       
        sampleService.invokeMethodAException();
       
        return null;
    }

@Controller

@Controller

 

- Controller annotation으로 Controller interface 및 class의 기능을 간단하게 사용할 수 있다.

 

- Annotation을 사용하지 않고, Controller를 직접 상속받아 쓰는 경우 필요한 xml 설정을

 

  생략할 수 있다.

 

- SimpleFormController, MultiActionController 등 Controller의 종류를 명시하지 않고

 

  @Controller 설정만으로 사용할 수 있다.

 

- xxx-servlet.xml 파일에서 component-scan 으로 web controller가 있는 패키지를 명시해

 

  줌으로써, 별도의 bean 설정을 하지 않아도 @Controller로 등록된 클래스 파일에 대한

 

  bean을 자동으로 생성해준다.

 

- Controller로 사용하고자 하는 클래스에 @Controller 지정해주면 component-scan으로

 

  자동 등록된다.

 

 

----------------------------------------------------------------------------------

 

@Controller
public class LoginController {

    @Autowired
    private LoginService loginService;

    @Autowired
    private SampleService sampleService;


    /**
     * 사용자로 부터 아이디, 패스워드를 입력받아 인증 성공이면 세션 객체에 계정정보를 담고 사원정보리스트 페이지로 포워딩한다. 인증에
     * 실패하면 로그인 페이지로 다시 리턴한다.
     */
    @RequestMapping("/loginProcess.do")
    public String login(HttpServletRequest request, @RequestParam("id") String id,
            @RequestParam("password") String password) {

        // TODO [Step 4-1-01]
        // LoginService의 authenticate메소드를 이용하여 로긴여부 체크 Account 객체를 리턴 받는다.
     Account account = (Account) loginService.authenticate(id, password);

       
        /*
         * TODO [Step 4-1-03]
         * 가져온 account 객체가 null 아닌 경우
         * request.getSession() 메소드를 통해 Session을 구해 UserAccount 이름으로 Session 에
         * Attribute로 저장한다. 그리고 "redirect:/loginSuccess.do" 값을 반환한다. null 인경우
         * "login" 반환한다.
         */
     if (account != null) {
      request.getSession().setAttribute("UserAccount", account);
      return "redirect:/loginSuccess.do";
      } else {
      return "login";
      }
    }

    // TODO [Step 4-1-04]
    // loginSuccess.do 로 호출된 처리(@RequestMapping(value="/loginSuccess.do", method=RequestMethod.GET) 를 위한
    // 메소드(loginSuccess) 를 void 타입의 public 메소드를 만들어라.
    @RequestMapping(value = "/loginSuccess.do", method = RequestMethod.GET)
    public void loginSuccess() {
    }

    @RequestMapping("/exception.do")
    public String invokeException(@RequestParam("id") String id ) throws Exception {
       
        sampleService.invokeMethodAException();
       
        return null;
    }
   
}

 

@RequestMapping

@RequestMapping

 

 

- url을 클래스 또는 메소드와 맵핑시켜주는 역할을 한다.

 

- Annotation을 쓰지 않을때 지정했던 Controller 등록을 위한 url bean 설정을 생략할 수 있다.

 

- class에 하나의 url 맵핑을 할 경우, 클래스 위에 @RequestMapping("/url")을 지정하며,

 

    GET 또는 POST 방식 등의 옵션을 줄 수 있다.

 

- 해당되는 메소드가 실행된 후, return 페이지가 따로 정의되어 있지 않으면

 

   @RequestMapping("/url")에서 설정된 url로 다시 돌아간다.

 

- 메소드별로 url 맵핑을 할 경우는 메소드 위에 @RequestMapping("/url")로 지정한다.

 

- return 페이지가 지정되지 않은 경우 원래의 맵핑되었던 url로 돌아간다.

 

- return type을 String으로 하여 redirect:url또는 forward:url을 사용하여 다른 페이지로

 

  넘길 수 있다.

 

--------------------------------------------------------------------------------

 

@Controller
public class LoginController {

    @Autowired
    private LoginService loginService;

    @Autowired
    private SampleService sampleService;


    /**
     * 사용자로 부터 아이디, 패스워드를 입력받아 인증 성공이면 세션 객체에 계정정보를 담고 사원정보리스트 페이지로 포워딩한다. 인증에
     * 실패하면 로그인 페이지로 다시 리턴한다.
     */
    @RequestMapping("/loginProcess.do")
    public String login(HttpServletRequest request, @RequestParam("id") String id,
            @RequestParam("password") String password) {

        // TODO [Step 4-1-01]
        // LoginService의 authenticate메소드를 이용하여 로긴여부 체크 Account 객체를 리턴 받는다.
     Account account = (Account) loginService.authenticate(id, password);

       
        /*
         * TODO [Step 4-1-03]
         * 가져온 account 객체가 null 아닌 경우
         * request.getSession() 메소드를 통해 Session을 구해 UserAccount 이름으로 Session 에
         * Attribute로 저장한다. 그리고 "redirect:/loginSuccess.do" 값을 반환한다. null 인경우
         * "login" 반환한다.
         */
     if (account != null) {
      request.getSession().setAttribute("UserAccount", account);
      return "redirect:/loginSuccess.do";
      } else {
      return "login";
      }
    }

    // TODO [Step 4-1-04]
    // loginSuccess.do 로 호출된 처리(@RequestMapping(value="/loginSuccess.do", method=RequestMethod.GET) 를 위한
    // 메소드(loginSuccess) 를 void 타입의 public 메소드를 만들어라.
    @RequestMapping(value = "/loginSuccess.do", method = RequestMethod.GET)
    public void loginSuccess() {
    }

    @RequestMapping("/exception.do")
    public String invokeException(@RequestParam("id") String id ) throws Exception {
       
        sampleService.invokeMethodAException();
       
        return null;
    }
   
}

 

2010년 11월 12일 금요일

eclipse.ini 파일 설정

-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
128M
-vm
C:\egovCohort_proj\bin\jdk1.5.0\bin\javaw.exe
-framework
plugins\org.eclipse.osgi_3.4.3.R34x_v20081215-1030.jar
-vmargs
-Dosgi.requiredJavaVersion=1.5
-Xms40m
-Xmx512m
-Dfile.encoding=UTF-8

jdk 1.6 -> jdk 1.5 버전 변경 에러

C:\Users\kimjinmi>java -version
Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'
has value '1.5', but '1.6' is required.
Error: could not find java.dll
Error: could not find Java SE Runtime Environment.

 

- 환경변수에서 path의 JAVA_HOME 설정 내용을 맨 앞으로 옮긴다.

 

- oracle과 java의 경로 설정에 문제가 생겨 이런 에러를 발생시킬 수 있다.

 

 

 

%JAVA_HOME%\bin;C:\TmaxSoft\JEUS5.0\bin;C:\TmaxSoft\JEUS5.0\lib\system;C:\app\kimjinmi\product\11.2.0\dbhome_1\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SYSTEMROOT%\System32\WindowsPowerShell\v1.0\;C:\Program Files\Dell\Dell Wireless WLAN Card;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\Subversion\bin;C:\Program Files\TortoiseSVN\bin;%CATALINA_HOME%\bin;%CATALINA_HOME%\conf\web.xml;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\

2010년 11월 1일 월요일

jstl 설명 및 세팅

# 01

 

 

JSTL ( JSP Standart Tag Library )

 

JSP 에서 자바의 각종 기능을 태그형태로 사용할 수 있도록 정의해서 사용할 수 있는 것을 말합니다. 쉽게 말해서 굳이 자바나 JSP 언어를 쓰지 않고 태그형태로 HTML 상에서 불러다 쓸 수 있다는 말이죠. JSTL 은 커스텀태그의 일종입니다. 그렇다면 또 커스텀 태그가 무슨 뜻일까요?

 

커스텀 태그

 

자신이 직접 정의할 수 있는 태그를 말합니다. 평소에 쓰던 태그는 각각 기능이 있지만 그 기능은 한정되어 있고 원하는 기능이 있지만 일반적인 태그의 기능이 한정되었음을 느끼실 때가 많으셨을 겁니다. 그것을 대비하여 자신이 새로운 태그를 만들어 자신만의 태그를 만들 수 잇다는 거죠.

 

커스텀 태그의 장점

 

- 라이브러리 형태로 만들어서 필요할 때마다 쓰기 때문에 개발속도의 향상 업

- 일반 태그의 한게점 극복

- 자기가 직접 작성한 태그이기 때문에 유지보수 및 가독성 업

- 반복적 기능을 쉽게 구현이 가능하기 때문에 효율적

 

최대한 자바코드를 줄이기 위해 거의 모든 자바 코드를 커스텀 태그로 바꾸어 놓은 것을  : JSTL

 

EL ( Expression Language )

 

표현언어를 의미함. 자바코드를 대신하여 다른 표현식을 사용함.

 

<%=age%> -> ${age}

 

위와 같은 형태로 바꾸어 쓸 수 있다.

 

EL 을 쓸때는 ${변수명} 형태로 구성

 

 

# 02

 

다운로드 및 세팅

 

 

http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi

 

 

위의 주소에서 zip 파일을 다운받는다.

 

 

압축을 풀고 lib 폴더에 들어 있는 jstl.jar 파일과 standard.jar 파일을 복사해서

 

tomcat의  lib 폴더 안에, 또는 생성한 프로젝트의 lib 폴더 안에 넣어두면 세팅 완료.

 

 

# 03

 

예제

 

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
  <title>JSP Page</title>
 </head>
 <body>
 <h1>EL Function(JSTL 1.1)</h1>
 <c:set var="name" value="Oracle dbms 오라클 클럽" />
 <c:set var="name" value="${fn:trim(name)}" /><br/>
 </body>
</html>