注解 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 条评论
登录 后参与评论

相关文章

来自专栏osc同步分享

springMVC

springmvc中有专用于页面跳转的controller,不会对请求做任何处理,直接跳转页面:     <!-- 对处理请求的controller进行映射 -...

1924
来自专栏爱撒谎的男孩

Springmvc之向JSP页面提供数据(request,session)

3234
来自专栏zhisheng

看透 Spring MVC 源代码分析与实践 —— Spring MVC 组件分析

组件概览 HandlerMapping 根据 request 找到对应的处理器 Handler 和 Interceptors。内部只有一个方法 Handler...

2748
来自专栏Web项目聚集地

自己手写一个Spring MVC框架

Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。

813
来自专栏james大数据架构

JQuery实现仿sina新浪微博新鲜事滚动

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.or...

1727
来自专栏xingoo, 一个梦想做发明家的程序员

【Spring实战】—— 6 内部Bean

本篇文章讲解了Spring的通过内部Bean设置Bean的属性。   类似内部类,内部Bean与普通的Bean关联不同的是:   1 普通的Bean,在其...

1857
来自专栏Java技术栈

从 0 开始手写一个 Spring MVC 框架,向高手进阶!

Spring框架对于Java后端程序员来说再熟悉不过了,以前只知道它用的反射实现的,但了解之后才知道有很多巧妙的设计在里面。如果不看Spring的源码,你将会失...

622
来自专栏面朝大海春暖花开

springMVC接受对象集合,name数组

这两天开发遇到一个很常见的问题,即使自己一直没遇见过,不过之前看过是实现接受对象集合的代码,只不过没注意罢了

772
来自专栏java沉淀

java实现Excel导入实战篇(迭代二)

793
来自专栏菩提树下的杨过

spring mvc4的日期/数字格式化、枚举转换

日期、数字格式化显示,是web开发中的常见需求,spring mvc采用XXXFormatter来处理,先看一个最基本的单元测试:

373

扫描关注云+社区