breadfish-20111129-1

Download Report

Transcript breadfish-20111129-1

1
1
1
1
1
1
Struts Tutorial
구
성
모
Presenter
ㅎㅇㅎㅇ
 http://sparcs.org/~breadfish/Struts_tutorial.ppt
Web Application Server
HTML
웹 서버
(Apache, IIS,
…)
JS
JPG
.
.
.
Web Application Server
HTML
웹 서버
(Apache, IIS,
…)
JS
CGI
.
.
.
DB
Web Application Server
HTML
웹 어플리케이션
서버(WAS)
JS
웹 서버
컨테이너
Class
.
.
.
DB
Web Application Server
 웹서버 기능
 Servlet/JSP 컨테이너 기능
 EJB 컨테이너 기능
 트랜잭션 서버
 보안 서버
 네이밍 서버
 JDBC 지원
 톰캣, RESIN, 웹로직, 웹투비
Why JSP?
 실무
 .php
.jsp
.asp
.do
.action
개발환경구축
 톰캣을 설치할 디렉토리 만들기
 mkdir struts_tutorial
 톰캣7 다운로드
 http://mirror.apache-kr.org/tomcat/tomcat7/v7.0.22/bin/apache-tomcat-7.0.22.tar.gz
 tar -xvf
개발환경구축
 cd apache-tomcat-7.0.22/bin
 ./catalina.sh start
 ./catalina.sh stop
 vi ../conf/server.xml
 <Server port=“8005”
• 8005 -> 8041
 <Connector port=“8080”
• 8080 -> 8042
 <Connector port=“8009”
• 8009 -> 8043
개발환경구축
 netstat –antp
 kill xxxx
 http://bit.sparcs.org:8042
JSP
 cd ../webapps/ROOT
 mv index.jsp _index.jsp
 vi index.jsp
index.jsp
<html>
<head>
</head>
<body>
Hello, World!
</body>
<html>
index.jsp
<html>
<head>
</head>
<body>
<% out.println(new java.util.Date()); %>
</body>
<html>
JSP
 Java Server Page
 스크립트언어
Context
Servlet
 cd WEB-INF
 mkdir classes
 cd classes
 vi hello.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.annotation.WebServlet;
@WebServlet(urlPatterns={"/hello"})
public class hello extends HttpServlet{
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html>");
out.println("<head>");
out.println("</head>");
out.println("<body>");
out.println("Hello, World!");
out.println("</body>");
out.println("</html>");
out.close();
}
}
Servlet
 javac –d . hello.java
 vi ~/.bash_profile
 CLASSPATH=$CLASSPATH:.:/home/breadfish/str
uts_tutorial/apache-tomcat-7.0.22/lib/*
 export CLASSPATH
 source ~/.bash_profile
 vi ../web.xml
 metadata-complete=“true”
• true -> false
 restart
 http://bit.sparcs.org:8042/hello
Web Application Server
HTML
웹 어플리케이션
서버(WAS)
JS
웹 서버
컨테이너
Class
.
.
.
DB
Web Application Server
WAS
JVM
웹 서버
서블릿
컨테이너
스레드
서블릿
객체
JSP to Servlet
 vi ~/struts_tutorial/apache-tomcat7.0.22/work/Catalina/localhost/_/org/a
pache/jsp/index_jsp.java
1
1
1
1
1
5
구
Struts Tutorial 2
성
모
What we are done
 WAS
 Container
 Tomcat
 JSP
 Servlet
 Context
Context
Tomcat
 bin
 lib
 conf
 logs
 catalina…
 host-manager…
 localhost…
 temp
 work
 webapps
 ROOT
 examples
Create new context
 cd struts_tutorial
 mkdir proj1
 cd proj1
 mkdir WEB-INF
 mkdir WEB-INF/classes
 mkdir WEB-INF/lib
Create new context
 vi tomcat_dir/conf/server.xml
 Just before </Host>
<Context path=“proj1”
reloadable=“true”
docBase=“/home/breadfish/struts_tutorial/proj1”
workDir=“/home/breadfish/struts_tutorial/proj1/work”>
</Context>
 vi hello.jsp
 Hello
 tomcat restart
 http://bit.sparcs.org:8042/proj1/hello.jsp
Struts2
 Web Framework
 MVC architecture
 POJO
 action
 form
 Zero configuration
 Interceptor
 Tag
 Ajax
 Plug-in
Struts2 install
 cd ~/struts_tutorial
 http://apache.mirror.cdnetworks.com//s
truts/binaries/struts-2.2.3.1-all.zip
 unzip
 cd struts-2.2.3/lib
 copy all jars to [docBase]/WEB-INF/lib
Struts2 Install
 commons-fileupload-1.2.2.jar
 commons-logging-api-1.1.jar
 struts2-convention-plugin-2.2.3.jar
 commons-lang-2.4.jar
 ognl-3.0.1.jar
 struts2-dojo-plugin-2.2.3.jar
 commons-logging-1.1.1.jar
 struts2-config-browser-plugin-2.2.3.jar
 asm
 freemaker
 xwork
 struts2-core
Struts2 intall
 cd [docBase]/WEB-INF/classes
 vi StrutsFilter.java
import javax.servlet.Filter;
import javax.servlet.annotation.*;
import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
@WebFilter(displayName="Struts2", urlPatterns="/*", filterName="struts2",
initParams={@WebInitParam(name="actionPackages", value="")})
public class StrutsFilter extends StrutsPrepareAndExecuteFilter implements Filter{
private static final long serialVersionUID = 1L;
}
 javac –d . StrutsFilter.java
 /[ContextPath]/ 하위로 들어오는 모든 url은
필터디스패처로 들어간다
필터 디스패처
 스트러츠2의 컨트롤러
 액션을 실행하기 위한 환경을 구축
 사용자에게 보낼 응답을 처리
Struts2 Hello, World
 vi HelloWorldAction.java
package com.proj1.action
import org.apache.struts2.convention.annotation.*;
public class HelloWorldAction{
@Action(value="/hello", results={
@Result(name="success", location="/HelloWorld.jsp")})
public String execute(){
return "success";
}
}
 javac –d . HelloWorldAction.java
 tomcat restart
 http://bit.sparcs.org:8042/proj1/hello.action
 vi ../../HelloWorld.jsp
 Hello, World!
Struts2 Annotation
 패키지 경로에 action이 들어갈것. struts나
struts2도 된다.
 Action annotation을 액션 메소드에 붙여주자.
 Action annotation을 사용하지 않고 class에
Result annotation을 붙여서 액션을 매핑할 수도
있다.
 클래스명은 Action으로 끝나야한다.
1
1
1
1
2
2
구
Struts Tutorial 3
성
모
Struts2 config browser
 http://bit.sparcs.org:8042/proj1/configbrowser/index
 현재 매핑되어진 모든 액션과 URL을 확인
Print variable
 cd [docBase]/WEB-INF/classes
 vi HelloWorldAction.java
package com.proj1.action;
import org.apache.struts2.convention.annotation.*;
@Namespace("/board")
public class HelloWorldAction{
private String message;
@Action(value="hello", results={
@Result(name="success", location="/HelloWorld.jsp")})
public String execute(){
message = "I'm breadfish";
return "success";
}
public String getMessage(){
return message;
}
public void setMessage(String message){
this.message = message;
}
}
Print variable
 vi ../../HelloWorld.jsp
Hello, World!
<p>
${message}
 http://bit.sparcs.org:8042/proj1/board/hello
JSP TAG
종류
사용용도
형식
지시자(Directive)
JSP 페이지의 속성 지정
주석(Comment)
JSP 페이지에 설명을 넣음
<%--
선언(declaration)
변수와 메소드 선언
<%!
표현식(expression)
계산식이나 함수를 호출한 결과를 문
자열 형태로 출력
<%=
--%>
%>
%>
스크립트릿(scriptlet) 자바 코드 기술
<%
액션 태그
<jsp:action>
</jsp:action>
자바 빈이나 애플릿 서버 모듈과 연결
%>
Directive
종류
사용용도
page
해당 JSP 페이지의 속성을 지정
include
현재 페이지에 다른 파일의 내용을 삽입할 때 사용
taglib
태그 라이브러리에서 태그를 꺼내와 사용할 수 있는 기능 제공
<%@ page import=“java.util.Date” %>
<%@ page contentType=“text/html; charset=utf-8” %>
<%@ include file=“board01.jsp” %>
 vi ../../HelloWorld.jsp
<%@ page contentType=“text/html; charset=utf-8” %>
<%@ taglib prefix=“s” uri=“/struts-tags” %>
Hello, World!
<p>
${message}
<p>
<s:property value=“message”></s:property>
print array
 HelloWorldAction.java
package com.proj1.action;
import org.apache.struts2.convention.annotation.*;
import java.util.List;
import java.util.ArrayList;
@Namespace("/board")
public class HelloWorldAction{
private String message;
private List<String> messages;
@Action(value="hello", results={
@Result(name="success", location="/HelloWorld.jsp")})
public String execute(){
message = "I'm breadfish";
public String getMessage(){
messages = new ArrayList<String>();
return message;
for(int i=0 ; i<10 ; i++){
}
messages.add("breadfish" + i);
public void setMessage(String message){
}
this.message = message;
return "success";
}
}
public List<String> getMessages(){
return messages;
}
public void setMessages(List<String> messages){
this.messages = messages;
}
}
print array
 HelloWorld.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
Hello, World!
<p>
${message}
<p>
<s:property value="message"></s:property>
<s:iterator value="messages">
<p>
<s:property></s:property>
</s:iterator>
1
1
1
1
2
9
구
Struts Tutorial 4
성
모
RESULT
…
@Action(value="hello", results={
@Result(name="success", location="/HelloWorld.jsp"),
@Result(name=“error", type=“dispatcher”, location="/error.jsp")})
public String execute(){
…
리절트 타입
설명
Chain
액션 체인을 위하여 사용된다.
Dispatcher
JSP를 포함안 웹 리소스 연동을 위하여 사용된다.
FreeMarker
프리마커 연동을 위하여 사용된다.
HttpHeader
특수한 HTTP 작동을 조절하기 위해서 사용
Redirect
다른 URL로 리다이렉트하기 위해 사용
Stream
브라우저에게 inputStream을 스트리밍 하기 위해 사용
PlainText
특수한 페이지(jsp, html 등)의 컨텐츠 원본을 디스플레이
…
…
form input
 HelloWorldAction.java
package com.proj1.action;
import org.apache.struts2.convention.annotation.*;
import java.util.List;
import java.util.ArrayList;
@Namespace("/board")
public class HelloWorldAction{
private String message;
private List<String> messages;
@Action(value="hello", results={
@Result(name="success", location="/HelloWorld.jsp")})
public String execute(){
message = "I'm breadfish";
messages = new ArrayList<String>();
for(int i=0 ; i<10 ; i++){
messages.add("breadfish" + i);
}
return "success";
}
…
 compile
 http://bit.sparcs.org:8042/proj1/board/hello?message=su
ckstruts
struts-tags : form tag example
HelloWorld.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<html>
<head>
<sx:head/>
</head>
<body>
<form action="" method="GET">
<sx:datetimepicker name="sdate"/>
<input type="submit"/>
</form>
${sdate}
</body>
</html>
HelloWorldAction.java
package com.proj1.action;
import org.apache.struts2.convention.annotation.*;
import java.util.List;
import java.util.ArrayList;
import java.util.Date;
@Namespace("/board")
public class HelloWorldAction{
private Date sdate;
@Action(value="hello", results={
@Result(name="success", location="/HelloWorld.jsp")})
public String execute(){
return "success";
}
public Date getSdate(){
return sdate;
}
public void setSdate(Date sdate){
this.sdate = sdate;
}
}
struts-tags : control tag example
HelloWorld.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ taglib prefix="sx" uri="/struts-dojo-tags" %>
<html>
<head>
<sx:head/>
</head>
<body>
<s:if test="%{message=='show'}">
<sx:textarea></sx:textarea>
</s:if>
<s:else>
Message : ${message}
</s:else>
</body>
</html>
Tags
Control Tags
•if
•elseif
•else
•append
•generator
•iterator
•merge
•sort
•subset
Data Tags
•a
•action
•bean
•date
•debug
•i18n
•include
•param
•property
•push
•set
•text
•url
Tags
Form Tags
•checkbox
•checkboxlist
•combobox
•doubleselect
•head
•file
•form
•hidden
•inputtransferselect
•label
•optiontransferselect
•optgroup
•password
•radio
•reset
•select
•submit
•textarea
•textfield
•token
•updownselect
Ajax Tags
•a
•autocompleter
•bind
•datetimepicker
•div
•head
•submit
•tabbedPanel
•textarea
•tree
•treenode
More - JSP
 Script
 Action Tag
 Cookie
 Session
 request, response
 Exception handler
 Bean
 OGNL
 FILE
More - Struts
 Interceptor
 Action mapper
 Annotation
 Ajax
 Logging
More
 Model
 DAO, VO
 Template
 FreeMaker
 SiteMesh
 Tiles
 ORM
 mybatis
 hibernate
References
 스트럿츠2 프로그래밍, 현철주 외 3명, 에이콘
 초보 개발자를 위한 서블릿 JSP 프로그래밍, 성윤광
외 3명, 대림
 http://struts.apache.org/2.x
Thanks
 Q&A