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