为什么覆盖HttpServletRequestWrapper中的方法时,编译给我警告。

我编写的一个过滤器程序,功能是对客户端提交的请求中的某些字符进行转换,具体代码如下:
package michael;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public final class MyRequestWrapper extends HttpServletRequestWrapper
{
public MyRequestWrapper(HttpServletRequest request)
{
super(request);
}

     //重点看这个地方,我的这个类是从HttpServletRequestWrapper继承而来,父类中也有个getParameter().
public java.lang.String getParameter(java.lang.String name)
{
    String value=super.getParameter(name);
    if(null!=value)
        return toHtml(value.trim());
    else
        return null;
}

private String toHtml(String str)
{
    if(str==null)
        return null;
    StringBuffer sb=new StringBuffer();
    int len=str.length();
    for(int i=0; i<len; i++)
    {
        char c=str.charAt(i);
        switch(c)
        {
            case ' ':
                sb.append("&nbsp");
                break;
            case '\n':
                sb.append("<br>");
                break;
            case '\r':
                break;
            case '\'':
                sb.append("&#39;");
                break;
            case '<':
                sb.append("&lt;");
                break;
            case '>':
                sb.append("&gt;");
                break;
            case '&':
                sb.append("&amp");
                break;
            case '"':
                sb.append("&#34");
                break;
            case '\\':
                sb.append("&#92");
                break;
            default:
                sb.append(c);
        }
    }
    return sb.toString();
}

}

重点看上面注释的地方,我不过是覆盖了父类的一个方法,而且该方法在父类中是public的,按道理应该不可能出错的,可是编译的时候就给我报这个错,如下图所示,我用的是jdk1.5,tomcat6.0.16。大家帮忙给我看下,谢谢了!

[color=blue][b]不是吧,至少一个少一个isRequestedSessionIdFromUrl() 的错误啊。应为在自己的实现中,没有调用覆盖的方法啊。[/b][/color]

[b]你叙述的错误和你图片上的错误不一致啊。

图片上报的错误时getRealPath 和 isRequestedSessionIdFromURL这个2个方法[/b]

[color=blue]
[b]装饰模式,所以要把所有的方法都装饰一下。看HTTPServletRequestWrapper的源码:[/b]
[/color]
[code="java"] public boolean isRequestedSessionIdFromUrl() {
return this._getHttpServletRequest().isRequestedSessionIdFromUrl();
}[/code]

[b][color=blue]里面的所有方法,都是调用内部的HttpServletRequest的那个实例的方法。

不幸的是,在HttpServletRequest标识了isRequestedSessionIdFromUrl()这个方法为Deprecated.而在HTTPServletRequestWrapper中,却未能标注为Deprecated。

这下你的疑惑应该解开了吧。因为是装饰模式,所以必须要用这个方法,但是却忘了标注为Deprecated了。[/color]

PS:你使用应该是Servlet2.3 ,因为HttpServletRequestWrapper是2.3引入的。2.3之后就是3.0,不过现在的基于Servlet3.0的Tomcat还在测试中,还未发布正式版[/b]

应该把你的完整代码贴出来, 不然让我们猜呀 8)

[color=blue]
[b]仿照HttpServletRequestWrapper写一个MyHttpRequestWrapper ,这个MyHttpRequestWrapper与HttpServletRequestWrapper不同之处在于最后一个方法。

然后public final class MyRequestWrapper extends MyHttpRequestWrapper ,试试[/b][/color]

[code="java"]public class MyHttpRequestWrapper extends ServletRequestWrapper implements HttpServletRequest {

public MyHttpRequestWrapper (HttpServletRequest request) {
    super(request);
}

private HttpServletRequest _getHttpServletRequest() {
return (HttpServletRequest) super.getRequest();
}

public String getAuthType() {
return this._getHttpServletRequest().getAuthType();
}

public Cookie[] getCookies() {
return this._getHttpServletRequest().getCookies();
}

public long getDateHeader(String name) {
return this._getHttpServletRequest().getDateHeader(name);
}

public String getHeader(String name) {
return this._getHttpServletRequest().getHeader(name);
}


public Enumeration getHeaders(String name) {
return this._getHttpServletRequest().getHeaders(name);
}  

public Enumeration getHeaderNames() {
return this._getHttpServletRequest().getHeaderNames();
}

 public int getIntHeader(String name) {
return this._getHttpServletRequest().getIntHeader(name);
}

public String getMethod() {
return this._getHttpServletRequest().getMethod();
}

public String getPathInfo() {
return this._getHttpServletRequest().getPathInfo();
}

 public String getPathTranslated() {
return this._getHttpServletRequest().getPathTranslated();
}

public String getContextPath() {
return this._getHttpServletRequest().getContextPath();
}

public String getQueryString() {
return this._getHttpServletRequest().getQueryString();
}

public String getRemoteUser() {
return this._getHttpServletRequest().getRemoteUser();
}

public boolean isUserInRole(String role) {
return this._getHttpServletRequest().isUserInRole(role);
}

public java.security.Principal getUserPrincipal() {
return this._getHttpServletRequest().getUserPrincipal();
}

public String getRequestedSessionId() {
return this._getHttpServletRequest().getRequestedSessionId();
}

public String getRequestURI() {
return this._getHttpServletRequest().getRequestURI();
}

public StringBuffer getRequestURL() {
return this._getHttpServletRequest().getRequestURL();
}

public String getServletPath() {
return this._getHttpServletRequest().getServletPath();
}

public HttpSession getSession(boolean create) {
return this._getHttpServletRequest().getSession(create);
}

public HttpSession getSession() {
return this._getHttpServletRequest().getSession();
}

public boolean isRequestedSessionIdValid() {
return this._getHttpServletRequest().isRequestedSessionIdValid();
}

public boolean isRequestedSessionIdFromCookie() {
return this._getHttpServletRequest().isRequestedSessionIdFromCookie();
}


public boolean isRequestedSessionIdFromURL() {
return this._getHttpServletRequest().isRequestedSessionIdFromURL();
}

// 注意改变在这里
public boolean isRequestedSessionIdFromUrl() {
return this._getHttpServletRequest().isRequestedSessionIdFromURL();
}[/code]