Spring MVC 基础注解之@RequestMapping、@Controller、(二)

我现在学的是spring4.2

今天主要学习了Spring MVC注解 

引入注解可以减少我们的代码量,优化我们的代码。

@Controller:用于标识是处理器类;

@RequestMapping:请求到处理器功能方法的映射规则;

还是以示例来解释说明

 

1 创建springAnnotation02项目,导入jar包。

   这里的web.xml

<?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" id="WebApp_ID" version="3.0">
  <display-name>springmvc01</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

<!-- 前端控制器 -->
  <servlet>
    <servlet-name>springAnnotation</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<!-- 默认情况下:DispatcherServlet会寻找WEB-INF下,命名规范为[servlet-name]-servlet.xml文件。如:在上例中,它就会找/WEB-INF/spring-servlet.xml
                    如果需要修改,需要在web.xml中的<servlet>标记中增加 <init-param>。。。  </init-param>:-->
    <init-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>/WEB-INF/classes/springAnnotation-servlet.xml</param-value>
    </init-param>

<!-- load-on-startup:表示启动容器时初始化该Servlet; -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springAnnotation</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

  <!-- 动态设置项目的运行路径 -->
    <context-param>
        <param-name>webAppRootKey</param-name>
        <param-value>spring.root</param-value>
    </context-param>

    <!-- 加载LOG4J -->
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>/WEB-INF/log4j.xml</param-value>
    </context-param>

    <context-param>
        <param-name>log4jRefreshInterval</param-name>
        <param-value>60000</param-value>
    </context-param>

  <!-- spring Web MVC框架提供了org.springframework.web.filter.CharacterEncodingFilter
用于解决POST方式造成的中文乱码问题 -->
<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>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- 启动log4j日志管理 -->
    <listener>
        <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
    </listener>
</web-app>

 

由于要使用SpringMVC注解,所以springAnnotation-servlet.xml文件需要增加springmvc的标记命名空间。

未使用SpringMVC注解时:

  

1 <beans xmlns="http://www.springframework.org/schema/beans"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xmlns:context="http://www.springframework.org/schema/context"
4 xsi:schemaLocation=
5 "http://www.springframework.org/schema/beans
6 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
7 http://www.springframework.org/schema/context
8 http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

 修改过后的springAnnotation-servlet.xml。

 

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation=
"http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

 

 

使用Spring mvc注解时一个完整的springAnnotation-servlet.xml配置如下:

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4 xmlns:context="http://www.springframework.org/schema/context"
 5 xmlns:mvc="http://www.springframework.org/schema/mvc"
 6 xsi:schemaLocation=
 7   "http://www.springframework.org/schema/beans
 8    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
 9    http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-3.0.xsd
10    http://www.springframework.org/schema/mvc
11    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
12
13 <!--开启注解  -->
14 <mvc:annotation-driven />
15
16 <!--启用自动扫描  -->
17 <context:component-scan base-package="com.cy.springannotation.controller" />
18
19 <!--配置视图解析器  -->
20     <!-- ViewResolver 视图解析器 用于将返回的ModelAndView对象进行分离
21     InternalResourceViewResolver:用于支持Servlet、JSP视图解析;
22        viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,classpath中必须包含jstl的相关jar包;
23        prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),
24        比如传进来的逻辑视图名为WEB-INF/jsp/hello,则该该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”; -->
25
26 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
27      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
28      <property name="prefix" value="/"></property> <!-- 我这里的视图直接放在WebRoot下的 -->
29      <property name="suffix" value=".jsp"></property>
30 </bean>
31
32 <!-- 为何不配置HandlerMapping?因为基于注解时,会自动使用DefaultAnnotationHandlerMapping -->
33
34 </beans>

 

    接下来,我们完成一个最简单的通过控制实现页面间的跳转。

  一个有提交的页面

 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
 2 <%
 3 String path = request.getContextPath();
 4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
 5 %>
 6
 7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 8 <html>
 9   <head>
10     <base href="<%=basePath%>">
11
12     <title>登录页面</title>
13
14     <meta http-equiv="pragma" content="no-cache">
15     <meta http-equiv="cache-control" content="no-cache">
16     <meta http-equiv="expires" content="0">
17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
18     <meta http-equiv="description" content="This is my page">
19     <!--
20     <link rel="stylesheet" type="text/css" href="styles.css">
21     -->
22
23   </head>
24
25   <body>
26   <form action="login.do" method="post">
27     <table>
28        <tr>
29            <td>用户名:</td>
30            <td><input type="text" name="username"/></td>
31        </tr>
32        <tr>
33            <td>班级</td>
34            <td><input type="text" name="clazz"/></td>
35        </tr>
36        <tr>
37            <td colspan="2"> <input type="submit" value="提交"/> </td>
38        </tr>
39     </table>
40   </form>
41   </body>
42 </html>

 

控制器

  

 1 package com.cy.springannotation.controller;
 2
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5
 6 @Controller  // @Controller告知Spring容器这是一个控制器组件
 7 public class LoginController {
 8      @RequestMapping("/login.do")  // @RequestMapping告知该方法是针对/login.do请求的处理方法
 9      public String login(String username){
10          System.out.println(username);
11         return "index";           // 返回的字符串被当做ViewName
12
13
14      }
15 }

 

以上的代码就可以进行一个简单的页面跳转。

 

接下来进一步了解@RequestMapping的特性

 1、可以被配置在控制器类名上。

如:

 

 1 @Controller
 2 @RequestMapping("/test")
 3 public class login.doController {
 4
 5     @RequestMapping("/login.do")
 6     public String login(){
 7         return "index";
 8     }
 9 }
10
11 //此时代表请求该方法的路径是:/test/login.spring

 

2、三个常用属性:value,params,method

   2-1、value必填属性,代表请求的url,支持模糊配置。(value字可以省略,但是属性值必须填)

@RequestMapping(value=“/users/**”)   匹配“/users/abc/abc”;

@RequestMapping(value="/product?")   匹配“/product1”或“/producta”,但不匹配“/product”或“/productaa”;

@RequestMapping(value="/product*")   匹配“/productabc”或“/product”,但不匹配“/productabc/abc”; 

@RequestMapping(value="/product/*")   匹配“/product/abc”,但不匹配“/productabc”;

 

   2-2、params可选属性,代表对请求参数进行过滤

@RequestMapping(value="/login.do",params="flag")   代表请求中必须要有名为flag的提交项 

@RequestMapping(value="/login.do",params="!flag")  代表请求中不能有名为flag的提交项

@RequestMapping(value="/login.do",params="flag=hello") 代表请求中必须有名为flag的提交项,且值为hello

@RequestMapping(value="/login.do",params="flag!=hello") 代表请求中如果有名为flag的提交项,其值不能为hello

@RequestMapping(value="/login.do",params={"flag1","flag2=hello"})代表请求中必须有名为flag1的提交项,同时必须有名为flag2的提交项,且flag2的值必须为hello

   2-3、method可选属性,代表请求方式

 

@RequestMapping(value="/login.do",method=RequestMethod.POST)

@RequestMapping(value="/login.do",method=RequestMethod.GET)

@RequestMapping(value="/login.do", method= {RequestMethod.POST, RequestMethod.GET}"

接下来是:请求处理方法可接收参数

 

 

 

 

时间: 2024-10-26 20:20:54

Spring MVC 基础注解之@RequestMapping、@Controller、(二)的相关文章

Spring MVC基础入门

Spring MVC简介 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的. Spring Web MVC处理请求的流程: 具体执行步骤如下: 1.  首先用户发送请求到前端控制器,前端控制器根据请求信息(如URL)来决定选择哪一个页面控制器进行处理并把

spring MVC 使用注解返回json

使用spring MVC框架时,如何使用注解返回json呢? Java代码   @ResponseBody       @RequestMapping(value = "/login")       public ModelAndView ajaxLogin(Model model,User user,HttpServletRequest request, HttpSession session){           String errorMessage=loginCommon(m

Spring MVC完全注解方式配置web项目_java

在servlet 3.0 开始web项目可以完全不需要web.xml配置文件了,所以本文的配置只在支持servlet 3.0及以上的web容器中有效 使用的是spring mvc (4.3.2.RELEASE) + thymeleaf(3.0.2.RELEASE), 持久层使用的 spring的 JdbcTemplate, PS:推荐一个很好用的对JdbcTemplate封装的框架:https://github.com/selfly/dexcoder-assistant  . 下面开始具体的配置

求解spring mvc 使用注解Controller 怎么对应多种不同的视图结果

问题描述 比如说 使用注解 顶一个 TestController 和一个 Test2Controller里面方法 返回的时候 一个返回 list ---- //打算对应jsp界面 list.jsp一个返回 list //对应html 界面 list.html但是他们都是在方法中返回 return "list"这个要怎么设置 他们对应不同的 文件后缀.最好能给个例子的配置 谢谢 解决方案 我觉得总得有return不同的才能实现,如 return "list.jsp"

spring mvc 中注解

问题描述 学Springmvc有些乱七八糟的,弄不明白为什么要注入Bean,上例子@Controller@RequestMapping("/login")publicclassLoginControllerimplementsSerializable{@ResourceprivateUserServiceuserService;@RequestMapping("loginAction1.form")publicStringloginAction1(HttpServl

Spring MVC 通过注解方式获取不到request

问题描述 按照网上的方法用@Autowiredprivate HttpServletRequest request;但是获取不到,以为要加监听,加了监听还是不行<listener> <listener-class> org.springframework.web.context.request.RequestContextListener </listener-class> </listener> 一启动就报错,报错如下,求解org.springframew

spring mvc-maven spring MVC注解controller页面访问不到。。(新手)

问题描述 maven spring MVC注解controller页面访问不到..(新手) dispatcher-servlet.xml -------------------------------------------------------------------------- <!-- 添加注解驱动 --> <mvc:annotation-driven /> <!-- 默认扫描的包路径 --> <context:component-scan base-p

spring mvc注解不能访问到controller

问题描述 spring mvc注解不能访问到controller web.xml配置 <servlet> <servlet-name>annomvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLoca

使用Spring 2.5基于注解驱动的Spring MVC

概述 继 Spring 2.0 对 Spring MVC 进行重大升级后,Spring 2.5 又为 Spring MVC 引入了注解驱动功能.现在你无须让 Controller 继承任何接口,无需在 XML 配置文件中定义请求和 Controller 的映射关系,仅仅使用注解就可以让一个 POJO 具有 Controller 的绝大部分功能 -- Spring MVC 框架的易用性得到了进一步的增强.在框架灵活性.易用性和扩展性上,Spring MVC 已经全面超越了其它的 MVC 框架,伴随