1. 요청/세션/애플리케이션 속성에 액세스하거나 추가합니다.
공개 문자열 범위()에서 예외 발생{
ActionContext ctx = ActionContext.getContext();
ctx.getApplication().put("app", "Application range");//앱을 ServletContext에 넣습니다.
ctx.getSession().put("ses", "session range");//ses를 세션에 넣습니다.
ctx.put("req", "request range");//req를 요청에 넣습니다.
"범위"를 반환합니다.
}
JSP:
<본문>
${applicationScope.app} <br>
${sessionScope.ses}<br>
${requestScope.req}<br>
</body>
2. HttpServletRequest / HttpSession / ServletContext / HttpServletResponse 객체를 얻습니다.
첫 번째 방법은 ServletActionContext 클래스를 통해 직접 가져오는 것입니다.
공개 문자열 rsa()에서 예외 발생{
HttpServletRequest 요청 = ServletActionContext.getRequest();
ServletContext servletContext = ServletActionContext.getServletContext();
요청.getSession()
HttpServletResponse 응답 = ServletActionContext.getResponse();
"범위"를 반환합니다.
}
두 번째 방법은 지정된 인터페이스를 구현하고 Struts 프레임워크가 실행 중일 때 이를 주입하는 것입니다.
공개 클래스 HelloWorldAction은 ServletRequestAware, ServletResponseAware, ServletContextAware를 구현합니다.
개인 HttpServletRequest 요청;
개인 ServletContext servletContext;
개인 HttpServletResponse 응답;
공공 무효 setServletRequest(HttpServletRequest req) {
this.request=요청;
}
공공 무효 setServletResponse(HttpServletResponse res) {
this.response=res;
}
공공 무효 setServletContext(ServletContext ser) {
this.servletContext=ser;
}
}
3. 파일 업로드
1단계: WEB-INF/lib 아래에 commons-fileupload-1.2.1.jar 및 commons-io-1.3.2.jar를 추가합니다. 두 파일 모두 http://commons.apache.org/에서 다운로드할 수 있습니다.
2단계: 다음과 같이 양식 테이블의 enctype을 "multipart/form-data"로 설정합니다.
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadImage">
</form>
3단계: Action 클래스에 다음 속성을 추가합니다. 속성의 빨간색 부분은 양식의 파일 필드 이름에 해당합니다.
공개 클래스 HelloWorldAction{
private File uploadImage;//업로드된 파일 가져오기
private String uploadImageContentType;//파일 형식 가져오기
private String uploadImageFileName;//파일 이름 가져오기
//여기에서는 속성의 getter/setter 메서드가 생략됩니다.
공개 문자열 업로드()에서 예외 발생{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
파일 파일 = 새 파일(realpath);
if(!file.exists()) file.mkdirs();
FileUtils.copyFile(uploadImage, new File(file, uploadImageFileName));
"성공"을 반환합니다.
}
}
4. 다중 파일 업로드
1단계: WEB-INF/lib 아래에 commons-fileupload-1.2.1.jar 및 commons-io-1.3.2.jar를 추가합니다. 두 파일 모두 http://commons.apache.org/에서 다운로드할 수 있습니다.
2단계: 다음과 같이 양식 테이블의 enctype을 "multipart/form-data"로 설정합니다.
<form enctype="multipart/form-data" action="${pageContext.request.contextPath}/xxx.action" method="post">
<input type="file" name="uploadImages">
<input type="file" name="uploadImages">
</form>
3단계: Action 클래스에 다음 속성을 추가합니다. 속성의 빨간색 부분은 양식의 파일 필드 이름에 해당합니다.
공개 클래스 HelloWorldAction{
private File[] uploadImages;//업로드된 파일 가져오기
private String[] uploadImagesContentType;//파일 형식 가져오기
private String[] uploadImagesFileName;//파일 이름 가져오기
//여기에서는 속성의 getter/setter 메서드가 생략됩니다.
공개 문자열 업로드()에서 예외 발생{
String realpath = ServletActionContext.getServletContext().getRealPath("/images");
파일 파일 = 새 파일(realpath);
if(!file.exists()) file.mkdirs();
for(int i=0 ;i<uploadImages.length; i++){ 파일 uploadImage = uploadImages[i];
FileUtils.copyFile(uploadImage, new File(file, uploadImagesFileName[i]));
}
"성공"을 반환합니다.
}}
5. 맞춤형 인터셉터
인터셉터를 사용자 정의하려면 com.opensymphony.xwork2.interceptor.Interceptor 인터페이스를 구현해야 합니다.
공개 클래스 PermissionInterceptor는 인터셉터를 구현합니다.
개인 정적 최종 긴 serialVersionUID = -5178310397732210602L;
공공 무효 파괴() {
}
공개 무효 초기화() {
}
공개 문자열 인터셉트(ActionInvocation 호출)가 예외를 발생시킵니다.
System.out.println("인터셉터 입력");
if(사용자가 세션에 존재함){
문자열 결과 = invocation.invoke();
}또 다른{
"로그온"을 반환합니다.
}
//System.out.println("반환 값:"+ 결과);
//결과 반환;
}
}
<패키지 이름="csdn" 네임스페이스="/test" 확장="struts-default">
<인터셉터>
<인터셉터 이름="권한" />
<인터셉터-스택 이름="permissionStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name=" 권한 " />
</인터셉터-스택>
</인터셉터>
<작업 이름="helloworld_*" 메서드="{1}">
<result name="success">/WEB-INF/page/hello.jsp</result>
<interceptor-ref name="permissionStack"/>
</액션>
</패키지>
파일 업로드, 데이터 검증, 요청 매개변수를 액션으로 캡슐화하는 등 struts2의 기능은 모두 시스템의 기본 defaultStack에 있는 인터셉터에 의해 구현되기 때문에 우리가 정의하는 인터셉터는 애플리케이션이 struts2를 사용할 수 있도록 시스템의 기본 defaultStack을 참조해야 합니다. 프레임워크에서 제공하는 기능입니다.
패키지 아래의 모든 작업이 사용자 정의 인터셉터를 사용하도록 하려면 <default-interceptor-ref name="permissionStack"/>을 통해 인터셉터를 기본 인터셉터로 정의할 수 있습니다. 참고: 패키지당 하나의 기본 인터셉터만 지정할 수 있습니다. 또한 패키지의 작업에 대한 인터셉터를 명시적으로 지정하면 기본 인터셉터가 작동하지 않습니다.
6. 입력 확인
Struts2에서는 모든 동작 방법을 검증하거나 특정 동작 방법을 검증할 수 있습니다.
Struts2는 입력 검증을 위한 두 가지 구현 방법을 제공합니다.
1. 코드를 직접 작성하여 구현합니다.
2. XML 구성을 기반으로 구현되었습니다.
7. 액션의 모든 메소드 입력을 확인하는 코드를 수동으로 작성합니다.
유효성 검사() 메서드를 재정의함으로써 유효성 검사() 메서드는 실행 메서드와 동일한 서명을 가진 작업의 모든 메서드를 확인합니다. 특정 데이터 확인이 실패하면 addFieldError() 메서드를 호출하여 시스템의 fieldErrors에 확인 실패 정보를 추가해야 합니다(addFieldError() 메서드를 사용하려면 해당 작업이 시스템의 fieldErrors에 실패 정보를 포함하는 경우 ActionSupport를 상속할 수 있음). struts2는 요청이 input이라는 결과로 전달됩니다. 실패 정보는 입력 뷰의 <s:fielderror/>를 통해 표시될 수 있습니다.
유효성 검사() 사용 예:
공개 무효 유효성 검사() {
if(this.mobile==null || "".equals(this.mobile.trim())){ this.addFieldError("username", "휴대폰 번호는 비워둘 수 없습니다.");
}else{ if(!Pattern.compile("^1[358]//d{9}").matcher(this.mobile.trim()).matches()){
this.addFieldError("mobile", "휴대폰번호 형식이 잘못되었습니다.") }
}
}
확인이 실패하면 요청이 입력 보기로 전달됩니다.
<result name="input">/WEB-INF/page/addUser.jsp</result>
실패 정보를 표시하려면 addUser.jsp 페이지에서 <s:fielderror/>를 사용하십시오.
유효성 검사Xxx() 메서드를 통해 구현된 유효성 검사Xxx()는 작업에서 Xxx라는 메서드만 확인합니다. Xxx의 첫 글자는 대문자로 표기해야 합니다. 특정 데이터 확인이 실패하면 addFieldError() 메서드를 호출하여 시스템의 fieldErrors에 확인 실패 정보를 추가해야 합니다(addFieldError() 메서드를 사용하려면 해당 작업이 시스템의 fieldErrors에 실패 정보를 포함하는 경우 ActionSupport를 상속할 수 있음). struts2는 요청이 input이라는 결과로 전달됩니다. 실패 정보는 입력 뷰의 <s:fielderror/>를 통해 표시될 수 있습니다.
verifyXxx() 메서드 사용 예:
공개 문자열 add()가 예외를 발생시킵니다{ return "success";}
공개 무효 유효성 검사추가(){
if(username==null && "".equals(username.trim())) this.addFieldError("username", "사용자 이름은 비워둘 수 없습니다.");
}
확인이 실패하면 요청이 입력 보기로 전달됩니다.
<result name="input">/WEB-INF/page/addUser.jsp</result>
실패 정보를 표시하려면 addUser.jsp 페이지에서 <s:fielderror/>를 사용하십시오.
8. 입력 확인 과정
1. 유형 변환기는 요청 매개변수에 대해 유형 변환을 수행하고 변환된 값을 작업의 속성에 할당합니다.
2. 유형 변환 중에 예외가 발생하면 시스템은 예외 정보를 ActionContext에 저장하고 ConversionError 인터셉터는 예외 정보를 fieldErrors에 추가합니다. 유형 변환 시 예외 발생 여부와 상관없이 3단계로 진입합니다.
3. 시스템은 먼저 리플렉션 기술을 통해 작업에서 verifyXxx() 메서드를 호출합니다. 여기서 Xxx는 메서드 이름입니다.
4. 그런 다음 작업에서 verify() 메서드를 호출합니다.
5. 위의 4단계 이후 시스템의 fieldErrors에 오류 정보가 있는 경우(즉, 오류 정보를 저장하는 컬렉션의 크기가 0보다 큰 경우) 시스템은 자동으로 input이라는 뷰에 요청을 전달합니다. 시스템의 fieldErrors에 오류 정보가 없으면 시스템은 해당 작업의 처리 방법을 실행합니다.
9. XML 구성 방식을 기반으로 모든 액션 방식에 대한 입력 검증 구현
XML 기반 구성 방법을 사용하여 입력 확인을 구현하는 경우 Action도 ActionSupport를 상속하고 확인 파일을 제공해야 합니다. 확인 파일과 작업 클래스는 동일한 패키지에 배치됩니다. 파일 이름 지정 형식은 ActionClassName-validation입니다. 여기서 ActionClassName은 액션의 단순 클래스 이름이고 -validation은 고정된 작성 방법입니다. 작업 클래스가 cn.csdn.UserAction인 경우 파일 이름은 UserAction-validation.xml이어야 합니다. 다음은 확인 파일의 템플릿입니다.
<?xml version="1.0" 인코딩="UTF-8"?>
<!DOCTYPE 유효성 검사기 PUBLIC "-//OpenSymphony Group//XWork Validator 1.0.3//EN" "http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd">
<검증기>
<필드 이름="사용자 이름">
<field-validator type="requiredstring">
<param name="trim">참</param>
<message>사용자 이름은 비워둘 수 없습니다!</message>
</field-validator>
</field>
</validators>
<field>는 작업에서 확인할 속성을 지정하고, <field-validator>는 위에서 지정한 유효성 검사기 필수 문자열을 시스템에서 제공합니다. 유효성 검사기는 xwork-2.x.jar의 com.opensymphony.xwork2.validator.validators 아래 default.xml에서 찾을 수 있습니다.
<message>는 확인 실패 후 프롬프트 메시지입니다. 국제화가 필요한 경우 메시지의 키 속성을 지정할 수 있으며 키 값은 리소스 파일의 키입니다.
이 확인 파일에서는 작업에 포함된 문자열 유형의 사용자 이름 속성을 먼저 확인하여 공백을 제거한 다음 사용자 이름이 비어 있는지 확인해야 합니다.
확인파일 작성시 도움말 메시지가 나오지 않습니다. ActionClassName-validation.xml 확인파일 작성시 도움말 메시지가 나타나지 않으면 다음과 같이 문제를 해결할 수 있습니다.
windowwos->기본 설정->myeclipse->파일 및 편집기->xml->xml카탈로그
"추가"를 클릭하고 나타나는 창의 위치에서 "파일 시스템"을 선택한 다음 xwork-2.1.2 압축 해제 디렉터리의 src/java 디렉터리에서 xwork-validator-1.0.3.dtd를 선택하고 다음으로 돌아갑니다. 설정 창 성급하게 창을 닫지 말고 창의 키 유형을 URI로 변경해야 합니다. 키가 http://www.opensymphony.com/xwork/xwork-validator-1.0.3.dtd로 변경되었습니다.