- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我得到了一个 spring web mvc 架构图片,但我不完全理解。
Java 代码:
public class ErrorHandler extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">");
out.println("<html><head><title>ERROR</title></head><body>");
out.println("<h1>An error occured</h1>");
out.println("</body></html>");
}
}
web.xml
<servlet>
<servlet-name>ErrorHandler</servlet-name>
<servlet-class>some.package.ErrorHandler</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ErrorHandler</servlet-name>
<url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<error-page>
<error-code>403</error-code>
<location>/ErrorHandler</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/ErrorHandler</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/ErrorHandler</location>
</error-page>
这段代码的语义很清楚,我猜:它是一个错误处理程序,一方面捕获 HTTP 状态错误(403 和 404),但也捕获内部异常(例如除以 0,因此内部 500 错误) 。
现在我想重构它。这意味着我想创建大部分仅包含 java 的代码,因为项目的其余部分也在这个结构中,并且我希望它是统一的。
但这是我的问题,因为根据我的研究,我并不完全清楚:
HttpServlet
类(class)?这不是和 @RequestMapping
一样吗?注解?但是当我删除extends HttpServlet
时并输入 @RequestMapping
到doGet
方法,我必须为该值设置什么?或者到底有没有映射?<exception-type>java.lang.Throwable</exception-type>
应等于@ExceptionHandler(value={Throwable.class})
与 @RestControllerAdvice
。还是我这里错了? <error-code>404</error-code>
是怎么回事? ?这相当于 @ExceptionHandler(value={ResourceNotFoundException.class})
?或者 Trowable.class 被捕获就足够了吗? 感谢您的帮助:)
最佳答案
顺便说一句,您的 web.xml 看起来似乎不是一个 Spring MVC 应用程序,因为它基于 DispatcherServlet
,但尚未包含在您的部署描述符中。尽管如此,我还是尽力回答你的问题。
通过使用 HttpServlet
扩展您的类,您可以通过覆盖 doPost
或 doGet
等方法,使该类有资格管理 http 请求。然后您可以在 web.xml 中注册您的 servlet 并为其指定映射。它不等同于 Spring 特定注释 @RequestMapping
。如果您想使用 Spring MVC 处理异常(因此不要使用 HttpServlet
类),您需要配置 web.xml 以支持 Spring MVC,创建 @Controller
类并在其中创建 @ExceptionHandler
带注释的方法,只要在 Controller 范围内抛出给定的异常,就会调用该方法。 Spring MVC 中处理异常的另一种方法可能是使用 @ControllerAdvice 注解的类。如果 Spring 在抛出异常的 Controller 范围内找不到抛出异常的异常处理程序,它将在用 @ControllerAdvice
注释的类中查找它。
如果您还没有使用过 Spring MVC 并且不确定它是如何工作的,请查看本教程:https://www.tutorialspoint.com/spring/ .
希望我能为您澄清一些事情。
关于java - 相当于扩展HttpServlet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41238430/
我被告知这不是一个好的做法 @Autowired HttpServlet httpServlet; 在 Spring Boot 中,因为它只会为所有点击创建一个对象。我对 Spring Boot 和
我想知道反序列化后是否调用了 HttpServlet 的 init 方法。 我不知道是否有任何容器曾经序列化一个 servlet,但它实现了 Serializable 接口(interface),所以
我在 HttpServlet 文档中读到 HttpServlet 的子类必须重写至少一个方法,通常是以下方法之一: doGet, if the servlet supports HTTP GET re
我有几个在服务器端执行操作的 servlet。在一些上,我只是编码一些不必要的数据并将其发送回来,这似乎毫无意义。你必须回应吗?当您只说 return 时会发生什么?我以前这样做过,似乎没有什么问题,
我尝试创建一个文件,写入文件,然后将文件转换为输入流,并将其字节传输到 HTTP 响应的输出流。但我收到消息“/tmp/mozilla_xxxx/33JJ1OHw.md.part 无法保存,因为无法读
我正在开发一个具有两个 Web 界面的 Java 应用程序:一个处理某些 Web 服务逻辑的 servlet (/WSProxy) 和一个使用 Spring 框架的 Web 管理界面(/Admin 或
我在 Java EE 应用程序中使用 Apache Tomcat v8.0 服务器。基本上,我创建了一个 ResponseUpload servlet。我需要通过 POST 请求从 Web 应用程序获
这个问题在这里已经有了答案: How many instances are created for a HTTP servlet (2 个答案) 关闭 6 年前。 根据servlet的生命周期,se
我有一个 Web 应用程序,其中多个 servlet 使用一定数量的相同逻辑进行预初始化(设置日志记录、 session 跟踪等)。我所做的是在 javax.servlet.http.HttpServ
我有一个应用程序,用户正在访问 servlet 文件,该文件将有条件地读取 .pdf 文件并发送 .pdf 文件作为对用户请求的响应。 servlet 代码不会设置响应 header 的内容长度。 在
这个问题在这里已经有了答案: Http Servlet request lose params from POST body after read it once (13 个答案) 关闭 7 年前。
基本上,一个 servlet 实例存在多长时间?我有点猜测它是 session 范围。但是,我想它可能有某种超时或垃圾收集来删除旧实例。 最佳答案 当应用程序启动时(部署在 servlet 容器上)或
我需要一些帮助,我的意思是对这个继承设计的意见。 我创建了Controller.class,它扩展了HttpServlet和AjaxController.class 扩展了 Controller.cl
我想在扩展 HttpServlet 的类上注入(inject) DAO 依赖项,这可能吗?我不想从应用程序上下文中手动获取依赖项,但如果可能的话,希望在我的 Servlet 实例上进行真正的依赖项注入
关闭。此题需要details or clarity 。目前不接受答案。 想要改进这个问题吗?通过 editing this post 添加详细信息并澄清问题. 已关闭 9 年前。 Improve th
假设,我有一个 TestServlet 类,它声明为全局字符串变量。如果同时调用 TestServlet 类,则此“消息”字符串变量是否可以安全地打印而无需从并发线程交叉? public class
我有一个扩展 HttpServlet 类的类。我知道 Java 是多线程的,不同的线程(阅读:HTTP 请求)可以使用同一个实例。我想在第一个请求时实例化一个对象并使用它直到 session 结束。
出于记录目的,我重写了 HttpServlet 的服务方法,如下所示: @Override protected void service(HttpServletRequest req, HttpSer
我对在 Google App Engine 上遇到的这个问题感到困惑。 我创建了几个servlet,因此我创建了一个基类来完成一些基本的重复工作。像这样: public class MyBase ex
我想用 http://www.easymock.org/ 测试我的 servlet 如何编写单元测试代码? 我根据您的回复更新我的代码。 我刚刚使用 Google 并制作了这段代码。 这是我的 Ser
我是一名优秀的程序员,十分优秀!