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

相关文章

来自专栏Java后端技术

在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

  最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法。

744
来自专栏Android随笔

JNI入门笔记-编译和使用so文件

5.2. 创建*.c文件,文件名可根据你的业务逻辑进行命名即可。然后把生成的.h文件里面的方法在这里进行实现,这里只是打印一下日志

611
来自专栏牛肉圆粉不加葱

Spark Task 的执行流程② - 创建、分发 Task

task 的创建本应该放在分配 tasks 给 executors一文中进行介绍,但由于创建的过程与分发及之后的反序列化执行关系紧密,我把这一部分内容挪到了本文...

541
来自专栏A周立SpringCloud

如何使用Feign构造多参数的请求

最近经常有人在Spring Cloud中国社区(http://springcloud.cn)QQ群(157525002)里问到该问题。索性整理一下。 本节我们来...

4325
来自专栏张善友的专栏

初始化任务Bootstrapper

每个应用程序都需要在启动的时候做些初始化任务,在退出的时候做些清理工作,这类任务被归为Bootstrapper,在codeplex上的开源项目,详见 http:...

1785
来自专栏海天一树

小朋友学Java(12):包

包(package)是Java语言提供的一种区别类名字命名空间的机制,它是类的一种文件组织和管理方式、是一组功能相似或相关的类或接口的集合。Java packa...

2676
来自专栏Dawnzhang的开发者手册

@Controller和@RestController的区别?

1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalRes...

833
来自专栏Hadoop实操

Avro序列化&反序列化和Spark读取Avro数据

本篇文章主要讲如何使用java生成Avro格式数据以及如何通过spark将Avro数据文件转换成DataSet和DataFrame进行操作。

7959
来自专栏自动化测试实战

接口测试框架——第四篇

3515
来自专栏ASP.NETCore

.NET Core中使用Razor模板引擎

 在MVC以外的场景中,我们往往需要完成一些模板引擎生成代码或页面的工作;在以前我们一般常用的有Razor、NVeocity、VTemplate。虽然所有的模...

603

扫码关注云+社区