注解 springMVC

web.xml中配置servlet

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>@springmvc</display-name>
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

</web-app>

spring配置文件中配置组建扫描的包和视图解析器

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <!-- 配置扫描组件的包 -->
    <context:component-scan base-package="com.yawn.controller"></context:component-scan>
    
    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 使用InternalResourceViewResolver视图解析器时,不需要配置viewClass属性。默认支持JSTL -->
        <!-- <property name="viewClass" ></property> -->
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
    
</beans>

编写controller控制器,并加上注解

package com.yawn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class TestController {
    
    @RequestMapping("/start")
    private String start() {
        System.out.println(">>>>>>>>>>>>>>>>>>-------");
        return "start";
    }
    
}

@RequestMapping("")注解可以用在类或者方法,如上使用后,其访问的url为/springmvc/test/start.do

    返回的视图为:

/WEB-INF/pages/test/start.jsp

@PathVariable注解:

package com.yawn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
    
    @RequestMapping("/start/{name}/{age}")
    private String start(@PathVariable("name") String name, @PathVariable("age") String age) {
        
        System.out.println(">>>>>>>>>>>>>>>>>>-------" + name +" , " + age);
        
        return "start";
    }
    
}

请求/start/yawn/20.do,yawn就可以作为参数name的值,20就可以作为参数age的值。

根据请求方法(get、post)的不同,进行不同的处理:

package com.yawn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class TestController {
    
    @RequestMapping(value="/start", method=RequestMethod.GET)
    private String start() {
        
        System.out.println(">>>>>>>>>>>>>>>>>>-------get");
        
        return "start";
    }
    
    @RequestMapping(value="/start", method=RequestMethod.POST)
    private String postStart(){
        System.out.println("------------<<<<<<<<<<<<<<<<<<post");
        return "start";
    }
    
}

日期类型参数的注入和绑定:

package com.yawn.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
    
    @RequestMapping(value="/start/{date}")
    private String start(@PathVariable("date") Date date) { //注入日期对象的参数的绑定
        
        System.out.println(">>>>>>>>>>>>>>>>>>-------" + date);
        
        return "start";
    }
    
    @InitBinder
    private void initBinder(WebDataBinder binder){
        
        binder.registerCustomEditor(Date.class, 
                new CustomDateEditor(new SimpleDateFormat("yyyyMMdd"), false));
    }
    
}

@RequestParam 得到请求url中的参数:

package com.yawn.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class TestController {
    
    @RequestMapping(value="/start")
    private String start(@RequestParam("id") int id) {
        
        System.out.println(">>>>>>>>>>>>>>>>>>-------" + id);
        
        return "start";
    }
    
}

@CookieValue 和 @RequestHeader 得到cookie和请求的头信息:

package com.yawn.controller;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
    
    @RequestMapping(value="/start")
    private String start(@CookieValue("userName") String userName, @RequestHeader("user-Agent") String userAgent) {
        
        System.out.println(">>>>>>>>>>>>>>>>>>-------" + userName + userAgent);
        
        return "start";
    }
    
}

处理请求的方法可以接收的参数:

  1. request
  2. response
  3. session
  4. @RequestParam
  5. @PathVariable
  6. @CookieValue
  7. @RequestHeader
  8. 当需要输出信息时,可以用(PrintWriter out,Map model)
  9. 当提交登陆表单时,可以直接使用参数(User user,BindingResult result)实体模型和绑定结果。

处理请求方法返回值的类型:

  1. void: ①使用PrintWriter输出 ②自动从请求路径解析返回视图的逻辑名称
  2. String: viewName
  3. User : 返回模型,在页面可以用${user.name},${user.password}取出
  4. List<User> : 在页面可以通过${userList}取出来
  5. Map model : 返回模型(Model类是spring对Map的实现)
  6. ModelAndView:模型和视图(包含视图逻辑名称和一些键值对)

返回视图时重定向到另一个请求:

package com.yawn.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TestController {
    
    @RequestMapping(value="/start")
    private String start(@RequestHeader("user-Agent") String userAgent) {
        
        System.out.println(">>>>>>>>>>>>>>>>>>-------" + userAgent);
        
        return "redirect:/start_list";
    }
    
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Aloys的开发之路

Eclipse+Spark搭建源码分析环境问题分析

欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinn...

1724
来自专栏happyJared

Spring Boot中初始化资源的几种方式

  假设有这么一个需求,要求在项目启动过程中,完成线程池的初始化,加密证书加载等功能,你会怎么做?如果没想好答案,请接着往下看。今天介绍几种在Spring Bo...

1202
来自专栏玩转JavaEE

Spring Cloud中声明式服务调用Feign

前面几篇文章我们详细的介绍了Ribbon、RestTemplate、Hystrix组件,这些组件是我们Spring Cloud中非常基础的组件,小伙伴们在使用的...

69811
来自专栏ios 技术积累

Spring 常用注解

@Autowired它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。

1227
来自专栏Android 研究

Android跨进程通信IPC之5——Binder的三大接口

本片文章的主要目的是让大家对Binder有个初步的了解,既然是初步了解,肯定所是以源码上的注释为主,让大家对Binder有一个更直观的认识。PS:大部分注释我是...

1325
来自专栏一个会写诗的程序员的博客

SpringBoot集成日志logback.groovy报错: Groovy classes are not available on the class path. ABORTING INITIAL

SpringBoot集成日志logback.groovy报错: Groovy classes are not available on the class pa...

883
来自专栏jeremy的技术点滴

Spring Boot学习备忘

3064
来自专栏颇忒脱的技术博客

Spring MVC异步处理简介

本文讲到的所有特性皆是基于Servlet 3.0 Async Processing的,不是基于Servlet 3.1 Async IO的。

2053
来自专栏ImportSource

1.7分钟学会Spring Boot的CommandLineRunner

本文介绍一个非常酷的Spring Boot接口,名字叫做CommandLineRunner。 使用这个接口,你可以在Spring的Bean们以及Applica...

2796
来自专栏Ryan Miao

Spring Boot文档阅读

原因之初 最初习惯百度各种博客教程,然后跟着操作,因为觉得跟着别人走过的路走可以少走很多弯路,省时间。然而,很多博客的内容并不够完整,甚至错误,看多了的博客甚至...

5187

扫码关注云+社区