【发布时间】:2013-04-01 15:30:20
【问题描述】:
当我尝试实现 HttpSession 时,我应该重写 getSessionContext 方法。但它会引发弃用警告,因为该方法及其返回类型 HttpSessionContext 已弃用。
@deprecated javadoc 标记修复了getSessionContext 定义的警告,但无法修复HttpSessionContext 导入的警告。并且将@SuppressWarnings 放在导入之前会导致编译错误。
如何解决这两个警告?
代码:
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionContext;
public class MyServletSession implements HttpSession {
// ...
/**
* @deprecated
*/
@Override
public HttpSessionContext getSessionContext() {
throw new UnsupportedOperationException();
}
// ...
}
警告:
$ javac -Xlint:deprecation -cp /path/to/javax.servlet-api-3.0.1.jar MyServletSession.java
MyServletSession.java:5: warning: [deprecation] HttpSessionContext in javax.servlet.http has been deprecated
import javax.servlet.http.HttpSessionContext;
^
1 warning
【问题讨论】:
-
我相信你应该尽量避免使用
HttpSessionContext。根据 javadoc:“已弃用。出于安全原因,从 Java(tm) Servlet API 2.1 开始,没有替代品。此接口将在此 API 的未来版本中删除。” -
通常弃用是有充分理由的:告诉你,如果你能负担得起,你应该遵循任何新的实现来替换被弃用的方法类。否则,如何使用 @Override 注释标记整个类(当然不推荐)?
-
你为什么要实现 HttpSession?你在实现一个容器吗?
-
为什么要实现自己的HttpSession?
-
我在 PlayFramework 2.1 上使用 jgit 实现 Git 存储库托管,而 jgit 需要 PlayFramework 2.1 没有的 Servlet。因为我认为实现 Servlet 比将 Servlet 导入 PlayFramework 2.1 更容易,所以我应该实现 Servlet 包括 HttpSession。我几乎成功了,但只剩下警告。
标签: java servlets httpsession