Struts meets Swing 1 (번역)
http://javaboutique.internet.com/tutorials/Swing/index.html
1. 프로필:
Jakarta Struts 는 MVC 모드 를 기반 으로 servlet 프로그램 을 만 드 는 프레임 워 크 입 니 다.대부분의 Struts 응용 프로그램 은 브 라 우 저 를 클 라 이언 트 로 사용 합 니 다. 실제로 Struts 는 다른 클 라 이언 트 모드 를 사용 할 수 있 습 니 다.여기 서 저 는 'Coding your second Jakarta Struts Application' 이라는 글 에서 브 라 우 저 애플 리 케 이 션 인 스 턴 스 를 Swing 클 라 이언 트 모드 로 바 꿀 것 입 니 다. 코드 를 조금 만 수정 하면 됩 니 다.
이 글 은 이미 존재 하 는 Servlet 응용 프로그램 에 Swing 클 라 이언 트 를 사용 하 는 방법 을 소개 한다.자바 애플 리 케 이 션 을 개발 하려 면 브 라 우 저 를 사용 하여 클 라 이언 트 를 만 들 수도 있 고 스윙 으로 클 라 이언 트 를 만 들 수도 있 습 니 다. EJB 나 웹 서 비 스 는 간단 한 인 터 페 이 스 를 제공 합 니 다.
2. Struts 구조
우리 가 시작 하기 전에 브 라 우 저가 Struts 와 어떻게 통신 하 는 지 먼저 봅 시다.이것 은 우리 의 스윙 응용 프로그램 에 나타 날 것 이다.
*Struts 응용 프로그램 은 servlet 에서 GET 나 POST 요청 을 받 아들 여 시작 합 니 다.
*servlet 은 URL 에서 정 보 를 얻 을 수 있 는 "action" 을 호출 할 지 결정 합 니 다.
*Action 을 실현 한 자바 류 는 struts - config. xml 에서 설정 되 어 있 습 니 다.
* Struts 의 출력 은 jsp 로 표시 되 며, jsp 의 이름 도 struts - config. xml 파일 에서 지정 되 어 있 습 니 다.
따라서 첫 번 째 비 브 라 우 저 애플 리 케 이 션 은 servlet 에 요청 을 보 내 고 jsp 페이지 에서 응답 할 수 있어 야 합 니 다.
3.The URLConnection class
URLConnection 클래스 를 사용 하면 자바 로 servlet 요청 코드 를 간단하게 작성 할 수 있 습 니 다.이 종 류 는 이상 한 디자인 이 있 기 때문에 매우 재미있다.만약 당신 이 그것 의 실현 을 보고 싶다 면, 나 는 "Dodge the traps hiding in the URLConnection class" 를 읽 어 보 는 것 을 권장 합 니 다.
"list" action 이 있 는 요청 을 보 내 고 인쇄 응답 을 받 으 려 면 코드 를 이렇게 써 야 합 니 다.
URL url = new URL("http://myserver/project/list.do");
URLConnection conn = url.openConnection();
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
일반적으로 요청 과 동시에 데 이 터 를 보 내야 합 니 다. 양식 을 제출 하 는 것 처럼.이 데 이 터 는 응답 을 읽 기 전에 보 내야 합 니 다.
URL url = new URL("http://myserver/project/list.do");
URLConnection conn = url.openConnection();
conn.setDoOutput(true);
conn.setRequestProperty("user-agent","SWING");
BufferedWriter out =
new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
out.write("name1=value1&name2=value2");
out.flush();
out.close();
String c = conn.getHeaderField("Set-Cookie");
BufferedReader in =
new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
System.out.println(line);
}
이 예 는 HTTP 헤더 정 보 를 읽 고 쓰 는 방법 도 보 여 준다.
첫 번 째 예 는 GET 방법 으로 HTTP 와 통신 하고 두 번 째 예 는 POST 방법 으로 통신 한다.servlet 에 데 이 터 를 전송 하려 면 GET 방법 을 사용 할 수 있 지만 URL 에 데 이 터 를 추가 해 야 합 니 다. 이렇게:
URL url = new URL("http://myserver/project/list.do?name1=value1&name2=value2");
4.Identifying the client
이제 우 리 는 데 이 터 를 어떻게 보 내 고 요청 하 는 지 알 게 되 었 지만, 우 리 는 데 이 터 를 어떻게 받 아들 입 니까?응답 이 브 라 우 저 에 있다 면 응답 에는 HTML 이나 자바 스 크 립 트 와 스타일 이 포함 되 어 있 습 니 다.우리 의 스윙 클 라 이언 트 에 대해 우 리 는 데이터 만 필요 합 니 다.이것 은 새로운 문 제 를 가 져 올 것 입 니 다. Struts 응용 프로그램 은 어떻게 클 라 이언 트 가 브 라 우 저 인지, Swing 인지, 아니면 다른 무엇 인지 식별 할 수 있 습 니까?
하나의 해결 방법 은 모든 요청 에 파 라 메 터 를 추가 할 때 어떤 클 라 이언 트 인지 감별 할 수 있 는 것 이다.나 는 두 번 째 예 에서 user - agent 라 는 헤드 정 보 를 사용 하여 스윙 클 라 이언 트 임 을 식별 했다.
Struts 응용 프로그램 이 클 라 이언 트 에 게 데 이 터 를 되 돌려 줄 준비 가 되 어 있 을 때 user - agent 의 값 을 감지 한 다음 클 라 이언 트 에 적합 한 jsp 페이지 를 선택 합 니 다.이것 은 Struts Action 류 가 설정 한 점프 정 보 를 대체 할 것 입 니 다.
String client = (String)request.getHeader("user-agent");
// Forward control to the list page
if (client.equals("SWING"))
return (mapping.findForward("swinglist"));
else return (mapping.findForward("list"));
"list" 와 "swinglist" 는 Struts 설정 파일 에서 정의 합 니 다:
<forward name="list" path="/list.jsp"/>
<forward name="swinglist" path="/swinglist.jsp"/>
list. jsp 는 브 라 우 저 에 표시 되 고 swinglist. jsp 는 Swing 에 표 시 됩 니 다.
swinglist. jsp 를 만 들 기 전에 예 프로그램 을 보고 프로그램 을 바 꾸 면 글 에서 언급 한 방법 을 사용 합 니 다.
The DVD application
이 프로그램 은 xml 파일 에서 DVD 를 관리 합 니 다.모든 DVD 를 목록 으로 표시 하고 자세 한 페이지 에 DVD 를 추가 하거나 수정 하거나 삭제 할 수 있 습 니 다.
그림
DVD 관리 자 는 DVD 정 보 를 JDom 의 트 리 구조 로 저장 합 니 다.DVDManager 는 xml 파일 에서 DVD 정 보 를 읽 고 이 정 보 를 xml 파일 에 저장 할 수 있 습 니 다.xml 형식 은 스윙 프로그램 에 데 이 터 를 되 돌려 주 는 선택 임 이 분명 합 니 다.
Returning XML data to the client
이 는 swinglist. jsp 가 Swing 클 라 이언 트 에 데 이 터 를 되 돌려 주 려 면 DVD 를 xml 로 저장 해 야 한 다 는 뜻 이다.JDom 은 트 리 구 조 를 PRint Writer 로 변환 할 수 있 는 방법 이 있 습 니 다. 이 출력 흐름 을 간단하게 가 져 와 Swing 클 라 이언 트 에 보 내 면 됩 니 다.DVD 관리자 의 첫 번 째 방법 은:
public void outList(PrintWriter out) {
XMLOutputter outputter = new XMLOutputter("",false);
// NB: the outputter does not accept XML headers:
outputter.setOmitDeclaration(true);
try {
outputter.output(doc, out);
} catch (IOException e) {
e.printStackTrace();
}
}
이 방법 은 swinglist. jsp 에서 호출 됩 니 다:
<%@ page language="java" %>
<%@ page import="java.io.*" %>
<jsp:useBean id="dvds"
class="hansen.playground.DVDManager" scope="session"/>
<%
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
dvds.outList(pw);
pw.flush();
out.print(sw.toString());
%>
비슷 한 방법 으로 swingdetail. jsp 페이지 를 만 듭 니 다. 이 페이지 는 하나의 xml 파일 을 되 돌려 줍 니 다. 하나의 DVD 정 보 를 포함 합 니 다.
<%@ page language="java" %>
<%@ page import="java.io.*" %>
<jsp:useBean id="dvds"
class="hansen.playground.DVDManager" scope="session"/>
<%
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
dvds.outListElement(pw);
pw.flush();
out.print(sw.toString());
%>
우 리 는 JDOM 의 XMLoutputter 류 를 사용 하지 않 고 xml 응답 을 직접 수 동 으로 인 코딩 할 수 있 습 니 다.예 를 들 어 DVD 의 이름 만 되 돌려 주 고 싶다 면 이런 jsp 페이지 를 만 들 수 있 습 니 다.
<%@ page language="java" %>
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
<%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>
<jsp:useBean id="dvds"
class="hansen.playground.DVDManager" scope="session"/>
<collection>
<logic:iterate id="dvd" indexId="i" name="dvds" property="dvds">
<%
// Transfer the iteration index to the DVDManager
dvds.setIndex(i.intValue());
%>
<dvd>
<title><bean:write name="dvds" property="title"/></title>
</dvd>
</logic:iterate>
</collection>
이 페이지 가 실행 되면 이러한 출력 이 생 길 것 입 니 다.
<collection>
<dvd>
<title>Amadeus</title>
</dvd>
<dvd>
<title>Lord of the Rings: The Fellowship of the Ring</title>
</dvd>
<dvd>
<title>The Matrix</title>
</dvd>
</collection>
Testing the Swing jsp-pages
오류 페이지 를 제외 하고 DVD 프로그램 은 swinglist. jsp 와 swingdetail. jsp 만 사 용 했 기 때문에 DemoRequest 로 두 jsp 페이지 를 테스트 해 봅 시다.
servlet 에 요청 을 보 내 고 응답 을 System. out 에 출력 할 수 있 는 request 방법 을 포함 합 니 다.요청 한 user - agent 를 'SWING' 으로 설정 하 는 방법 에 주의 하 십시오.만약 우리 가 이렇게 요구한다 면:
DemoRequest dr = new DemoRequest("http://localhost:8080/dvdapp2/list.do");
dr.request();
우 리 는 출력 을 받 았 습 니 다:
<collection>
<dvd id="C">
<title>Amadeus</title>
<length>158</length>
<actor>F. Murray Abraham</actor>
<actor>Tom Hulce</actor>
<actor>Elizabeth Berridge</actor>
</dvd>
<dvd id="A">
<title>Lord of the Rings: The Fellowship of the Ring</title>
<length>178</length>
<actor>Ian Holm</actor>
<actor>Elijah Wood</actor>
<actor>Ian McKellen</actor>
</dvd>
<dvd id="B">
<title>The Matrix</title>
<length>136</length>
<actor>Keanu Reeves</actor>
<actor>Laurence Fishburne</actor>
</dvd>
</collection>
세 번 째 코드 와 비교 하면 그들 이 매우 닮 았 다 는 것 을 알 게 될 것 이다.첫 번 째 DVD 에 대한 자세 한 정 보 를 요청 하 는 요청 을 보 냅 시다.
DemoRequest dr = new DemoRequest("http://localhost:8080/dvdapp2/list.do");
dr.request();
dr = new DemoRequest("http://localhost:8080/dvdapp2/detail.do");
dr.setData("index=0");
dr.request();
결 과 는 우리 가 바 라 는 것 이 아니다.우 리 는 정확 한 DVD 목록 을 얻 었 지만 출력 은 이 렇 습 니 다.
<html>
<head>
<title>System Error</title>
</head>
<body>
<h2>System Error</h2>
No DVD information available
</body>
</html>
이것 은 error. jsp 페이지 에서 되 돌아 온 것 입 니 다. Detail 페이지 를 처리 하 는 Struts Action 류 가 session 범위 내 에서 DVD 목록 정 보 를 찾 지 못 했 음 을 알려 줍 니 다.
Maintaining the Session
이런 잘못 은 네가 몇 시간 을 써 서 확정 해 야 할 지도 모른다.단번에 원인 을 찾 았 거나.여기 가 이유 야.
서비스 가 브 라 우 저 사용자 에 게 서 비 스 를 제공 할 때 저 희 는 session 상태 가 모든 사용자 에 게 쿠키 를 만 들 고 쿠키 를 통 해 사용 자 를 식별 하 는 것 을 잊 어 버 립 니 다.우리 가 처음으로 응용 프로그램 에 방 문 했 을 때 쿠키 는 우리 기계 에 전 송 될 것 이다.우리 가 다음 요청 을 할 때, 우 리 는 쿠키 를 서버 에 돌려 주어 야 한다. 그러면 서버 에서 session 을 식별 할 수 있다. 테스트 프로그램 에서 우 리 는 이것 을 하지 않 았 기 때문에, 지금 우 리 는 코드 를 수정 하여 되 돌아 오 는 쿠키 를 저장 하고, 이후 의 요청 에서 쿠키 를 돌려 보 내야 한다.DemoRequestCookie 라 는 새로운 종 류 를 보 세 요. 여기 보 세 요.
새로운 요청 은 이렇게:
DemoRequestCookie dr =
new DemoRequestCookie("http://localhost:8080/dvdapp2/list.do");
dr.request();
String cookie = dr.getCookie();
dr = new DemoRequestCookie("http://localhost:8080/dvdapp2/detail.do");
dr.setData("index=0");
dr.setCookie(cookie);
dr.request();
이번 수출 은 기대 와 일치한다.
. . . (list of all DVDs) . . .
<dvd id="C">
<title>Amadeus</title>
<length>158</length>
<actor>F. Murray Abraham</actor>
<actor>Tom Hulce</actor>
<actor>Elizabeth Berridge</actor>
</dvd>
Updating the Struts configuration file
struts - config. xml 에 앞의 방법 을 설정 해 야 합 니 다.모든 정의 에는 jsp 파일 이 포함 되 어야 하 며, 이 파일 은 Swing - counterpart 가 필요 합 니 다.프로필 비교 해 봐.
section
name
refers to
global-forwards
error
error.jsp
list
list.jsp
detail
detail.jsp
action-mappings
create
detail.jsp
update
detail.jsp
delete
list.jsp
cancel
list.jsp
우 리 는 새로운 노드 를 추가 합 니 다.
section
name
refers to
global-forwards
swingerror
swingerror.jsp
swinglist
swinglist.jsp
swingdetail
swingdetail.jsp
action-mappings
swingcreate
empty.jsp
swingupdate
empty.jsp
swingdelete
empty.jsp
swingcancel
empty.jsp
보시 다시 피 action mappings 의 empty. jsp 노드 는 다음 과 같은 내용 이 있 습 니 다.
이것 은 단독 xml 요 소 를 포함 하기 때문에 유효한 xml 파일 입 니 다.이상 하 게 도 만 들 고 삭제 하고 지 울 때 어떤 정보 도 되 돌려 주지 않 아 도 되 지만 그 이 유 는 간단 하 다.Swing 클 라 이언 트 는 뚱뚱 한 클 라 이언 트 이 고 브 라 우 저 는 마른 클 라 이언 트 입 니 다.뚱뚱 한 클 라 이언 트 는 현재 DVD 의 데이터 와 가능 한 모든 DVD 의 목록 을 저장 할 수 있 습 니 다.
따라서 뚱뚱 한 클 라 이언 트 는 서버 에서 DVD 목록 을 한 번 만 가 져 오 면 되 고 그 후에 데 이 터 를 로 컬 에 저장 합 니 다.DVD 목록 이 모든 DVD 데 이 터 를 부 르 지 않 으 면 DVD 를 선택 할 때 서버 에서 가 져 옵 니 다.이것 이 바로 swingdetail action 이 swingdetail. jsp 호출 을 중단 한 이유 입 니 다.
지적 할 점 이 있 습 니 다.다음 버 전의 Struts (1.1) 에는 하나의 프로필 만 포 함 됩 니 다.저 에 게 준 초보적인 설명 을 읽 고 Swing actions 는 다른 프로필 에 넣 을 수 있 습 니 다. 이것 은 코드 를 깨끗하게 하 는 해결 방법 일 수도 있 습 니 다.
Coding the Swing client
우 리 는 Swing 클 라 이언 트 의 코드 를 완성 했다.
URLConnection 과 Session cookies 를 통 해 servlet 를 어떻게 호출 하 는 지 알 게 되 었 습 니 다.우 리 는 xml 응답 을 어떻게 포맷 하 는 지 알 게 되 었 다.
다음 글 에서 저 는 Swing 클 라 이언 트 를 만 드 는 방법 을 설명 하고 xml 응답 을 분석 하고 표시 하 며 오 류 를 어떻게 찾 는 지 보 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
최근 문제가 되고 있는 서버 스레드 중단 문제 해결우리의 응용 프로그램은 인터넷 하드디스크와 같은 다운로드 도구로 사이트의 방문량이 비교적 적지만 문제가 우리를 계속 괴롭히고 있다. 바로was 서버가 일정 시간 간격으로 라인을 끊고 시간이 길고 짧으며 5분 안에 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.