- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
好吧,我先展示一下我的代码:
@Override
public void init() throws ServletException {
super.init();
try {
securityController = SecurityControllerFactory.getInstance().create();
} catch (Exception e) {
System.err.println("Error creating security controller; " + e.getMessage());
}
// max allowed uploaded uploadedFile size is 10 MB
maxFileSize = getBytes(10);
maxMemSize = getBytes(2);
}
如您所见,编译器强制我使用 try/catch 来实例化 SecurityController。然而,就我而言,我认为如果无法实例化安全 Controller ,它应该停止实例化 Servlet 并通常抛出异常。对此有何建议/解释?
最佳答案
仔细阅读the javadoc of init()
method :
init
public void init() throws ServletException
...
Throws:
ServletException
- if an exception occurs that interrupts the servlet's normal operation
看那里,您应该将其作为 ServletException
重新抛出。符合 Servlet API specification 的第 2.3.2.1 章, servlet 将不会被放置在服务中:
2.3.2.1 Error Conditions on Initialization
During initialization, the servlet instance can throw an
UnavailableException
or aServletException
. In this case, the servlet must not be placed into active service and must be released by the servlet container. The destroy method is not called as it is considered unsuccessful initialization....
因此,只需按照文档中的说明进行操作(这是正常过程,顺便说一句,作为 Java 初学者,您应该很好地理解/意识到这一点):
@Override
public void init() throws ServletException {
try {
securityController = SecurityControllerFactory.getInstance().create();
} catch (Exception e) {
throw new ServletException("Error creating security controller", e);
}
maxFileSize = getBytes(10);
maxMemSize = getBytes(2);
}
请注意,我删除了不必要的 super.init()
调用。 javadoc 没有告诉任何地方您需要为 init()
执行此操作,仅针对 init(ServletConfig)
。
与具体问题无关,在 Exception
上使用过于通用的 catch
被认为是不好的做法。您当然不希望在 Exception
上使用过于通用的 catch
来覆盖 RuntimeException
,因为这可能会无意中隐藏程序员的错误/错误。
您应该尝试在您的catch
中尽可能具体,尝试尽可能具体地捕获在这些方法的throws
中声明的异常。例如:
try {
securityController = SecurityControllerFactory.getInstance().create();
} catch (SecurityControllerCreationException e) {
throw new ServletException("Error creating security controller", e);
}
另一个原因也可能是所讨论的方法设计得很糟糕,以至于它们自己被声明为 throws Exception
。您也应该依次修复该部分。
关于java - 如何为 servlet 的 init() 方法抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16290614/
何时使用 init、带参数的 init 或 iOS 8 (Swift) 中的便利 init, Objective-C 中的 convenience init 等价于什么? 最佳答案 你的类将有一个必需
我正在阅读这个 First Search Program - Artificial Intelligence for Robotics 算法,我正在阅读它的 Python 代码。在这里,我们创建了一个
我觉得答案很明显,但我一直无法弄清楚,这对我来说似乎是一个反复出现的问题。基本上我想做这样的事情: extension NSData { convenience init(JSONObject
cloud-init 是在首次启动时在虚拟机上执行各种配置的包。您必须使用您的配置配置一个文件,然后将其扔到您的 VM 上,然后对其进行虚拟化。 但它究竟是如何工作的呢?用户数据如何发送到 VM,cl
我目前正在与 CoreOS 打交道,到目前为止,我认为我已经掌握了总体思路和概念。我还没有得到的一件事是执行 cloud-init . 我明白 cloud-init是一个为 CoreOS 做一些配置的
部署项目后,当客户端第一次向 TestServlet 发送请求时,服务器会创建 testServlet 对象,然后调用第一个 init() 方法(init(ServletConfig config))
是否有可能在 convenience init 中以某种方式解包可选 init? convenience init(...) { self.init?(...) ?? self.init() }
使用时 write_files使用 cloud-init,是否可以附加内容?如果是这样,如何? write_files: [ { "path": "/home/user/some-file
我对 Ansible 比较陌生,我创建了一个剧本,可以在“裸”服务器上安装 Tomcat 配置。我想知道如何解决能够更新 init.d 脚本的问题,同时避免在脚本没有更改时在剧本开始时停止服务。这是基
我打算在 iOS 中使用参数调用 init 方法中的默认 init 方法。像这样: -(id)init{ self = [super init]; if (self) {
Objective C 规范(来自 Apple)第 49 页指出每个声明实例变量的类都必须提供一个 init 方法来初始化它们 我的问题 -为什么这是必要的? NSObject 不会为实例初始化 iV
所以我有一个带有指定初始化器的类,它为每个存储的属性取值。我所有存储的属性也有一个默认值,所以我假设这个类有一个默认的初始化。 在我指定的 init 中,我调用 super.init() 问题是,如果
我对此有些困惑: class Person { var name: String var age: Int init(){ name = “Tim”
我有一个带有两个初始化方法的对象。其中一个接受 NSDictionary,另一个接受一大堆 String 变量。我想调用 NSDictionary init,然后从那里将我的字典转换为字符串,然后用我
我正在尝试为我的类创建一个方便的初始化:User。我之前为另一个类(class)做过这个,并且 - 再次创建它 - 我使用了相同的代码,只是我的用户类(class)有所不同。 这是我的用户类: imp
我已经通读了以下秘诀,它展示了一种使用 Google Cloud Endpoints 后端为 AngularJS 前端提供动力的方法: https://cloud.google.com/resourc
本文整理了Java中com.netflix.zuul.init.ZuulFiltersModule.()方法的一些代码示例,展示了ZuulFiltersModule.()的具体用法。这些代码示例主要来
我想实现一个 初始化 下功能 box.once() 在 Tarantool 中只执行一次,但是,只有在 时才对我有用初始化 已成功执行。 问题 : 如何使“onceinit”记录只有在 init 成功
如果在Xcode中创建新的游戏模板项目,则默认GameViewController将使用以下初始化程序实例化游戏场景: let scene = SKScene(fileNamed: "GameScen
我有一个 MKPolyline我要实现的 subblas NSCoding , IE。 @interface RSRoutePolyline : MKPolyline I asked a quest
我是一名优秀的程序员,十分优秀!