7.Spring Web MVC 框架

2020-05-14  本文已影响0人  乐于吕

1.Spring Web MVC 框架

MVC 框架教程

Spring web         MVC 框架提供了模型-视图-控制的体系结构和可以用来开发灵活、松散耦合的 web 应用程序的组件。MVC 模式导致了应用程序的不同方面(输入逻辑、业务逻辑和 UI 逻辑)的分离,同时提供了在这些元素之间的松散耦合。

模型封装了应用程序数据,并且通常它们由 POJO 组成。

视图主要用于呈现模型数据,并且通常它生成客户端的浏览器可以解释的 HTML 输出。

控制器主要用于处理用户请求,并且构建合适的模型并将其传递到视图呈现。

DispatcherServlet

Spring Web 模型-视图-控制(MVC)框架是围绕 DispatcherServlet 设计的,DispatcherServlet 用来处理所有的 HTTP 请求和响应。Spring Web MVC DispatcherServlet 的请求处理的工作流程如下图所示:

下面是对应于 DispatcherServlet 传入 HTTP 请求的事件序列:

收到一个 HTTP 请求后,DispatcherServlet 根据 HandlerMapping 来选择并且调用适当的控制器

控制器接受请求,并基于使用的 GET 或 POST 方法来调用适当的 service 方法。Service 方法将设置基于定义的业务逻辑的模型数据,并返回视图名称到 DispatcherServlet 中。

DispatcherServlet 会从 ViewResolver 获取帮助,为请求检取定义视图。

一旦确定视图,DispatcherServlet 将把模型数据传递给视图,最后呈现在浏览器中。

上面所提到的所有组件,即 HandlerMapping、Controller 和 ViewResolver 是 WebApplicationContext 的一部分,而 WebApplicationContext 是带有一些对 web 应用程序必要的额外特性的 ApplicationContext 的扩展。

需求的配置

你需要映射你想让 DispatcherServlet 处理的请求,通过使用在 web.xml 文件中的一个 URL 映射。下面是一个显示声明和映射 HelloWeb DispatcherServlet 的示例:

web.xml 文件将被保留在你的应用程序的 WebContent/WEB-INF 目录下。好的,在初始化 HelloWeb DispatcherServlet 时,该框架将尝试加载位于该应用程序的 WebContent/WEB-INF 目录中文件名为 [servlet-name]-servlet.xml 的应用程序内容。在这种情况下,我们的文件将是 HelloWeb-servlet.xml

接下来, 标签表明哪些 URLs 将被 DispatcherServlet 处理。这里所有以 .jsp 结束的 HTTP 请求将由 HelloWeb DispatcherServle t处理。

如果你不想使用默认文件名 [servlet-name]-servlet.xml 和默认位置 WebContent/WEB-INF,你可以通过在 web.xml 文件中添加 servlet 监听器 ContextLoaderListener 自定义该文件的名称和位置,如下所示:

<web-app...>....<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/HelloWeb-servlet.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener></web-app>

现在,检查 HelloWeb-servlet.xml 文件的请求配置,该文件位于 web 应用程序的 WebContent/WEB-INF 目录下:

  http://www.springframework.org/schema/beans

  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

  http://www.springframework.org/schema/context

  http://www.springframework.org/schema/context/spring-context-3.0.xsd">

以下是关于 HelloWeb-servlet.xml 文件的一些要点:

[servlet-name]-servlet.xml 文件将用于创建 bean 定义,重新定义在全局范围内具有相同名称的任何已定义的 bean。

标签将用于激活 Spring MVC 注释扫描功能,该功能允许使用注释,如 @Controller 和 @RequestMapping 等等。

InternalResourceViewResolver 将使用定义的规则来解决视图名称。按照上述定义的规则,一个名称为 hello 的逻辑视图将发送给位于 /WEB-INF/jsp/hello.jsp 中实现的视图。

下一节将向你展示如何创建实际的组件,例如控制器,模式和视图。

定义控制器

DispatcherServlet 发送请求到控制器中执行特定的功能。@Controller 注释表明一个特定类是一个控制器的作用。@RequestMapping 注释用于映射 URL 到整个类或一个特定的处理方法。

@Controller@RequestMapping("/hello")publicclassHelloController{@RequestMapping(method = RequestMethod.GET)publicStringprintHello(ModelMap model){      model.addAttribute("message","Hello Spring MVC Framework!");return"hello";  }}

@Controller 注释定义该类作为一个 Spring MVC 控制器。在这里,第一次使用的 @RequestMapping 表明在该控制器中处理的所有方法都是相对于 /hello 路径的。下一个注释 @RequestMapping(method = RequestMethod.GET) 用于声明 printHello() 方法作为控制器的默认 service 方法来处理 HTTP GET 请求。你可以在相同的 URL 中定义其他方法来处理任何 POST 请求。

你可以用另一种形式来编写上面的控制器,你可以在 @RequestMapping 中添加额外的属性,如下所示:

@ControllerpublicclassHelloController{@RequestMapping(value ="/hello", method = RequestMethod.GET)publicStringprintHello(ModelMap model){      model.addAttribute("message","Hello Spring MVC Framework!");return"hello";  }}

属性表明 URL 映射到哪个处理方法,方法属性定义了 service 方法来处理 HTTP GET 请求。关于上面定义的控制器,这里有以下几个要注意的要点:

你将在一个 service 方法中定义需要的业务逻辑。你可以根据每次需求在这个方法中调用其他方法。

基于定义的业务逻辑,你将在这个方法中创建一个模型。你可以设置不同的模型属性,这些属性将被视图访问并显示最终的结果。这个示例创建了一个带有属性 “message” 的模型。

一个定义的 service 方法可以返回一个包含视图名称的字符串用于呈现该模型。这个示例返回 “hello” 作为逻辑视图的名称。

创建 JSP 视图

对于不同的表示技术,Spring MVC 支持许多类型的视图。这些包括 JSP、HTML、PDF、Excel 工作表、XML、Velocity 模板、XSLT、JSON、Atom 和 RSS 提要、JasperReports 等等。但我们最常使用利用 JSTL 编写的 JSP 模板。所以让我们在 /WEB-INF/hello/hello.jsp 中编写一个简单的 hello 视图:

Hello Spring MVC

${message}

其中,${message} 是我们在控制器内部设置的属性。你可以在你的视图中有多个属性显示。

2.Spring MVC Hello World 例子

Spring MVC Hello World 例子

下面的例子说明了如何使用 Spring MVC 框架来编写一个简单的基于 web 的 Hello World 应用程序。下面让我们使用 Eclipse IDE,然后按照下面的步骤使用 Spring 的 Web 框架来开发一个动态 Web 应用程序:

步骤描述

1创建一个名称为 HelloWeb 的动态 Web 项目,并且在已创建的项目的 src 文件夹中创建一个包 com.tutorialspoint

2将上面提到的 Spring 和其他库拖拽到文件夹 WebContent/WEB-INF/lib 中。

3在 com.tutorialspoint 包下创建一个 Java 类 HelloController

4在 WebContent/WEB-INF 文件夹下创建 Spring 的配置文件 Web.xml 和 HelloWeb-servlet.xml

5在 WebContent/WEB-INF 文件夹下创建名称为 jsp 的子文件夹。在这个子文件夹下创建一个视图文件 hello.jsp

6最后一步是创建所有的源代码和配置文件的内容,并导出该应用程序,正如下面解释的一样。

这里是 HelloController.java 文件的内容:

packagecom.tutorialspoint;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.ui.ModelMap;@Controller@RequestMapping("/hello")public class HelloController{    @RequestMapping(method= RequestMethod.GET)  public String printHello(ModelMap model) {model.addAttribute("message", "HelloSpringMVCFramework!");return"hello";  }}

下面是 Spring Web 配置文件 web.xml 的内容

  http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">Spring MVC ApplicationHelloWeborg.springframework.web.servlet.DispatcherServlet1HelloWeb/

下面是另一个 Spring Web 配置文件 HelloWeb-servlet.xml 的内容

  http://www.springframework.org/schema/beans   

  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

  http://www.springframework.org/schema/context

  http://www.springframework.org/schema/context/spring-context-3.0.xsd">

下面是 Spring 视图文件 hello.jsp 的内容

<%@pagecontentType="text/html; charset=UTF-8"%>Hello World

${message}

最后,下面是包含在你的 web 应用程序中的 Spring 和其他库。你仅仅需要将这些文件拖拽到 WebContent/WEB-INF/lib 文件夹中。

commons-logging-x.y.z.jar

org.springframework.asm-x.y.z.jar

org.springframework.beans-x.y.z.jar

org.springframework.context-x.y.z.jar

org.springframework.core-x.y.z.jar

org.springframework.expression-x.y.z.jar

org.springframework.web.servlet-x.y.z.jar

org.springframework.web-x.y.z.jar

spring-web.jar

一旦你完成了创建源代码和配置文件后,导出你的应用程序。右键单击你的应用程序,并且使用 Export > WAR File 选项,在 Tomcat 的 webapps 文件夹中保存你的 HelloWeb.war 文件。

现在启动你的 Tomcat 服务器,并且确保你能够使用标准的浏览器访问 webapps 文件夹中的其他 web 页面。现在尝试访问该 URL http://localhost:8080/HelloWeb/hello。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

你应该注意,在给定的 URL 中,HelloWeb 是这个应用程序的名称,并且 hello 是我们在控制器中使用 @RequestMapping("/hello") 提到的虚拟子文件夹。当使用 @RequestMapping("/") 映射你的 URL 时,你可以使用直接 root,在这种情况下,你可以使用短 URL http://localhost:8080/HelloWeb/ 访问相同的页面,但是建议在不同的文件夹下有不同的功能。

3.Spring MVC 表单处理例子

Spring MVC 表单处理例子

下面的例子说明了如何编写一个简单的基于 web 的应用程序,它利用了使用 Spring 的 Web MVC 框架的 HTML 表单。为了开始使用它,让我们在恰当的位置使用 Eclipse IDE,然后按照下面的步骤使用 Spring 的 Web 框架来开发一个动态的基于表单的 Web 应用程序:

步骤描述

1创建一个名称为 HelloWeb 的动态 Web 项目,并且在已创建的项目的 src 文件夹中创建一个包 com.tutorialspoint

2将上面提到的 Spring 和其他库拖拽到文件夹 WebContent/WEB-INF/lib 中。

3在 com.tutorialspoint 包下创建一个 Java 类 Student 和 StudentController

4在 WebContent/WEB-INF 文件夹下创建 Spring 的配置文件 Web.xml 和 HelloWeb-servlet.xml

5在 WebContent/WEB-INF 文件夹下创建名称为 jsp 的子文件夹。在这个子文件夹下创建视图文件 student.jsp 和 result.jsp

6最后一步是创建所有的源代码和配置文件的内容,并导出该应用程序,正如下面解释的一样。

这里是 Student.java 文件的内容:

packagecom.tutorialspoint;publicclassStudent{privateInteger age;privateString name;privateInteger id;publicvoidsetAge(Integer age){this.age = age;  }publicIntegergetAge(){returnage;  }publicvoidsetName(String name){this.name = name;  }publicStringgetName(){returnname;  }publicvoidsetId(Integer id){this.id = id;  }publicIntegergetId(){returnid;  }}

下面是 StudentController.java 文件的内容:

packagecom.tutorialspoint;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.ModelAttribute;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.servlet.ModelAndView;importorg.springframework.ui.ModelMap;@ControllerpublicclassStudentController{@RequestMapping(value ="/student", method = RequestMethod.GET)publicModelAndViewstudent(){returnnewModelAndView("student","command",newStudent());  }@RequestMapping(value ="/addStudent", method = RequestMethod.POST)publicStringaddStudent(@ModelAttribute("SpringWeb")Student student,    ModelMap model){      model.addAttribute("name", student.getName());      model.addAttribute("age", student.getAge());      model.addAttribute("id", student.getId());return"result";  }}

在这里,第一个 service 方法 student(),我们已经在名称为 “command” 的 ModelAndView 对象中传递一个空的 Student 对象,因为 spring 框架需要一个名称的 “command” 的对象,如果你在 JSP 文件中使用 标签。所以,当 student() 方法被调用时,它返回 student.jsp 视图。

第二个 service 方法 addStudent() 将调用 HelloWeb/addStudent URL 中的 POST 方法。你将根据提交的信息准备好你的模型对象。最后一个 “result” 视图会从 service 方法中返回,它将导致呈现 result.jsp。

下面是 Spring Web 配置文件 web.xml 的内容

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">Spring MVC Form HandlingHelloWeborg.springframework.web.servlet.DispatcherServlet1HelloWeb/

下面是另一个 Spring Web 配置文件 HelloWeb-servlet.xml 的内容

  http://www.springframework.org/schema/beans   

  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

  http://www.springframework.org/schema/context

  http://www.springframework.org/schema/context/spring-context-3.0.xsd">

下面是 Spring 视图文件 student.jsp 的内容

<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>Spring MVC Form Handling

Student Information

NameAgeid

下面是 Spring 视图文件 result.jsp 的内容

<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>Spring MVC Form Handling

Submitted Student Information

Name${name}Age${age}ID${id}

最后,下面是包含在你的 web 应用程序中的 Spring 和其他库的列表。你仅仅需要将这些文件拖拽到 WebContent/WEB-INF/lib 文件夹中。

commons-logging-x.y.z.jar

org.springframework.asm-x.y.z.jar

org.springframework.beans-x.y.z.jar

org.springframework.context-x.y.z.jar

org.springframework.core-x.y.z.jar

org.springframework.expression-x.y.z.jar

org.springframework.web.servlet-x.y.z.jar

org.springframework.web-x.y.z.jar

spring-web.jar

一旦你完成了创建源代码和配置文件后,导出你的应用程序。右键单击你的应用程序,并且使用 Export > WAR File 选项,并且在 Tomcat 的 webapps 文件夹中保存你的 HelloWeb.war 文件。

现在启动你的 Tomcat 服务器,并且确保你能够使用标准的浏览器访问 webapps 文件夹中的其他 web 页面。现在尝试访问该 URL http://localhost:8080/HelloWeb/student。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

在提交必需的信息之后,单击提交按钮来提交这个表单。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

4.Spring 页面重定向例子

Spring 页面重定向例子

下面的例子说明了如何编写一个简单的基于 web 的应用程序,它利用重定向来传送一个 http 请求到另一个页面中。为了开始使用它,让我们在恰当的位置使用 Eclipse IDE,然后按照下面的步骤使用 Spring 的 Web 框架来开发一个动态的基于表单的 Web 应用程序:

步骤描述

1创建一个名称为 HelloWeb 的动态 Web 项目,并且在已创建的项目的 src 文件夹中创建一个包 com.tutorialspoint

2将上面提到的 Spring 和其他库拖拽到文件夹 WebContent/WEB-INF/lib 中。

3在 com.tutorialspoint 包下创建一个 Java 类 WebController

4在 WebContent/WEB-INF 文件夹下创建 Spring 的配置文件 Web.xml 和 HelloWeb-servlet.xml

5在 WebContent/WEB-INF 文件夹下创建名称为 jsp 的子文件夹。在这个子文件夹下创建视图文件 index.jsp 和 final.jsp

6最后一步是创建所有的源代码和配置文件的内容,并导出该应用程序,正如下面解释的一样。

这里是 WebController.java 文件的内容:

packagecom.tutorialspoint;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;@ControllerpublicclassWebController{@RequestMapping(value ="/index", method = RequestMethod.GET)publicStringindex(){return"index";  }@RequestMapping(value ="/redirect", method = RequestMethod.GET)publicStringredirect(){return"redirect:finalPage";  }@RequestMapping(value ="/finalPage", method = RequestMethod.GET)publicStringfinalPage(){return"final";  }}

下面是 Spring Web 配置文件 web.xml 的内容

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">Spring Page RedirectionHelloWeborg.springframework.web.servlet.DispatcherServlet1HelloWeb/

下面是另一个 Spring Web 配置文件 HelloWeb-servlet.xml 的内容

<?xml version="1.0"encoding="UTF-8"?>

  http://www.springframework.org/schema/beans   

  http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

  http://www.springframework.org/schema/context

  http://www.springframework.org/schema/context/spring-context-3.0.xsd">

下面是 Spring 视图文件 index.jsp 文件的内容。这将是一个登陆页面,这个页面将发送一个请求来访问重定向 service 方法,该方法将把这个请求重定向到另一个 service 方法中,最后将显示 final.jsp 页面。

<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>Spring Page Redirection

Spring Page Redirection

Click below button to redirect the result to new page

下面是 Spring 视图文件 final.jsp 的内容。这是最终的重定向页面。

<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>Spring Page Redirection

Redirected Page

最后,下面是包含在你的 web 应用程序中的 Spring 和其他库的列表。你仅仅需要将这些文件拖拽到 WebContent/WEB-INF/lib 文件夹中。

commons-logging-x.y.z.jar

org.springframework.asm-x.y.z.jar

org.springframework.beans-x.y.z.jar

org.springframework.context-x.y.z.jar

org.springframework.core-x.y.z.jar

org.springframework.expression-x.y.z.jar

org.springframework.web.servlet-x.y.z.jar

org.springframework.web-x.y.z.jar

spring-web.jar

一旦你完成了创建源代码和配置文件后,导出你的应用程序。右键单击你的应用程序,并且使用 Export > WAR File 选项,并且在 Tomcat 的 webapps 文件夹中保存你的 HelloWeb.war 文件。

现在启动你的 Tomcat 服务器,并且确保你能够使用标准的浏览器访问 webapps 文件夹中的其他 web 页面。现在尝试访问该 URL http://localhost:8080/HelloWeb/index。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

现在单击 “Redirect Page” 按钮来提交表单,并且得到最终的重定向页面。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

5.Spring 静态页面例子

Spring 静态页面例子

下面的例子说明了如何使用 Spring MVC 框架来编写一个简单的基于 web 的应用程序,它可以在 <mvc:resources> 标签的帮助下访问静态页面和动态页面。为了开始使用它,让我们在恰当的位置使用 Eclipse IDE,然后按照下面的步骤使用 Spring 的 Web 框架来开发一个动态的基于表单的 Web 应用程序:

步骤描述

1创建一个名称为 HelloWeb 的动态 Web 项目,并且在已创建的项目的 src 文件夹中创建一个包 com.tutorialspoint

2将上面提到的 Spring 和其他库拖拽到文件夹 WebContent/WEB-INF/lib 中。

3在 com.tutorialspoint 包下创建一个 Java 类 WebController

4在 WebContent/WEB-INF 文件夹下创建 Spring 的配置文件 Web.xml 和 HelloWeb-servlet.xml

5在 WebContent/WEB-INF 文件夹下创建名称为 jsp 的子文件夹。在这个子文件夹下创建一个视图文件 index.jsp

6在 WebContent/WEB-INF 文件夹下创建名称为 pages 的子文件夹。在这个子文件夹下创建一个静态文件 final.htm

7最后一步是创建所有的源代码和配置文件的内容,并导出该应用程序,正如下面解释的一样。

这里是 WebController.java 文件的内容:

packagecom.tutorialspoint;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;@ControllerpublicclassWebController{@RequestMapping(value ="/index", method = RequestMethod.GET)publicStringindex(){return"index";  }@RequestMapping(value ="/staticPage", method = RequestMethod.GET)publicStringredirect(){return"redirect:/pages/final.htm";  }}

下面是 Spring Web 配置文件 web.xml 的内容

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">Spring Page RedirectionHelloWeborg.springframework.web.servlet.DispatcherServlet1HelloWeb/

下面是另一个 Spring Web 配置文件 HelloWeb-servlet.xml 的内容

<?xml version="1.0"encoding="UTF-8"?>

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd">

在这里,<mvc:resources..../> 标签被用来映射静态页面。 mapping 属性必须是一个指定一个 http 请求的 URL 模式的 Ant 模式。 location 属性必须指定一个或者多个具有包含图片,样式表,JavaScript 和其他静态内容的静态页面的资源目录位置。多个资源位置可以使用逗号分隔这些值的列表来被指定。

下面是 Spring 视图文件 WEB-INF/jsp/index.jsp 的内容。这将是一个登陆页面,这个页面将发送一个请求来访问 staticPage 的 service 方法,它将重定向这个请求到 WEB-INF/pages 文件夹中的一个可用的静态页面。

<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>Spring Landing Page

Spring Landing Pag

Click below button to get a simple HTML page

下面是 Spring 视图文件 WEB-INF/pages/final.htm 的内容。

Spring Static Page

A simple HTML page

最后,下面是包含在你的 web 应用程序中的 Spring 和其他库的列表。你仅仅需要将这些文件拖拽到 WebContent/WEB-INF/lib 文件夹中。

commons-logging-x.y.z.jar

org.springframework.asm-x.y.z.jar

org.springframework.beans-x.y.z.jar

org.springframework.context-x.y.z.jar

org.springframework.core-x.y.z.jar

org.springframework.expression-x.y.z.jar

org.springframework.web.servlet-x.y.z.jar

org.springframework.web-x.y.z.jar

spring-web.jar

一旦你完成了创建源代码和配置文件后,导出你的应用程序。右键单击你的应用程序,并且使用 Export > WAR File 选项,并且在 Tomcat 的 webapps 文件夹中保存你的 HelloWeb.war 文件。

现在启动你的 Tomcat 服务器,并且确保你能够使用标准的浏览器访问 webapps 文件夹中的其他 web 页面。现在尝试访问该 URL http://localhost:8080/HelloWeb/index。 如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

单击 “Get HTML Page” 按钮来访问 staticPage 中的 service 方法中提到的一个静态页面。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

6.Spring 异常处理例子

Spring 异常处理例子

下面的例子说明了如何使用 Spring MVC 框架来编写一个简单的基于 web 的应用程序,它可以处理它的内置控制器产生的一个或多个异常。为了开始使用它,让我们在恰当的位置使用 Eclipse IDE,然后按照下面的步骤使用 Spring 的 Web 框架来开发一个动态的基于表单的 Web 应用程序:

步骤描述

1创建一个名称为 HelloWeb 的动态 Web 项目,并且在已创建的项目的 src 文件夹中创建一个包 com.tutorialspoint

2将上面提到的 Spring 和其他库拖拽到文件夹 WebContent/WEB-INF/lib 中。

3在 com.tutorialspoint 包下创建一个 Java 类 StudentStudentController 和 SpringException

4在 WebContent/WEB-INF 文件夹下创建 Spring 的配置文件 Web.xml 和 HelloWeb-servlet.xml

5在 WebContent/WEB-INF 文件夹下创建名称为 jsp 的子文件夹。在这个子文件夹下创建视图文件 student.jspresult.jsperror.jsp 和 ExceptionPage.jsp

6最后一步是创建所有的源代码和配置文件的内容,并导出该应用程序,正如下面解释的一样。

这里是 Student.java 文件的内容:

packagecom.tutorialspoint;publicclassStudent{privateInteger age;privateString name;privateInteger id;publicvoidsetAge(Integer age){this.age = age;  }publicIntegergetAge(){returnage;  }publicvoidsetName(String name){this.name = name;  }publicStringgetName(){returnname;  }publicvoidsetId(Integer id){this.id = id;  }publicIntegergetId(){returnid;  }}

下面是 SpringException.java 文件的内容:

packagecom.tutorialspoint;publicclassSpringExceptionextendsRuntimeException{privateString exceptionMsg;publicSpringException(String exceptionMsg){this.exceptionMsg = exceptionMsg;  }publicStringgetExceptionMsg(){returnthis.exceptionMsg;  }publicvoidsetExceptionMsg(String exceptionMsg){this.exceptionMsg = exceptionMsg;  }}

下面是 StudentController.java 文件的内容。这里,你需要使用 @ExceptionHandler 注解一个 service 方法,你可以指定要处理的一个或多个异常。如果你要指定一个以上的异常,那么你可以使用逗号分隔这些值。

packagecom.tutorialspoint;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.ExceptionHandler;importorg.springframework.web.bind.annotation.ModelAttribute;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.servlet.ModelAndView;importorg.springframework.ui.ModelMap;@ControllerpublicclassStudentController{@RequestMapping(value ="/student", method = RequestMethod.GET)publicModelAndViewstudent(){returnnewModelAndView("student","command",newStudent());  }@RequestMapping(value ="/addStudent", method = RequestMethod.POST)@ExceptionHandler({SpringException.class})publicStringaddStudent( @ModelAttribute("HelloWeb")Student student,      ModelMap model){if(student.getName().length() <5){thrownewSpringException("Given name is too short");      }else{      model.addAttribute("name", student.getName());      }if( student.getAge() <10){thrownewSpringException("Given age is too low");      }else{      model.addAttribute("age", student.getAge());      }      model.addAttribute("id", student.getId());return"result";  }}

下面是 Spring Web 配置文件 web.xml 的内容

    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">Spring Exception HandlingHelloWeborg.springframework.web.servlet.DispatcherServlet1HelloWeb/

下面是另一个 Spring Web 配置文件 HelloWeb-servlet.xml 的内容

http://www.springframework.org/schema/beans   

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context-3.0.xsd">

      SimpleMappingExceptionResolver">ExceptionPage

在这里,你指定 ExceptionPage 作为一个异常视图,以便 SpringException 发生,如果有任何其他类型的异常发生,那么一个通用的视图 error 会发生。

下面是 Spring 视图文件 student.jsp 的内容:

<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>Spring MVC Exception Handling

Student Information

NameAgeid

下面是 Spring 视图文件 error.jsp 的内容:

Spring Error Page

An error occured, please contact webmaster.

;

下面是 Spring 视图文件 ExceptionPage.jsp 的内容。在这里,你将通过 ${exception} 访问异常实例。

<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>Spring MVC Exception Handling

Spring MVC Exception Handling

${exception.exceptionMsg}

下面是 Spring 视图文件 result.jsp 的内容:

<%@tagliburi="http://www.springframework.org/tags/form"prefix="form"%>Spring MVC Form Handling

Submitted Student Information

Name${name}Age${age}ID${id}

最后,下面是包含在你的 web 应用程序中的 Spring 和其他库的列表。你仅仅需要将这些文件拖拽到 WebContent/WEB-INF/lib 文件夹中。

commons-logging-x.y.z.jar

org.springframework.asm-x.y.z.jar

org.springframework.beans-x.y.z.jar

org.springframework.context-x.y.z.jar

org.springframework.core-x.y.z.jar

org.springframework.expression-x.y.z.jar

org.springframework.web.servlet-x.y.z.jar

org.springframework.web-x.y.z.jar

spring-web.jar

一旦你完成了创建源代码和配置文件后,导出你的应用程序。右键单击你的应用程序,并且使用 Export > WAR File 选项,并且在 Tomcat 的 webapps 文件夹中保存你的 HelloWeb.war 文件。

现在启动你的 Tomcat 服务器,并且确保你能够使用标准的浏览器访问 webapps 文件夹中的其他 web 页面。现在尝试访问该 URL http://localhost:8080/SpringWeb/student。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

输入如上图所示的值,然后单击提交按钮。如果你的 Spring Web 应用程序一切都正常,你应该看到下面的结果:

7.Spring 使用 Log4J 记录日志

使用 Log4J 记录日志

在 Spring 应用程序中使用 Log4J 的功能是非常容易的。下面的例子将带你通过简单的步骤解释 Log4J 和 Spring 之间的简单集成。

假设你已经在你的机器上安装了 Log4J,如果你还没有 Log4J,你可以从 http://logging.apache.org/ 中下载,并且仅仅在任何文件夹中提取压缩文件。在我们的项目中,我们将只使用 log4j-x.y.z.jar

接下来,我们让 Eclipse IDE 在恰当的位置工作,遵循以下步骤,使用 Spring Web 框架开发一个基于 Web 应用程序的动态表单:

步骤描述

1创建一个名称为 SpringExample 的项目,并且在创建项目的 src 文件夹中创建一个包 com.tutorialspoint

2使用 Add External JARs 选项,添加所需的 Spring 库,解释见 Spring Hello World Example 章节。

3使用 Add External JARs 选项,同样在你的项目中添加 log4j 库 log4j-x.y.z.jar

4在 com.tutorialspoint 包下创建 Java 类 HelloWorld 和 MainApp

5在 src 文件中创建 Bean 配置文件 Beans.xml

6在 src 文件中创建 log4J 配置文件 log4j.properties

7最后一步是创建的所有 Java 文件和 Bean 配置文件的内容,并运行应用程序,解释如下所示。

这个是 HelloWorld.java 文件的内容:

packagecom.tutorialspoint;publicclassHelloWorld{privateString message;publicvoidsetMessage(String message){this.message  = message;  }publicvoidgetMessage(){      System.out.println("Your Message : "+ message);  }}

下面的是第二个文件 MainApp.java 的内容:

packagecom.tutorialspoint;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.apache.log4j.Logger;publicclassMainApp{staticLogger log = Logger.getLogger(MainApp.class.getName());publicstaticvoidmain(String[] args){      ApplicationContext context =newClassPathXmlApplicationContext("Beans.xml");      log.info("Going to create HelloWord Obj");      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");      obj.getMessage();      log.info("Exiting the program");  }}

使用与我们已经生成信息消息类似的方法,你可以生成调试错误消息。现在让我们看看 Beans.xml 文件的内容:

    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">         

下面是 log4j.properties 的内容,它定义了使用 Log4J 生成日志信息所需的标准规则:

# Define the root logger with appender filelog4j.rootLogger = DEBUG, FILE# Define the file appenderlog4j.appender.FILE=org.apache.log4j.FileAppender# Set the name of the filelog4j.appender.FILE.File=C:\\log.out#Set the immediate flush totrue(default)log4j.appender.FILE.ImmediateFlush=true# Set the threshold to debug modelog4j.appender.FILE.Threshold=debug# Set the append tofalse, overwritelog4j.appender.FILE.Append=false# Define the layoutforfile appenderlog4j.appender.FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.FILE.layout.conversionPattern=%m%n

一旦你完成了创建源和 bean 的配置文件后,我们就可以运行该应用程序。如果你的应用程序一切都正常,在 Eclipse 控制台将输出以下信息:

Your Message : Hello World!

同时如果你检查你的 C:\ 驱动,那么你应该发现含有各种日志消息的日志文件 log.out,其中一些如下所示:

Going to create HelloWord ObjReturning cached instance of singleton bean'helloWorld'Exiting the program

Jakarta Commons Logging (JCL) API

或者,你可以使用 Jakarta Commons Logging(JCL) API 在你的 Spring 应用程序中生成日志。JCL 可以从 http://jakarta.apache.org/commons/logging/ 下载。我们在技术上需要这个包的唯一文件是 commons-logging-x.y.z.jar 文件,需要使用与上面的例子中你使用 log4j-x.y.z.jar 类似的方法来把 commons-logging-x.y.z.jar 放在你的类路径中。

为了使用日志功能,你需要一个 org.apache.commons.logging.Log 对象,然后你可以根据你的需要调用任何一个下面的方法:

fatal(Object message)

error(Object message)

warn(Object message)

info(Object message)

debug(Object message)

trace(Object message)

下面是使用 JCL API 对 MainApp.java 的替换:

packagecom.tutorialspoint;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.apache.commons.logging. Log;importorg.apache.commons.logging. LogFactory;publicclassMainApp{staticLog log = LogFactory.getLog(MainApp.class.getName());publicstaticvoidmain(String[] args){      ApplicationContext context =newClassPathXmlApplicationContext("Beans.xml");      log.info("Going to create HelloWord Obj");      HelloWorld obj = (HelloWorld) context.getBean("helloWorld");      obj.getMessage();      log.info("Exiting the program");  }}

你应该确保在编译和运行该程序之前在你的项目中已经引入了 commons-logging-x.y.z.jar 文件。

现在保持在上面的例子中剩下的配置和内容不变,如果你编译并运行你的应用程序,你就会得到与使用 Log4J API 后获得的结果类似的结果。

上一篇下一篇

猜你喜欢

热点阅读