2010-12-10 2 views
1

URL에 전달 된 매개 변수에 문제가 있습니다. /struts/MyAction.action?param=foo%40bar.comStruts 2.0.14 GET 매개 변수가 URL 디코딩되지 않았습니까? 버그입니까?

액션 필드가 설정 한 "PARAM"필드를 얻을에 "푸 % 40bar.com" 가 있다는 것입니다 :

하자 요청이 말한다 버그 또는 Struts에서 너무 많은 것을 기대하고 있습니까?

내 직감은 "[email protected]"값을 가져야한다고 말합니다. 예를 들어 해당 매개 변수를 POST 양식 필드로 전달하면 일어날 수 있습니다.

기본 인터셉터 스택을 사용하고 Action 클래스는 ActionSupport를 확장합니다. WebSphere6.1에서 일부 동작이 발생합니다. & GlassFish2.1.

감사


안녕 다시

,

문제는 프록시 구현 버그로 인해 발생했다. 우리는 웹 응용 프로그램 앞에 서있는 사용자 지정 프록시 서버를 작성했습니다. 두 번째로 URL 매개 변수를 인코딩했기 때문에 Struts에서 @ 대신 % 40을 사용했습니다. 버그가 수정되었으며 매개 변수가 올바르게 전달됩니다. 내가 Struts2이 매개 변수를 디코딩에 대한 책임을 생각하지 않고, 서블릿 컨테이너가 들어있다

답변

2

모든 도움을

감사합니다 Tomcat, Jetty 등

0

매개 변수의 문제점은 무엇입니까? param 필드를 설정하기를 원했던 것은 무엇입니까?

Action 속성을 Struts가하는 방식과 다르게 변환하려면 사용자 지정 형식 변환기를 작성할 수 있습니다.

1

직감이 맞습니다. "[email protected]"이 표시되어야합니다. struts 버전 2.0.14의 다음 테스트에서! @ # $ # $^$ & % # $ % &을 from에 입력하고 다른 페이지에 문제없이 표시 할 수 있습니다.

<s:form action="form-view.action" method="GET"> 
    <s:textfield label="email" name="email"/> 
    <s:submit/> 
</s:form> 

기본 동작 클래스 (이 버전은 세터/게터가 필요하지 않습니다에 stuts2에주의) :

나는 문자열을 취하는 형태로 베어 뼈 스트럿 2.0.14 응용 프로그램을 테스트 :

package struts2; 

import com.opensymphony.xwork2.ActionSupport; 

public class FormViewAction extends ActionSupport{ 
    public String email; 
} 

그리고 아주 기본적인 디스플레이 페이지가 포함 : 여기

<s:property value="email"/> 

가 struts.x입니다 ml :

<struts> 
    <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
    <constant name="struts.devMode" value="true" /> 
    <package namespace="" name="example" extends="struts-default"> 
    <action name="form-view" class="struts2.FormViewAction"> 
     <result>/form-view.jsp</result> 
    </action> 
    </package> 
</struts> 

구성 문제가 있어야합니다 ... 메이븐과 함께 구축하고 있습니까? 왜 2.2.1 대신 2.0.14 버전을 사용하고 있습니까? 단지 제쳐두고 2.2.1에서 2.0.14로 테스트 응용 프로그램을 다운 그레이드하는 데 약 5 분이 걸렸습니다. 나는 당신에게 최신 문서를 줄 현재 버전으로 업그레이 드에서 심각한 장애가 있다고 생각하지 않습니다.

나는 이것을 Glassfish 3.0.1에서 실행했습니다.

maven으로 빌드하지 않는 경우 라이브러리의 jar, web.xml 및 struts.xml 파일을 나열하고 가능한 경우 최소한 form.jsp, display.jsp 및 문제를 재현 할 Action 클래스를 나열하십시오.

+0

공개 입력란이 아닌 getter 및 setter를 사용해야합니다. 이는 Java의 일반적인 모범 사례입니다. –

+0

struts를 사용하면 유효성 검사 메서드에서 유효성 검사를 수행해야하는데 getter 및 setter는 get/set보다 아무것도 수행하지 않아야하며 매개 변수 제약도 다른 곳에서 처리됩니다 ... 동작의 클래스가 얇기 때문에 훨씬 많은 단열재가 필요하지 않습니다. (그리고 정말 쉽게 IDE 리팩터링과). 일반적으로 좋은 생각이지만, 액션을 취하는 방식은 이점을 꽤 추상적으로 보이지만 추가하지 않으면 가독성이 향상됩니다. OT 그냥, 하이버 네이트 심지어 이국적인에 대한 이야기 ​​바이트 필드 재 작성을 통해 개인 필드의 설정을 허용 할 수 있습니다! 나는 get/set이 '모범 사례'라고 동의하지만 항상 최선은 아닙니다. – Quaternion

+1

안녕하세요, 그것은 실제로 양식이 아니라 생성 된 이메일의 작업에 대한 링크입니다. 클래스 패스는 괜찮은 것 같고 로그에서 걱정할만한 결과를 얻지 못합니다. 나는 Struts 2.2.1을 시험해보고 어떤 것이 바뀌는지를 보게 될 것입니다. –

0

rado가 표시되면 서블릿 컨테이너는 HttpServletRequest의 매개 변수 값을 디코딩해야합니다. 값이 URL 디코딩되지 않으면 무언가가 꺼져 있습니다.

Servlet Tutorial: Handling Form Data

첫째, 당신은 무엇을 서블릿 API의 버전을 사용하고 있습니까? 2.5? 2.4? 사용중인 버전의 web.xml에 올바른 XSD 스키마가 정의되어 있습니까? 또한 사용중인 버전이 응용 프로그램 서버에서 제공하는 버전과 일치하는지 확인하십시오.