Springmvc详解

Springmvc

SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。

web.xml配置

 <!--Springmvc 核心控制器 -->
      <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

applicationcontext.xml

<!--上下文注解-->  
<context:annotation-config />  
<!--扫描相应的包-->  
<context:component-scan base-package="com.kxind.biz,com.kxind.controller" />

<!-- 配置框架提供的视图解析器 -->  
    <bean id="internalResourceViewResolver"     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

这样一个很简单的Springmvc就弄好了.接下来看如何使用吧.个人觉得比struts好用,就像servlet差不多..

controller 接收参数

  • 根据参数名自动匹配
public String update (int goodsid)  

update.html?goodsid=1,接收goodsid=1的值.

  • 在方法中直接使用的ServletAPI

  • 实体类中自动装箱

public String update (Goods good)  

接收的参数必须和Goods对象的属性一致.会根据名字匹配自动装箱到Goods中去

  • public String update (@RequestParam("goodsId")int id)

    接收一个goodsId的值存入id变量里

  • RequestMapping("/{id}.html")
    public String show(@pathVariable int id)
    将路径当中的值 存入id变量

页面跳转

  • 默认为转发给视图解析器解析路径.

  • 重定向到其他页面 或者controller rediret:/ok.jsp或者redirect:/ok.html

  • 转发: forward:/ok.jsp或者/ok.html(controller中)

数据传递:(作用域中存储数据)

  • 使用serlvetApI中先数据传递
 public String test(HttpServletRequest request){
       request.setAttri("test","test") 
        return "test"
      }
  • 使用Springmvc的Model/map
public String test(Model model,Map<String,String> map){  
              Model.addAttribute("modeldate","model放的数据");
              map.put("mapdate","map放的数据")
        return "test"
      }
     ${modeldate }
     ${mapdate }
  • 使用Springmvc的ModelAndView
  @RequestMapping(value="/index2",method=RequestMethod.GET)  
    public ModelAndView index2(){  
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.addObject("name", "xxx");  
        modelAndView.setViewName("/user/index");  
        return modelAndView;  
    }  
    //返回的是一个包含模型和视图的ModelAndView对象;
   //setViewName是添加的视图,给视图解析器
  //Object给Model放值.
// /user/index这是restful式风格。 

文件上传

//applicationContext.xml
<bean id="multipartResolver"    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>  
//执行代码
   @RequestMapping("/fileup.html")
  public String fileup(Goods good,
   @RequestParam("goodsImg")MultipartFile goodsImg,
   HttpServletRequest request
){       try{
          goodsImg.transferTo(new File(request.getServletContext().getRealPath("/img/"+goodsImg.getOriginalFilename()))); 

       }catch (Exception e){
           e.printStackTrace();
       }

    return "ok";  
   }

中文处理

使用Springmvc提供的过滤器.

 <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
            </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>

SpringMVC常用的注解

Springmvc

SpringMVC是Spring中的模块,它实现了mvc设计模式的web框架,首先用户发出请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handler,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handler进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染并把数据装入到request域,返回给用户。

web.xml配置

 <!--Springmvc 核心控制器 -->
      <servlet>
        <servlet-name>DispatcherServlet</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:applicationContext.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>DispatcherServlet</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

applicationcontext.xml

<!--上下文注解-->  
<context:annotation-config />  
<!--扫描相应的包-->  
<context:component-scan base-package="com.kxind.biz,com.kxind.controller" />

<!-- 配置框架提供的视图解析器 -->  
    <bean id="internalResourceViewResolver"     class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

这样一个很简单的Springmvc就弄好了.接下来看如何使用吧.个人觉得比struts好用,就像servlet差不多..

controller 接收参数

  • 根据参数名自动匹配
public String update (int goodsid)  

update.html?goodsid=1,接收goodsid=1的值.

  • 在方法中直接使用的ServletAPI

  • 实体类中自动装箱

public String update (Goods good)  

接收的参数必须和Goods对象的属性一致.会根据名字匹配自动装箱到Goods中去

  • public String update (@RequestParam("goodsId")int id)

    接收一个goodsId的值存入id变量里

  • RequestMapping("/{id}.html")
    public String show(@pathVariable int id)
    将路径当中的值 存入id变量

页面跳转

  • 默认为转发给视图解析器解析路径.

  • 重定向到其他页面 或者controller rediret:/ok.jsp或者redirect:/ok.html

  • 转发: forward:/ok.jsp或者/ok.html(controller中)

数据传递:(作用域中存储数据)

  • 使用serlvetApI中先数据传递
 public String test(HttpServletRequest request){
       request.setAttri("test","test") 
        return "test"
      }
  • 使用Springmvc的Model/map
public String test(Model model,Map<String,String> map){  
              Model.addAttribute("modeldate","model放的数据");
              map.put("mapdate","map放的数据")
        return "test"
      }
     ${modeldate }
     ${mapdate }
  • 使用Springmvc的ModelAndView
  @RequestMapping(value="/index2",method=RequestMethod.GET)  
    public ModelAndView index2(){  
        ModelAndView modelAndView = new ModelAndView();  
        modelAndView.addObject("name", "xxx");  
        modelAndView.setViewName("/user/index");  
        return modelAndView;  
    }  
    //返回的是一个包含模型和视图的ModelAndView对象;
   //setViewName是添加的视图,给视图解析器
  //Object给Model放值.
// /user/index这是restful式风格。 

文件上传

//applicationContext.xml
<bean id="multipartResolver"    class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>  
//执行代码
   @RequestMapping("/fileup.html")
  public String fileup(Goods good,
   @RequestParam("goodsImg")MultipartFile goodsImg,
   HttpServletRequest request
){       try{
          goodsImg.transferTo(new File(request.getServletContext().getRealPath("/img/"+goodsImg.getOriginalFilename()))); 

       }catch (Exception e){
           e.printStackTrace();
       }

    return "ok";  
   }

中文处理

使用Springmvc提供的过滤器.

 <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
            </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>

Springmvc常用的注解

  • @Controller

@Constroller 通常作用在控制层,但是目前该功能与@Component 相同,负责注册一个bean 到spring 上下文中。

@Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。

@Service 通常作用在业务层,但是目前该功能与 @Component 相同。

@@Repository作用在dao层,功能与@Component相同  

  • @RequestMapping

      注解为控制器指定可以处理哪些 URL 请求

  • @RequestBody

      该注解用于读取Request请求的body部分数据,使用系统默认配置的HttpMessageConverter进行解析,然后把相应的数据绑定到要返回的对象上 ,再把HttpMessageConverter返回的对象数据绑定到 controller中方法的参数上

  • @ResponseBody
  @ResponseBody
   @RequestMapping(value="/testjson.html",method = RequestMethod.GET)
   public String handle( String body){

       return  "hello World!";
   }

//页面输出Hello World!,常用于JSON传递

   * @ModelAttribute    

  在方法定义上使用 @ModelAttribute 注解:Spring MVC 在调用目标处理方法前,会先逐个调用在方法级上标注了@ModelAttribute 的方法

  在方法的入参前使用 @ModelAttribute 注解:可以从隐含对象中获取隐含的模型数据中获取对象,再将请求参数 –绑定到对象中,再传入入参将方法入参对象添加到模型中

   * @RequestParam 

  传递请求参数

   * @PathVariable

  把maping的参数写到上面去.

kxind

性别:男. 敢于尝试 爱折腾的死宅程序猿. https://github.com/kxinds