Struts 2 독학 의 길: 3.2 명칭 공간 (namespace) 상세 설명

내용 소개:
이 글 은 인 스 턴 스 를 통 해 struts. xml 파일 의 package 요소 에서 namespace 속성 을 자세히 소개 합 니 다.
         
앞에서 한 말:
namespace 의 역할 은 해당 package 에서 action 의 url 주 소 를 제어 하 는 것 입 니 다. url 주 소 는 웹 프로 그래 밍 에서 기본 적 인 기초 입 니 다.
우리 프로그램의 서로 다른 기능 은 실제 적 으로 해당 url 주소 에 대한 접근 을 촉발 하 는 것 입 니 다. 이것 은 확실히 파악 해 야 합 니 다. 자바 의 classpath 와 같 습 니 다.
주의사항:
나 는 tomcat 포트 를 수 정 했 기 때문에 너희들 이 본 것 이다.http://127.0.0.1:8888/8888, 당신 의 tomcat 포트 를 기준 으로 합 니 다.
xml 파일 을 수 정 했 습 니 다. tomcat 를 다시 시작 하거나 재 열 배 치 를 해 야 합 니 다.
제1 부분
우선 나 는 이 기 초 를 쓸데없는 소리 로 말 하 는 것 이 좋 겠 다. 이런 것들 은 네가 앞의 이 부분 을 뛰 어 넘 을 수 있다 는 것 을 잘 알 고 있다.
먼저 상대 적 인 경로 의 서로 다른 쓰기 방법 이 tomcat 에서 의 운행 상황 을 살 펴 보 겠 습 니 다. 여기 서 우 리 는 폼 의 action 을 사용 하여 소개 합 니 다.
마지막 프로젝트 를 열 고 WebRoot 폴 더 아래 에 디 렉 터 리 namespace 를 새로 만 든 다음 JSp 파일 testurl. jsp 를 새로 만 듭 니 다.
여기
그 코드 는 아래 와 같다.

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!--   struts          -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<title>testurl</title>
	</head>
	<body>
		  struts   action html   action         <br>
		struts   action  "/"        ,       <br>		
		    test.jsp,     404  ,   ,        url  ,              
		<br>
		<br>
		<table border="1">
			<tr>
				<th>
					  html    test.jsp
				</th>
				<th>
					  struts      test.jsp
				</th>
			</tr>
			<tr>
				<td>
					action="test.jsp"
					<form action="test.jsp" method="post">
						<input type="submit" value="html    test.jsp" />
					</form>
				</td>
				<td>
					action="test.jsp"
					<s:form action="test.jsp">
						<s:submit value="struts      test.jsp" />
					</s:form>
				</td>
			<tr>
			<tr>
				<td>
					action="/test.jsp"
					<form action="/test.jsp" method="post">
						<input type="submit" value="html    test.jsp" />
					</form>
				</td>
				<td>
					action="/test.jsp"
					<s:form action="/test.jsp">
						<s:submit value="struts      test.jsp" />
					</s:form>
				</td>
			<tr>
			<tr>
				<td>
					action="./test.jsp"
					<form action="./test.jsp" method="post">
						<input type="submit" value="html    test.jsp" />
					</form>
				</td>
				<td>
					action="./test.jsp"
					<s:form action="./test.jsp">
						<s:submit value="struts      test.jsp" />
					</s:form>
				</td>
			<tr>
			<tr>
				<td>
					action="../test.jsp"
					<form action="../test.jsp" method="post">
						<input type="submit" value="html    test.jsp" />
					</form>
				</td>
				<td>
					action="../test.jsp"
					<s:form action="../test.jsp">
						<s:submit value="struts      test.jsp" />
					</s:form>
				</td>
			<tr>
			<tr>
				<td>
					action="/Struts2Study/namespace/test.jsp"
					<form action="/Struts2Study/namespace/test.jsp" method="post">
						<input type="submit" value="html    test.jsp" />
					</form>
				</td>
				<td>
					action="/namespace/test.jsp"
					<s:form action="/namespace/test.jsp">
						<s:submit value="struts      test.jsp" />
					</s:form>
				</td>
			<tr>
		</table>
	</body>
</html>

위의 예 를 실행 하면 결 과 를 볼 수 있 습 니 다. 실행 결 과 를 통 해 알 수 있 듯 이 struts 의 form 태그 의 action 은 최적화 되 었 습 니 다.
html 폼 의 action = "/ url" (/ 로 시작 하 는 url 주소) 일 때http://127.0.0.1:8080이 뿌리 가 추가 되 기 시 작 했 습 니 다. 우 리 는 구체 적 인 정 보 를 방문 하려 면 반드시 추가 해 야 합 니 다.
프로젝트 의 컨 텍스트 (context) 는 tomcat 설치 디 렉 터 리 아래 wepapps / context (구체 적 으로 프로젝트 이름) 라 는 폴 더 이름 입 니 다. 이렇게

struts 의 form 태그 의 action = "/ url" (/ 로 시작 하 는 url 주소) 은 struts 2 가 우 리 를 최적화 시 켜 주 었 습 니 다. 그 는 자동 으로 우 리 를 위해htpp://127.0.0.1:8080/더 하 다
프로젝트 의 컨 텍스트 에 action 후의 url 을 추가 합 니 다. 이것 도 우리 가 개발 할 때 원 하 는 본의 입 니 다. 이렇게 < s: form action = "/ namespace / test. jsp" >
나머지 는 다 똑 같 아 요.
action = "url" 과 action = ". / url" 은 현재 경 로 를 표시 합 니 다.
action = ".. /" 상위 경로 표시
위의 폼 은 실제 하이퍼링크 로 사 용 됩 니 다 (폼 매개 변수 없 이 점프 만 합 니 다). 하이퍼링크 의 실제 접근 효과 와 폼 은 같은 action = "test. jsp" 와 같 습 니 다.
< a href = "test. jsp" > 는 모두 test. jsp 에 접근 합 니 다. 폼 만 사용자 가 데 이 터 를 입력 할 수 있 고 하이퍼링크 는 할 수 없습니다.
제2 부분
다음은 본론 으로 들 어가 야 합 니 다. 프로젝트 이전에 루트 디 렉 터 리 에 있 었 던 index. jsp, error. jsp 와 welcome. jsp 를 namespace 폴 더 에 복사 한 다음 코드 를 수정 하 십시오.
두 개의 jsp 파일 을 새로 만 듭 니 다. 각각 error 1. jsp, welcome 1. jsp 입 니 다. 이 두 개 는 error. jsp 와 welcome. jsp 와 마찬가지 로 텍스트 만 확인 하면 ok 입 니 다.
index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<!--    struts         -->
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>    
    <title>   Struts  </title>
  </head>  
  <body>
  	<center>
	action="NameSpace.action"
	<form action="NameSpace.action" method="post">
    	<table align="center">
    	<caption><h3>    </h3></caption>
    		<tr>
    			<td>   :<input type="text" name="username"/></td>
    		</tr>
    		<tr>
    			<td>    :<input type="text" name="password"/></td>
    		</tr>
    		<tr align="center">
    			<td colspan="2"><input type="submit" value="  "/>
    			<input type="reset" value="  "/></td>
    		</tr>
    	</table>
    </form>
    action="/Struts2Study/namespace/NameSpace.action"
	<form action="/Struts2Study/namespace/NameSpace.action" method="post">
    	<table align="center">
    	<caption><h3>    </h3></caption>
    		<tr>
    			<td>   :<input type="text" name="username"/></td>
    		</tr>
    		<tr>
    			<td>    :<input type="text" name="password"/></td>
    		</tr>
    		<tr align="center">
    			<td colspan="2"><input type="submit" value="  "/>
    			<input type="reset" value="  "/></td>
    		</tr>
    	</table>
    </form>
    action="/Struts2Study/NameSpace.action"
	<form action="/Struts2Study/NameSpace.action" method="post">
    	<table align="center">
    	<caption><h3>    </h3></caption>
    		<tr>
    			<td>   :<input type="text" name="username"/></td>
    		</tr>
    		<tr>
    			<td>    :<input type="text" name="password"/></td>
    		</tr>
    		<tr align="center">
    			<td colspan="2"><input type="submit" value="  "/>
    			<input type="reset" value="  "/></td>
    		</tr>
    	</table>
    </form>
    <br>
    <h5>     struts form  </h5>
    <br>
    action="NameSpace"
   	<s:form action="NameSpace">
		<s:textfield name="username" label="   "/>
		<s:textfield name="password" label="    "/>
		<s:submit value="  "/>
	</s:form>
	action="/namespace/NameSpace.action"
   	<s:form action="/namespace/NameSpace.action">
		<s:textfield name="username" label="   "/>
		<s:textfield name="password" label="    "/>
		<s:submit value="  "/>
	</s:form>
	action="/NameSpace.action"
   	<s:form action="/NameSpace.action">
		<s:textfield name="username" label="   "/>
		<s:textfield name="password" label="    "/>
		<s:submit value="  "/>
	</s:form>
	</center>
  </body>
</html>

error. jsp, welcome. jsp, error 1. jsp 및 welcome 1. jsp 의 body 부분 을 확인 하 겠 습 니 다.

<!-- error.jsp -->
<body>
        ,       ,        
    namespace/error.jsp
</body>

<!-- error1.jsp -->
<body>
  	who are you? i don't know you,i'll call my dog if you won't go<br>
  	namespace/error1.jsp	
</body>

<!-- welcome.jsp -->
<body>
          ,      <br>
    namespace/welcome.jsp
</body>

<!-- welcome1.jsp -->
<body>
  	hi,darlin,i wait for you for a long time<br>
  	namespace/welcome1.jsp    
</body>

다음은 새 패키지 yufei. namespace 에서 Hello Action. java 를 복사 합 니 다. 코드 를 수정 하지 않 아 도 됩 니 다.
HelloAction.java

package yufei.namespace;

public class HelloAction
	{
	private String username;
	private String password;
	public String getPassword()
		{
		return password;
		}
	public void setPassword(String password)
		{
		this.password = password;
		}
	public String getUsername()
		{
		return username;
		}
	public void setUsername(String username)
		{
		this.username = username;
		}
	public String execute()
		{
		String strReturn = "error";
		if (username.equals("yufei"))
			strReturn = "success";
		return strReturn;
		}
	}

이 어 yufei. namespace 패키지 에 xml 파일 namespace. xml 을 새로 만 들 고 struts. xml 파일 에 다음 내용 을 추가 합 니 다.

<!--          -->
<include file="yufei/namespace/namespace.xml"/>

namespace. xml 의 코드 는 다음 과 같 습 니 다. 이 앞의 글 들 은 모두 말 했 습 니 다. 여 기 는 더 이상 말 하지 않 겠 습 니 다.

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<package name="yufei.namespace" extends="struts-default">
		<action name="NameSpace" class="yufei.namespace.HelloAction">
			<result name="success">/namespace/welcome.jsp</result>
			<result name="error">/namespace/error.jsp</result>
		</action>
	</package>
</struts>

그 다음 에 우 리 는 tomcat 를 시작 하여 프로그램 을 테스트 합 니 다. jsp 에 있 는 폼 action 이 많 으 면 말 하지 않 겠 습 니 다. 첫 번 째 부분 에 서 는 이미 쓸데없는 말 을 많이 했 습 니 다. 여기 작은 지식 이 있 습 니 다.
struts 의 form 탭 을 사용 할 때 현재 경로 라면. action, 즉 / 또는. / 또는... / 로 시작 하 는 것 이 아니 라 index. jsp 코드 를 볼 수 있 습 니 다.
그러나 나 는 모든 곳 에 써 서 더욱 통일 되 어 보인다 는 것 을 알 면 된다. 주소 에 입력 을 막 으 면 된다.http://127.0.0.1:8888/Struts2Study/namespace/index.jsp
각 양식 을 각각 한 번 씩 제출 합 니 다. 우 리 는 url 주 소 를 관찰 하면 두 가지 주소 가 있 습 니 다. 각각
http://127.0.0.1:8888/Struts2Study/namespace/NameSpace.action
http://127.0.0.1:8888/Struts2Study/NameSpace.action
그리고 모두 정상적으로 실 행 될 수 있 습 니 다. 여 기 는 설명 하 느 라 바 쁘 지 않 습 니 다. 저 희 는 namespace. xml 에 대해 작은 손 과 발 로 계속 관찰 하고 package 요소 에 namespace 속성 을 추가 합 니 다.
그 값 을 namespace = "namespace" 로 설정 합 니 다.

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<!--    namespace -->
	<package name="yufei.namespace" extends="struts-default" namespace="/namespace">
		<action name="NameSpace" class="yufei.namespace.HelloAction">
			<result name="success">/namespace/welcome.jsp</result>
			<result name="error">/namespace/error.jsp</result>
		</action>
	</package>
</struts>

tomcat (또는 재 열 배치) 를 다시 시작 한 다음 namespace 의 index. jsp 를 엽 니 다. 이제 폼 을 제출 해 보 겠 습 니 다.
지금 이상 한 상황 이 발생 했 습 니 다.http://127.0.0.1:8888/Struts2Study/NameSpace.action이상 이 생기다
저희 가 제출 했 습 니 다.http://127.0.0.1:8888/Struts2Study/namespace/NameSpace.action정상적으로 수행 할 수 있 습 니 다.
이 namespace 속성 설정 때 문 입 니 다.
struts 2 의 기본 절 차 를 돌 이 켜 보 겠 습 니 다. 고객 이 요청 한 후에 struts 2 의 FilterDispatcher 필 터 를 터치 합 니 다. (기본 설정 은 모든 요청 이 실 행 됩 니 다)
요청 이. action 으로 끝나 면 FilterDispatcher 는 struts. xml 에서 action 요소 의 name 속성 설정 을 찾 아 일치 하 는 것 을 찾 아 class 를 실행 합 니 다.
속성 지정 클래스
struts 2 기본 프로 세 스에 서 이렇게 설명 되 었 습 니 다. 지금 보충 하 자 면 name 속성 뿐만 아니 라 package 의 namespace 속성 도 일치 합 니 다.
지금 저 는 struts 2 가 어떻게 일치 하 는 action 을 찾 았 는 지 말씀 드 리 겠 습 니 다. 이것 은 제 이해 입 니 다. 참고 자료 가 없습니다. 만약 에 타당 하지 않 은 점 이 있 으 면 메 일 로 알려 주 십시오 ([email protected])
오늘 이 index. jsp 에서 action = NameSpace. action 을 예 로 들 어 설명 합 니 다. 이 폼 을 제출 할 때 다음 url 자원 을 요청 합 니 다.
http://127.0.0.1:8888/Struts2Study/namespace/NameSpace.action
이 때 filter dispatcher 가 실 행 된 다음 요청 url 이. action 으로 끝 난 것 을 발견 하고 설정 파일 에서 찾 습 니 다. 일치 하 는 방식 은?
장차http://127.0.0.1:8888/Struts2Study자원 의 루트 경 로 를 제거 하 라 고 요청 한 다음 마지막. action 을 제거 하고 중간 부분 을 남 깁 니 다. (여기 가 바로...
/ namespace / name Space) 그리고 나머지 부분 을 두 부분 으로 나 누 었 습 니 다. 즉, 마지막 / 이전 부분 과 마지막 / 이후 부분 으로 나 누 었 습 니 다. 분해 한 후에 바로 이 렇 습 니 다.
/ namesapce (마지막 / 이전, 마지막 / 포함 되 지 않 음) 와 Namespace (마지막 / 이후, 마지막 / 포함 되 지 않 음) 를 꺼 내 서 분 해 된 첫 번 째 부분 을 꺼 냅 니 다.
패키지 요소 의 namespace 와 비교 하여 같은 것 을 찾 으 면 이 패키지 요소 에서 하위 action 요소 의 name 속성 과 분 해 된 두 번 째 부분 을 찾 습 니 다.
같은 클래스 속성 에 대응 하 는 클래스 를 실행 합 니 다. 찾 을 수 없 으 면 기본 namespace 에서 찾 습 니 다. 기본 namespace 는 "", namespace = ", namespace =" / "와 namespace 공백 은 같은 효과 입 니 다. 프로젝트 루트 경로 에 action 과 일치 하 는 name 을 대표 합 니 다. 위의 url 예 를 들 어
http://127.0.0.1:8888/Struts2Study/여기 서 NameSpace. action 을 찾 아가 면,
이 부분 / 이전에 내용 이 없 으 면 기본 이름 공간 에서 찾 는 것 을 의미 합 니 다.
메모: namespace 속성의 값 은 "/" 는 루트 공간 을 대표 합 니 다. "기본 공간 을 대표 합 니 다. 기본 적 인 상황 에서 두 가 지 는 대체적으로 비슷 합 니 다. 실행 결 과 를 말 합 니 다.
지정 한 이름 공간 을 찾 은 다음 기본 이름 공간 을 찾기 위해 namespace. xml 설정 파일 을 변경 합 니 다.
패키지 요소 의 namespace 속성 을 제거 합 니 다.

<!--   namespace   -->
<package name="yufei.namespace" extends="struts-default">

이렇게 해서 다시 시작 설정 으로 돌 아 왔 습 니 다. 그리고 우 리 는 실행 합 니 다. 두 가지 url 주소 가 있 지만 두 가지 주소 가 정상적으로 실 행 될 수 있 습 니 다.
http://127.0.0.1:8888/Struts2Study/namespace/NameSpace.action
http://127.0.0.1:8888/Struts2Study/NameSpace.action
두 번 째 상황 은 이해 하기 쉽 습 니 다. 이것 은 바로 위 에서 말 한 / 이전에 내용 이 없 었 다 면 기본 이름 공간 에서 찾 는 것 을 의미 합 니 다.
첫 번 째 상황 은 복잡 해 야 합 니 다. FilterDispatcher 에 의 해 차단 되면 namespace = "/ namespace" 에서 찾 습 니 다.
"찾 지 못 했 습 니 다. 그리고 namespace =" 찾 아 보 세 요. 찾 았 습 니 다. 그래서 실 행 했 습 니 다.
다음은 설정 파일 의 namespace 를 namespace = "namespace" 로 바 꿉 니 다.
프로필 수정 후http://127.0.0.1:8888/Struts2Study/NameSpace.action이상 을 알 릴 수 있다
이 유 는 / 이전 에는 내용 이 없 었 기 때문에 기본 이름 공간 에서 찾 는 것 을 의미 합 니 다. 설정 파일 에 기본 공간 이 있 는 package 가 설정 되 어 있 지 않 아서 찾 을 수 없습니다.
index. jsp 에 폼 을 추가 하여 더 쉽게 볼 수 있 는 주소 로 제출 합 니 다.

	action="/namespace1/NameSpace.action"
   	<s:form action="/namespace1/NameSpace.action">
		<s:textfield name="username" label="   "/>
		<s:textfield name="password" label="    "/>
		<s:submit value="  "/>
	</s:form>
	<!--       -->	

이 양식 은 아래 주소 로 제출 하여 이상 을 보고 하 였 다.
http://127.0.0.1:8888/Struts2Study/namespace1/NameSpace.action
이것 은 FilterDispatcher 에 의 해 차단 되 었 습 니 다. namespace = "/ namespace 1" 에서 찾 았 습 니 다. 찾 지 못 했 습 니 다. 그리고 namespace = "찾 으 러 갑 니 다.
여전히 찾 지 못 했 기 때문에 이상 을 보고 했다.
마지막 으로 같은 이름 의 action 시험 을 통 해 이름 공간의 설명 을 끝 냅 니 다. 서로 다른 이름 의 공간 을 보면 같은 이름 의 action 은 사용 할 수 있 습 니 다.
namespace. xml 을 다음 과 같이 수정 합 니 다.

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC 
	"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
	"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<!--    namespace -->
	<package name="yufei.namespace" extends="struts-default" namespace="/namespace">
		<action name="NameSpace" class="yufei.namespace.HelloAction">
			<result name="success">/namespace/welcome.jsp</result>
			<result name="error">/namespace/error.jsp</result>
		</action>
	</package>
	<!-- package name        -->
	<package name="yufei.namespace1" extends="struts-default" namespace="/namespace1">
		<action name="NameSpace" class="yufei.namespace.HelloAction">
			<!--          ,                  -->
			<result name="success">/namespace/welcome1.jsp</result>
			<result name="error">/namespace/error1.jsp</result>
		</action>
	</package>
</struts>

지금 우 리 는 index. jsp 에 들 어가 서 우리 가 방금 마지막 에 가입 한 양식 을 제출 합 니 다. 지금 우 리 는 귀 찮 은 새 문 을 보 았 습 니까? ^ ^
항목 파일 이 첨부 파일 에 있 습 니 다.

좋은 웹페이지 즐겨찾기