Spring-MVC初步-搭建一个web程序

MVC思想,即”MOD:模型”,”VIEW”:”视图”,”CONTROL”:”控制”分离的思想,其中MOD层用于处理数据,包括业务算法,数据持久层等的实现;VIEW层用于为用户显示数据,比如JSP或html页面等;CONTROL层用于连接MOD层和VIEW层,包括封装数据,渲染数据等.三个部分以最小的耦合协同工作,是构建现代web应用的一个重要思想

Spring-MVC
  • 1.结构
    从一个web请求开始到数据被展示到页面上,在springmvc应用中经历了如下过程

    • 1.浏览器发起请求(携带请求数据)
    • 2.DispatcherServlet(前端控制器)拦截请求
    • 3.DispatcherServlet(前端控制器)查询控制器映射,将请求转发到对应的控制器
    • 4.控制器处理请求,返回模型数据和要渲染的视图名到DispathcerServlet
    • 5.DispatcherServlet使用视图解析器将逻辑视图名解析为一个实现
    • 6.视图渲染数据,展示给用户
  • 2.组件

    • 1.DispatcherServlet(前端控制器)
      用于处理springMVC应用中的请求,通过查询控制器映射将请求转发给控制器

    • 2.Controller(控制器)
      用于处理请求中携带的信息(url,表单等)

    • 3.视图解析器
      确定用于渲染模型的视图

  • 3.配置
    同依赖注入一样,springMVC项目中各个组件的配置方法也不只有一种,这里记录XML文件配置方法

    • 1.DispatcherServlet配置
      实际上DispatcherServlet的配置与普通的Servlet配置方法大同小异,都是要在Web.xml中配置<Servlet><Servlet-mapping>标签,不同的是,在配置DispatcherServlet的路径时,有以下几种格式

      • ”*.xxx”格式:
        <servlet>
            <servlet-name>dispatcher</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            <load-on-startup>1</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>

      当这样配置时,所有后缀为”*.xxx”的路径都会被DispatcherServlet拦截,对于其他路径则没有影响(例如html页面,图片,css,script资源等)

      • “/”格式:

        ```xml
        <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>*.do</url-pattern>
        </servlet-mapping>
        ```
        

        对于这种配置方法,所有的路径都会被DispatcherServlet拦截,包括对于静态资源的访问,如果想要正常访问静态资源,必须在配置文件中对于静态资源访问进行配置

    • Controller控制器的配置

      • 1.开启组件扫描
        applicationContext.xml或者Dispatcher对应的配置文件中加入

        <context:component-scan base-package="包名">

        开启自动扫描

      • 2.编写控制器
        @Controller注解类用于声明一个控制器,用@RequestMapping("路径名")来注解控制器类和方法
        例如:

      package Controller;
      import jdk.nashorn.internal.ir.RuntimeNode;
      import mod.Person;
      import net.sf.json.JSONObject;
      import org.springframework.context.annotation.ComponentScan;
      import org.springframework.stereotype.Controller;
      import org.springframework.ui.Model;
      import org.springframework.validation.Errors;
      import org.springframework.validation.annotation.Validated;
      import org.springframework.web.bind.annotation.RequestMapping;
      import org.springframework.web.bind.annotation.RequestMethod;
      import org.springframework.web.bind.annotation.ResponseBody;
      import javax.servlet.http.HttpServletRequest;
      @Controller
      @RequestMapping("/")
      public class IndexController {
          @RequestMapping(value="hello.do",produces = "application/json; charset=utf-8")
          @ResponseBody
          public String getJson(HttpServletRequest request){
              String name = request.getParameter("name");
              String age = request.getParameter("age");
              String body = request.getParameter("boy");
              JSONObject obj = new JSONObject();
              obj.put("name",name);
              obj.put("age",age);
              obj.put("boy",body);
              System.out.println(obj.toString());
              return obj.toString();
          }
          @RequestMapping(value="register.do",method = RequestMethod.GET,produces = "application/json;charset=utf-8")
          public String register(Model model){
              model.addAttribute(new Person());
              return "register";
          }
          @RequestMapping(value="register.do",method = RequestMethod.POST,produces = "application/json;charset=utf-8")
          @ResponseBody
          public String register(Person person,Errors errors){
              return person.getName();
          }
      }
      • 3.开启注解
        applicationContext.xml或者Dispatcher对应的配置文件中加入
      <mvc:annotation-driven/>

      开启注解

    • ViewResolver视图解析器的配置
      springMVC框架有多个视图解析器,这里使用InternalResourceViewResolver解析器用于渲染jsp页面,在applicationContext.xml或者Dispatcher对应的配置文件中加入

      <bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver">
          <property name="prefix" value="/WEB-INF/view/"/>
          <property name="suffix" value=".jsp"/>
      </bean>

      配置视图解析器组件

    • 结果展示
      jsp页面如下

      <%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="utf-8" %>
      <html>
      <head>
          <title>Title</title>
          <%@ taglib uri="http://www.springframework.org/tags/form" prefix="sf"%>
      </head>
      <body>
      <sf:form method="POST" commandName="person">
          Name: <sf:input path="name"/><br/>
          Age: <sf:input path="age"/><br/>
          Sex: <sf:input path="sex"/><br/>
          <input type="submit" value="Register"/>
      </sf:form>
      </body>
      </html>

      提交表单后,数据被封装为一个Person类

      package mod;
      import com.sun.istack.internal.NotNull;
      public class Person {
          public Person(String name, Integer age, String sex) {
              this.name = name;
              this.age = age;
              this.sex = sex;
          }
          public Person(){
          }
          public String getName() {
              return name;
          }
          public void setName(String name) {
              this.name = name;
          }
          public Integer getAge() {
              return age;
          }
          public void setAge(Integer age) {
              this.age = age;
          }
          public String getSex() {
              return sex;
          }
          public void setSex(String sex) {
              this.sex = sex;
          }
          @NotNull()
          private String name;
          @NotNull
          private Integer age;
          @NotNull
          private String sex;
      }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值