2013년 8월 28일 수요일

JSP에서 JSTL사용하기

1. 아파치 홈페이지에서 jstl을 다운로드한다.

http://tomcat.apache.org/taglibs/standard/

binary파일을 받도록 한다.

2. 다운로드한 파일의 압축을 푼다.

3. jstl.jar , standard.jar파일을 lib파일에 복사한다.

4. jstl을 사용할 jsp 파일의 윗 부분에  다음 부분을 추가한다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

5. jstl 태그를 시험해본다.

<c:out value="Success"></c:out>

2013년 8월 27일 화요일

[Linux] MariaDB, MySQL 기본 인코딩 utf-8로 변경 하는 방법

처음 MariaDB나 MySQL을 설치하면 기본 인코딩은 latin1이다.
영어 데이터를 저장할 때는 한글이 ?? 로 나오게 된다. 그래서 기본 인코딩 설정을 변경 해주어야 한다.

# vi /etc/mysql/my.cnf
MariaDB를 설치했는데 설정 파일이 저 위치에 있었다. MySQL도 크게 다르지 않을 거라고 생각한다.
파일을 열어서
[mysqld] 부분에
character-set-server=utf8
을 추가 하여 준다.

그 후 데이터베이스를 다시 시작한다.

# service mysql restart

제대로 바뀌었는지 확인해본다.

# msyql -u root -p
Enter password: ****

>> show variables like 'c%';


출처 : http://appletree.or.kr/blog/notes/mysql%EC%9D%98-%EA%B8%B0%EB%B3%B8-%EC%9D%B8%EC%BD%94%EB%94%A9default-encoding%EC%9D%84-utf8%EC%9C%BC%EB%A1%9C-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0/

2013년 8월 25일 일요일

JSP/Servlet을 기반으로한 MVC모델의 요청처리 - 4 (요청결과 보여줄 View작성 및 결과)

Servlet에서 request객체에 값을 심고 View이름을 리턴하였다.

결과를보여줄 View를 작성한다.

WebContent폴더에 test.jsp파일작성
WebContent 에 있는 파일은 요청을 통해 직접 접근이 가능하다.
WEB-INF폴더에 파일을 넣으면 그 파일들은 직접 접근이 불가능

test.jsp






TestImpl 에서 심은 값을 EL(Expression Language) 이용하여 가져온다.
request객체, session객체, application객체 중에 일치하는 키가 있으면 그 값을 가져온다.
명시적으로 지정도 가능
${키값}

결과 확인

서버를 구동시킨 후
브라우저를 띄우고
localhost:8080/ExWebProject/test.MyServlet
입력








이것으로 부족하긴 하지만 JSP/Servlet을 기반으로 한 MVC 패턴의 어플리케이션의 기본 골격이 어느 정도 완성이 되었다. 서버로 요청이 들어오면 Servlet이 요청을 받아들이고 요청 처리 객체를불러와 요청을 처리한 후 View로 처리 결과를 출력 하였다. Servlet은 Controller로써 동작을 하였고 , JSP는 View의 역할을 하였다. Model은 나중에 DataBase에 접근할 Dao 클래스로 정의가 될 것이다.

JSP/Servlet을 기반으로한 MVC모델의 요청처리 - 3 (요청 처리 인터페이스작성과 구현 및 RequestMapping)


요청을 처리할 클래스가 구현할 인터페이스 작성

MyService.java

  1 package com.jch;
  2 
  3 import java.io.IOException;
  4 
  5 import javax.servlet.ServletException;
  6 import javax.servlet.http.HttpServletRequest;
  7 import javax.servlet.http.HttpServletResponse;
  8 
  9 public interface MyService {
 10     public String execute(HttpServletRequest req, HttpServletResponse resp) 
 11             throws ServletException, IOException;
 12 }


인터페이스 구현

TestImpl.java

  1 package com.jch;
  2 
  3 import java.io.IOException;
  4 
  5 import javax.servlet.ServletException;
  6 import javax.servlet.http.HttpServletRequest;
  7 import javax.servlet.http.HttpServletResponse;
  8 
  9 public class TestImpl implements MyService {
 10 
 11     @Override
 12     public String execute(HttpServletRequest req, HttpServletResponse resp)
 13             throws ServletException, IOException {
 14         
 15         //request에 content를 키로 하는 값 심기
 16         req.setAttribute("content", "요청 처리 완료");
 17         //view리턴
 18         return "test.jsp";
 19     }
 20 
 21 }


서블릿 구현과 요청을 처리할 클래스의 구현이 완료 되었다.

web.xml을 수정하여 서블릿에 RequestMapping을 하도록 한다.
RequestMapping이란 서블릿이 어느 요청을 처리할지 정의 하는 것이다.

WebContent/WEB-INF 디렉토리에 web.xml 파일 생성(프로젝트 생성 시 Generate web.xml deployment discriptor 옵션을 체크했다면 미리 생성되어있음)

web.xml

  1 <?xml version="1.0" encoding="UTF-8"?>
  2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3     xmlns="http://java.sun.com/xml/ns/javaee" 
  4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
  5     id="WebApp_ID" version="3.0">
  6     
  7   <display-name>ExWebProject</display-name>
  8   
  9 <!-- 디폴트로 보여줄 페이지 -->
 10 <!-- 위에서 부터 아래순으로 페이지를 찾는다. -->
 11   <welcome-file-list>
 12     <welcome-file>index.html</welcome-file>
 13     <welcome-file>index.htm</welcome-file>
 14     <welcome-file>index.jsp</welcome-file>
 15     <welcome-file>default.html</welcome-file>
 16     <welcome-file>default.htm</welcome-file>
 17     <welcome-file>default.jsp</welcome-file>
 18   </welcome-file-list>
 19   
 20 <!-- 서블릿 등록 -->
 21   <servlet>
 22 <!-- 서블릿 명 -->
 23       <servlet-name>MyServlet</servlet-name>
 24 <!-- 서블릿 클래스 지정 -->
 25       <servlet-class>com.jch.MyServlet</servlet-class>
 26   </servlet>
 27   
 28 <!-- 서블릿 매핑 -->
 29   <servlet-mapping>
 30 <!-- 서블릿 명 -->
 31       <servlet-name>MyServlet</servlet-name>
 32 <!-- 요청을 처리할 패턴 지정 확장자가 MyServlet인 요청이 들어오면 처리 -->
 33       <url-pattern>*.MyServlet</url-pattern>
 34   </servlet-mapping>
 35   
 36 </web-app>

server.xml에 프로젝트 등록

이제 까지 프로젝트가 서버에 등록된 것은 아니었다. 프로젝트를 등록하게되면 서버가 구동될때
프로젝트를 server.xml 파일과 등록된 프로젝트의 web.xml파일을 읽고 필요한 클래스를 로드한다.

프로젝트 오른쪽 클릭 Run As -> Run on Server를 클릭한다. Apache Tomcat V7.0을 선택하고
Finish를 누르면 서버구동 server.xml에 프로젝트가 자동으로 등록된다.

수동으로 설정을 하려면 server.xml파일의 <Host></Host>사이에 <Context>앨리먼트를 추가하여 프로젝트를 등록한다.

JSP/Servlet을 기반으로한 MVC모델의 요청처리 - 2 (프로젝트 생성 및 Servlet 구현)

우선 웹 프로젝트를 생성하도록 한다.
Eclipse에서 File -> New -> Dynamic Web Project

프로젝트 명을 정하고 New Runtime을 눌러 구동 시킬 서버를 지정한다.






Apache Tomcat v7.0 을 선택하고 Next






Browse를 눌러 Apache Tomcat이 있는 디렉토리를 지정한 후 Finish






Finish를 눌러 프로젝트 생성



서블릿 클래스 구현
HttpServlet 클래스를 상속받아 init()메소드와 doGet(), doPost()메소드를 구현한다.
MyService는 인터페이스로 서비스를 처리할 클래스가 구현해야할 인터페이스이다.

MyServlet.java

  1 package com.jch;
  2 
  3 import java.io.IOException;
  4 import java.util.HashMap;
  5 
  6 import javax.servlet.RequestDispatcher;
  7 import javax.servlet.ServletException;
  8 import javax.servlet.http.HttpServlet;
  9 import javax.servlet.http.HttpServletRequest;
 10 import javax.servlet.http.HttpServletResponse;
 11 
 12 public class MyServlet extends HttpServlet {
 13     HashMap<String,MyService> hm = new HashMap<String,MyService>();
 14     
 15     @Override
 16     public void init() throws ServletException {
 17         // 초기화 함수
 18         // '/test' 요청을 처리내용을 구현한 TestImpl객체를 HashMap에 넣음
 19         // TestImpl은 MyService를 구현하였음
 20         hm.put("/test", new TestImpl());
 21     }
 22 
 23     @Override
 24     protected void doGet(HttpServletRequest req, HttpServletResponse resp)
 25             throws ServletException, IOException {
 26         //Get 방식 요청 처리
 27         //doJob()으로 위임
 28         doJob(req, resp);
 29     }
 30 
 31     @Override
 32     protected void doPost(HttpServletRequest req, HttpServletResponse resp)
 33             throws ServletException, IOException {
 34         //Post 방식 요청 처리
 35         //doJob()으로 위임
 36         doJob(req, resp);
 37     }
 38     
 39     public void doJob(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
 40         
 41         //요청이 제대로 들어왔는지 확인
 42         String command = req.getRequestURI();
 43         if(command.indexOf(req.getContextPath())==0){
 44             command = command.substring(req.getContextPath().length());
 45         }
 46         
 47         //HashMap에서 요청을 처리할 객체 얻어옴
 48         MyService service = hm.get(command);
 49         
 50         //execute() 메소드를 통해 서비스를 수행하고 view(jsp)리턴
 51         //hm.get()에서 command에 해당하는 Service가 없다면 널포인터익셉션이 발생함
 52         String view = service.execute(req, resp);
 53         
 54         //view이름의 jsp파일로 forward하기위함 foward를 하여 request를 그대로 가져간다.
 55         RequestDispatcher dispatcher = req.getRequestDispatcher(view);
 56         // view에 해당하는 페이지를 보여줌
 57         // ex) view="test.jsp"일때 화면에 test.jsp를 띄움
 58         dispatcher.forward(req, resp);
 59     }
 60 }
 
다음 장에서 MyService 인터페이스를 생성하고 그것을 구현한 TestImpl 클래스를 작성함 

JSP/Servlet을 기반으로한 MVC모델의 요청처리 - 1 (개요 및 구현방법)

수업을 들으면서 듣고 까먹는 내용들이 많아 블로그에 남기기로 했다.
개인적으로 기억하고 정리 하기 위한 것이므로 틀린 부분이 있을 수도 있으므로
알려주시면 수정하도록 하겠습니다.

개발환경
운영체제 : Linux Mint 13 Maya
개발툴 : Eclipse EE Kepler
JDK버전 : jdk 1.7.0_25
서버 : apache tomcat 7.0
 
구현 내용
서버로 /ExWebProject/test.MyServlet 요청이 들어오면 서블릿에서 test.MyServlet요청을 처리할 객체를 가져오고 작업을 수행하고 view를 리턴하면 view에서 작업한 내용을 출력
Servlet은 Controller의 역할을 하고 JSP는 View의 역할을 한다.

구현 순서

1. Dynamic webproject생성
ExWebProject라는 이름으로 생성

2. 서블릿 클래스 생성
HttpServlet 상속
init() 메소드와 doPost() doGet() 메소드 구현
init() 메소드에는 초기화 작업할 내용을 구현한다. (서블릿 설정 내용을 읽어서 적용한다던가..여기서는 HashMap에 요청을 처리할 클래스(MyService 구현) 객체를 생성하여 넣는 작업을 할 것이다.)
doGet()은 Get방식의 요청이 들어왔을 경우 처리 할 내용
doPost()는 Post방식의 요청이 들어왔을 경우 처리 할 내용

여기서는 Get방식 Post방식을 구분하지않고  doJob()메소드를 생성하여 각 방식에서 doJob()메소드 호출을 해주는 식으로 구현하겠다. doJob()에서는 들어온 요청을 구분하고 HashMap에서 요청과 일치하는 객체를 가져온다. 그 후 요청을 수행하고 View(jsp)를 리턴하면 Servlet에서 RequestDispatcher를 이용하여 forward한다.

3. Service구현
실제로 요청을 처리할 Service구현
여기서는 임의의 MyService 인터페이스를 만들고 이 인터페이스를 구현할 것이다.
처리내용은 HttpServletRequest객체에 값을 심고 View를 리턴

4. web.xml, server.xml설정
생성한 서블릿 클래스와 리퀘스트를 매핑
server.xml에 프로젝트 등록
수동으로 설정하기 위해서는 <Host></Host>사이에 <Context>앨리먼트를 사용하여 프로젝트 등록
프로젝트 오른쪽 클릭 -> Run As -> Run on Server를 클릭하면 프로젝트가 자동으로 server.xml에 등록된다.

5. View로 사용할 jsp 파일 작성
request에 있는 값을 출력

Linux에서 환경변수 설정하기

Linux에서 jdk 같은 것을 설치하고 나면 환경 변수를 설정해 주어야 작동이 가능하다.


# vi /etc/profile

/etc/profile
...
...
export 환경변수명=값

ex) JAVA 환경변수를 설정할때

/etc/profile

1 export JAVA_HOME=/usr/local/java
2 export PATH=$JAVA_HOME/bin:$PATH
3 export CLASS_PATH=$JAVA_HOME/lib:$CLASS_PATH
*숫자는 라인을 의미함

export는 자식프로세스까지 환경 변수를 전달하기 위함
Linux에서는 각 PATH를 :(콜론)으로 구분한다. 윈도우에서는 ;(세미콜론)으로 구분
$(변수명) 의 의미는 변수를 참조 하겠다는 뜻이다.
따라서 $JAVA_HOME은 변수 JAVA_HOME의 /usr/local/java의 값을 사용하겠다는 뜻

2번 라인을 풀어 쓰면 기존의 PATH 값의 앞에 /usr/local/java 값을 추가 하겠다는 뜻이다.

사용자에 따른 환경 변수를 설정하고 싶을 경우에는 사용자 홈 디렉토리에 있는 .profile을 수정

$ ~/.profile

~/.profile
...
...
export 환경변수명=값