zoukankan      html  css  js  c++  java
  • spring(五)spring web MVC

    原教程: https://www.w3cschool.cn/wkspring/

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

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

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

    DispatcherServlet

    spring MVC是围绕DispatcherServlet 设计的,DispatcherServlet 用来处理所有的 HTTP 请求和响应。

    DispatcherServlet 接收到HTTP请求后:

    • DispatcherServlet 根据 HandlerMapping 来选择并且调用适当的控制器
    • 控制器接受请求,并基于使用的 GET 或 POST 方法来调用适当的 service 方法。并返回视图名称到 DispatcherServlet 中。

    • DispatcherServlet 会从 ViewResolver 为请求检取定义视图。

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

    框架的使用

    1. DispatcherServlet配置

     1 // WebContent/WEB-INF/web.xml
      <web-app id="WebApp_ID" version="2.4" 2 xmlns="http://java.sun.com/xml/ns/j2ee" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 5 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 6 <display-name>Spring MVC Application</display-name> 7 <servlet> 8 <servlet-name>HelloWeb</servlet-name> 9 <servlet-class> 10 org.springframework.web.servlet.DispatcherServlet 11 </servlet-class> 12 <load-on-startup>1</load-on-startup> 13 </servlet> 14 <servlet-mapping> 15 <servlet-name>HelloWeb</servlet-name> 16 <url-pattern>*.jsp</url-pattern> 17 </servlet-mapping> 18 </web-app>
    • 在初始化HelloWeb DispatcherServlet时,框架会尝试加载WebContent/WEB-INF/[servlet-name]-servlet.xml文件,此处改文件为HelloWeb-servlet.xml.
    • <url-pattern>指定该servlet服务的对象,此处是只用于处理jsp文件的请求
    • 默认[servlet-name]-servlet.xml文件的更名
      • 在 web.xml 文件中添加 servlet 监听器 ContextLoaderListener 自定义该文件的名称和位置
      • <param-value>中指定新名字
     1 // web.xml
     2 <web-app...>
     3 
     4 ....
     5 <context-param>
     6    <param-name>contextConfigLocation</param-name>
     7    <param-value>/WEB-INF/HelloWeb-servlet.xml</param-value>
     8 </context-param>
     9 <listener>
    10    <listener-class>
    11       org.springframework.web.context.ContextLoaderListener
    12    </listener-class>
    13 </listener>
    14 </web-app>
    15 
    16 // WebContent/WEB-INF/HelloWeb-servlet.xml
    17 <beans xmlns="http://www.springframework.org/schema/beans"
    18    xmlns:context="http://www.springframework.org/schema/context"
    19    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    20    xsi:schemaLocation="
    21    http://www.springframework.org/schema/beans
    22    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    23    http://www.springframework.org/schema/context 
    24    http://www.springframework.org/schema/context/spring-context-3.0.xsd">
    25 
    26    <context:component-scan base-package="com.tutorialspoint" />
    27 
    28    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    29       <property name="prefix" value="/WEB-INF/jsp/" />
    30       <property name="suffix" value=".jsp" />
    31    </bean>
    32 
    33 </beans>

    <context:component-scan>用于激活spring MVC注释扫描功能,如@Controller和@RequestMapping等

    InternalResourceViewResolver定义了检索视图的规则。一个名称为 hello 的逻辑视图将发送给位于 /WEB-INF/jsp/hello.jsp

    2. 定义控制器

    • 控制器声明:@Controller注解一个类,表示该类是一个控制器类
    • @RequestMapping用于映射URL到整个类或者某个方法

    示例1:

    1 @Controller
    2 @RequestMapping("/hello")
    3 public class HelloController{
    4    @RequestMapping(method = RequestMethod.GET)
    5    public String printHello(ModelMap model) {
    6       model.addAttribute("message", "Hello Spring MVC Framework!");
    7       return "hello";
    8    }
    9 }
    • @Controller 注释定义该类作为一个 Spring MVC 控制器。
    • 第一次使用的 @RequestMapping 表明在该控制器中处理的所有方法都是相对于 /hello 路径的。
    • 下一个注释 @RequestMapping(method = RequestMethod.GET) 用于声明 printHello() 方法作为控制器的默认 service 方法来处理 HTTP GET 请求。

    示例2:

    1 @Controller
    2 public class HelloController{
    3    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    4    public String printHello(ModelMap model) {
    5       model.addAttribute("message", "Hello Spring MVC Framework!");
    6       return "hello";
    7    }
    8 }
    • 在此service 方法中定义需要的业务逻辑,也可以根据需要调用其他方法
    • 在此方法中创建一个模型,模型属性可以随便设置,设置的属性可以在视图层(jsp文件)中通过${}显示属性值。如${message}
    • 此service 方法可以返回一个包含视图名称的字符串用于呈现该模型。这个示例返回 “hello” 作为逻辑视图的名称。

    3. 创建jsp视图

    spring mvc支持的视图有很多,比如JSP、HTML、PDF、Excel 工作表、XML、Velocity 模板、XSLT、JSON、Atom 和 RSS 提要、JasperReports 等等

    1 // hello.jsp
    2 <html>
    3    <head>
    4    <title>Hello Spring MVC</title>
    5    </head>
    6    <body>
    7    <h2>${message}</h2>
    8    </body>
    9 </html>

    spring mvc的标配文件

    • 注解类及service方法
    • web.xml (配置servlet)
    • [servlet-name]-servlet.xml
    • jsp视图文件

    spring mvc表单的处理

    • 用@Controller声明控制器,并在其中定义GET或POST service方法,方法用@RequestMapping(value = "/方法名", method = RequestMethod.POST)来注解
    • GET或POST service方法中建立模型,并设置模型属性(如表单内容),然后返回视图名称字符串(一般是jsp文件名)
    • web.xml中用DispatcherServlet定新的servlet
    • [servlet-name]-servlet.xml中定义ViewResolver bean(代码固定)
    • 编写jsp视图文件(可展示service方法中的模型属性)

    注意表单文件中action的路径问题,一般是servlet-name/service方法名

    每个service方法都与一个网页页面关联

    spring mvc页面重定向

     1 @Controller
     2 public class WebController {
     3    @RequestMapping(value = "/index", method = RequestMethod.GET)
     4    public String index() {
     5        return "index";
     6    }   
     7    @RequestMapping(value = "/redirect", method = RequestMethod.GET)
     8    public String redirect() {     
     9       return "redirect:finalPage";
    10    }   
    11    @RequestMapping(value = "/finalPage", method = RequestMethod.GET)
    12    public String finalPage() {     
    13       return "final";
    14    }
    15 }
  • 相关阅读:
    用户调查报告
    beta冲刺总结
    beta冲刺第七天
    beta冲刺第六天
    beta冲刺第五天
    beta冲刺第四天
    beta冲刺第三天
    beta冲刺第二天
    beta冲刺第一天
    简单的密码管理器(Python)(待完善)
  • 原文地址:https://www.cnblogs.com/yfs123456/p/10669671.html
Copyright © 2011-2022 走看看