发表于: 2017-06-12 21:41:30

1 1084


今天完成的事情:springmvc的学习

1.什么是SpringMVC?

   Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。

    Spring mvc是一个基于mvc的web框架。spring mvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合。


2.Spring MVC的请求流程:

    第一步:发起请求到前端控制器(DispatcherServlet)

    第二步:前端控制器请求HandlerMapping查找Handler可以根据xml配置、注解进行查找

    第三步:处理器映射器HandlerMapping向前端控制器返回Handler

    第四步:前端控制器调用处理器适配器去执行Handler

    第五步:处理器适配器去执行Handler

    第六步:Handler执行完成给适配器返回ModelAndView

    第七步:处理器适配器向前端控制器返回ModelAndView。ModelAndView是springmvc框架的一个底层对象,包括 Model和view

    第八步:前端控制器请求视图解析器去进行视图解析,根据逻辑视图名解析成真正的视图(jsp)

    第九步:视图解析器向前端控制器返回View

    第十步:前端控制器进行视图渲染。视图渲染将模型数据(在ModelAndView对象中)填充到request域

    第十一步:前端控制器向用户响应结果


3.SpringMVC优势

    清晰的角色划分:前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器(   Validator)、命令对象(Command  请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。

    分工明确,而且扩展点相当灵活,可以很容易扩展,虽然几乎不需要;

    由于命令对象就是一个POJO,无需继承框架特定API,可以使用命令对象直接作为业务对象;

    和Spring 其他框架无缝集成,是其它Web框架所不具备的;

    可适配,通过HandlerAdapter可以支持任意的类作为处理器;

    可定制性,HandlerMapping、ViewResolver等能够非常简单的定制;

    功能强大的数据验证、格式化、绑定机制;

    利用Spring提供的Mock对象能够非常简单的进行Web层单元测试;

    本地化、主题的解析的支持,使我们更容易进行国际化和主题的切换。

    强大的JSP标签库,使JSP编写更容易。


4.必需的配置

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

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        version="3.1">
        <display-name>Spring MVC Application</display-name>
   <servlet>
       <servlet-name>HelloWeb</servlet-name>
       <servlet-class>
           org.springframework.web.servlet.DispatcherServlet
</servlet-class>
       <load-on-startup>1</load-on-startup>
   </servlet>
   <servlet-mapping>
       <servlet-name>HelloWeb</servlet-name>
       <url-pattern>*.jsp</url-pattern>
   </servlet-mapping>
</web-app>

web.xml文件将保存Web应用程序的WebContent/WEB-INF目录。在HelloWeb DispatcherServlet初始化时,框架将尝试从位于应用程序的WebContent/WEB-INF目录中的名为[servlet-name]-servlet.xml的文件加载应用程序上下文。在这个示例中,使用的文件将是HelloWeb-servlet.xml。

接下来,<servlet-mapping>标记指示哪些URL将由DispatcherServlet处理。 这里所有以.jsp结尾的HTTP请求都将由HelloWeb DispatcherServlet处理。

如果不想使用默认文件名为[servlet-name]-servlet.xml和默认位置为WebContent/WEB-INF,可以通过在web.xml文件中添加servlet侦听器ContextLoaderListener来自定义此文件名和位置 如下:

<web-app...>
<!-------- DispatcherServlet definition goes here----->
....
<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目录中:

<beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:context="http://www.springframework.org/schema/context"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="
  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">
<context:component-scan base-package="com.yiibai" />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
   <property name="prefix" value="/WEB-INF/jsp/" />
   <property name="suffix" value=".jsp" />
</bean>
</beans>

以下是有关HelloWeb-servlet.xml文件的重点说明:

[servlet-name]-servlet.xml文件将用于创建定义的bean,它会覆盖在全局范围中使用相同名称定义的任何bean的定义。

<context:component-scan ...>标签将用于激活Spring MVC注释扫描功能,允许使用@Controller和@RequestMapping等注释。

InternalResourceViewResolver将定义用于解析视图名称的规则。根据上面定义的规则,hello的逻辑视图将委托给位于/WEB-INF/jsp/hello.jsp这个视图来实现。

下一节将演示如何创建实际组件。即:控制器,模型和视图。


5.定义控制器

DispatcherServlet将请求委派给控制器以执行特定于其的功能。 @Controller注释指示特定类充当控制器的角色。@RequestMapping注释用于将URL映射到整个类或特定处理程序方法。

@Controller
@RequestMapping("/hello")
public class HelloController{
@RequestMapping(method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}

@Controller注释将类定义为Spring MVC控制器。这里@RequestMapping的第一个用法表示此控制器上的所有处理方法都与/hello路径相关。 下一个注释@RequestMapping(method = RequestMethod.GET)用于声明printHello()方法作为控制器的默认服务方法来处理HTTP GET请求。可以定义另一个方法来处理同一URL的任何POST请求。

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

@Controller
public class HelloController{
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String printHello(ModelMap model) {
model.addAttribute("message", "Hello Spring MVC Framework!");
return "hello";
}
}

value属性指示处理程序方法映射到的URL,method属性定义处理HTTP GET请求的服务方法。关于以上定义的控制器,需要注意以下几点:

在服务方法中定义所需的业务逻辑。可以根据需要在此方法内调用其他方法。

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

定义的服务方法可以返回一个String,它包含要用于渲染模型的视图的名称。此示例将“hello”返回为逻辑视图名称。


6.创建JSP视图

Spring MVC支持许多类型的视图用于不同的表示技术。包括 - JSP,HTML,PDF,Excel工作表,XML,Velocity模板,XSLT,JSON,Atom 和 RSS 源,JasperReports等。但最常见的是使用JSPL编写的JSP模板,这里使用的是JSP模板,并在/WEB-INF/hello/hello.jsp中写一个简单的hello视图:

<html>

   <head>

   <title>Hello Spring MVC</title>

   </head>

   <body>

   <h2>${message}</h2>

   </body>

</html>

Java

这里${message}是在Controller中设置的属性。可以在视图中显示多个属性。

明天计划的事情:继续任务二

遇到的问题:对springmvc不是很熟

收获:springmvc跑了个流程。


返回列表 返回列表
评论

    分享到