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

相关文章

来自专栏转载gongluck的CSDN博客

cocos2dx 打灰机

#include "GamePlane.h" #include "PlaneSprite.h" #include "BulletNode.h" #include...

5286
来自专栏Ceph对象存储方案

Luminous版本PG 分布调优

Luminous版本开始新增的balancer模块在PG分布优化方面效果非常明显,操作也非常简便,强烈推荐各位在集群上线之前进行这一操作,能够极大的提升整个集群...

3035
来自专栏落花落雨不落叶

canvas画简单电路图

58411
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

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

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2102
来自专栏魂祭心

原 canvas绘制clock

4004
来自专栏陈仁松博客

ASP.NET Core 'Microsoft.Win32.Registry' 错误修复

今天在发布Asp.net Core应用到Azure的时候出现错误InvalidOperationException: Cannot find compilati...

4798
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6588
来自专栏芋道源码1024

熔断器 Hystrix 源码解析 —— 断路器 HystrixCircuitBreaker

本文主要基于 Hystrix 1.5.X 版本 1. 概述 2. HystrixCircuitBreaker 3. HystrixCircuitBreaker....

5257
来自专栏杨龙飞前端

scrollto 到指定位置

2484

扫码关注云+社区