`

SpringMVC教程/实例(二):java SpringMVC之Annotation篇

阅读更多
[size=medium]
同样是WebProject,这里用到的是spring-framework-3.1.1.RELEASE

首先是Web.xml
<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5"  
    xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee    
                        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    <servlet>  
        <servlet-name>jadyer</servlet-name>  
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
        <load-on-startup>1</load-on-startup>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>jadyer</servlet-name>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>  
</web-app>

然后是SpringMVC的配置文件jadyer-servlet.xml
<?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:mvc="http://www.springframework.org/schema/mvc"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
                        http://www.springframework.org/schema/mvc   
                        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd   
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
    <!-- 启动Spring的组件自动扫描机制。Spring会自动扫描base-package指定的包中的类和子包里面类 -->  
    <!-- 此处可参考我的文章http://blog.csdn.net/jadyer/article/details/6038604 -->  
    <context:component-scan base-package="com.jadyer"/>  
       
    <!-- 启动SpringMVC的注解功能,它会自动注册HandlerMapping、HandlerAdapter、ExceptionResolver的相关实例 -->  
    <mvc:annotation-driven/>  
       
    <!-- 由于web.xml中设置是:由SpringMVC拦截所有请求,于是在读取静态资源文件的时候就会受到影响(说白了就是读不到) -->  
    <!-- 经过下面的配置,该标签的作用就是:所有页面中引用"/css/**"的资源,都会从"/resources/styles/"里面进行查找 -->  
    <!-- 我们可以访问http://IP:8080/xxx/css/my.css和http://IP:8080/xxx/resources/styles/my.css对比出来 -->  
    <mvc:resources mapping="/css/**" location="/resources/styles/"/>  
       
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- viewClass属性可以用来指定前台在解析数据时,所允许采用的手段。实际上其默认值就是JstlView -->  
        <!-- 将来有需要的话,就可以在这里把JstlView改成其它的,如FreeMarkerView,VelocityView,TilesView -->  
        <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->  
  
        <!-- 若Controller的方法返回"user/addSuccess",则SpringMVC自动找/WEB-INF/jsp/user/addSuccess.jsp -->  
        <property name="prefix" value="/WEB-INF/jsp/"/>  
        <property name="suffix" value=".jsp"/>  
    </bean>  
</beans> 

接下来是用于响应请求结果的//WEB-INF//jsp//addSuccess.jsp
<%@ page language="java" pageEncoding="UTF-8"%>  
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>  
  
<link rel="stylesheet" type="text/css" href="<%=request.getContextPath()%>/css/my.css">  
  
welcome: ${aaa_name}、${bbb_name}、${string}   
<br/>  
<c:choose>  
    <c:when test="${aaa_name=='aaa_jadyer'}">  
        From:/mydemo/sayaaa   
    </c:when>  
    <c:when test="${bbb_name=='bbb_jadyer'}">  
        From:/mydemo/saybbb${sessionScope.loginUser}   
    </c:when>  
    <c:otherwise>  
        From:others   
    </c:otherwise>  
</c:choose>  
<br/>  
${redirectName} 

这是我们的样式文件//resources//styles//my.css

    body{   
        font-size:30px;   
    }  


最后是最为核心的UserController.java
package com.jadyer.controller;   
  
import java.util.Map;   
  
import javax.servlet.http.HttpServletRequest;   
import javax.servlet.http.HttpServletResponse;   
import javax.servlet.http.HttpSession;   
  
import org.springframework.stereotype.Controller;   
import org.springframework.ui.Model;   
import org.springframework.web.bind.annotation.RequestMapping;   
import org.springframework.web.bind.annotation.RequestMethod;   
import org.springframework.web.bind.annotation.RequestParam;   
import org.springframework.web.bind.annotation.SessionAttributes;   
import org.springframework.web.servlet.mvc.support.RedirectAttributes;   
import org.springframework.web.servlet.view.InternalResourceViewResolver;   
  
/**  
 * UserController  
 * @author http://blog.csdn.net/jadyer  
 * @create Apr 20, 2012 1:23:29 AM  
 */  
@Controller //指明这是一个Controller   
@RequestMapping(value="/mydemo") //类似于命名空间,即访问该Controller时必须加上"/mydemo"在前面   
//只要下面的方法中执行model.addAttribute("loginUser","jadyer")那么"loginUser"便被自动放到HttpSession   
@SessionAttributes("loginUser")   
public class UserController {   
    /**  
     * @see 如果在类上指定@RequestMapping并给了值,而在方法上指定@RequestMapping但不给值  
     * @see 这时,以下的两种请求方式,都会被分发到该方法上  
     * @see 第一种:'http://127.0.0.1:8088/SpringMVC_study/mydemo'  
     * @see 第二种:'http://127.0.0.1:8088/SpringMVC_study/mydemo/'  
     * @see 但,如果我们在某个方法上明确指定了@RequestMapping(value="/"),则第二种请求会被分发到该方法上  
     */  
    @RequestMapping  
    public String login(){   
        System.out.println("login() is invoked");   
        return "addSuccess";   
    }   
       
    @RequestMapping(value={"/","/add"}) //即访问"/mydemo/"或者"/mydemo/add",便自动访问该方法   
    public String addUser(){   
        System.out.println("addUser() is invoked");   
        return "addSuccess"; //return逻辑视图   
    }   
       
    /**  
     * 简述如何接收前台参数,以及@RequestParam的使用  
     */  
    //这里@RequestParam("userID")表明在访问该方法时,必须传个参数过来,并且参数名必须是int型的userID   
    //以下三种情况会导致服务器返回HTTP Status 400   
    //1)没有传任何参数2)传的参数中没有名为userID的参数3)传了userID参数但其参数值无法转换为int型   
    @RequestMapping(value={"/delete"})   
    public String deleteUser(@RequestParam("userID") int userID){   
        System.out.println("===============" + userID);   
        return "addSuccess";   
    }   
    //这里@RequestParam表明在访问该方法时,至少要把userName参数传过来,否则服务器返回HTTP Status 400   
    @RequestMapping("/edit")   
    public String editUser(@RequestParam String userName){   
        System.out.println("===============" + userName);   
        return "addSuccess";   
    }   
    //这种情况下,无论传不传userName参数,都可以访问到该方法。如果没有传userName,则打印出来的值就是null   
    //这里method=RequestMethod.GET用于指定需要以GET方式访问该方法,注意两个以上属性时就要明确value值了   
    @RequestMapping(value="/modify", method=RequestMethod.GET)   
    public String modifyUser(String userName){   
        System.out.println("===============" + userName);   
        return "addSuccess";   
    }   
       
    /**  
     * 简述如何返回参数给前台,以及前台如何获取参数  
     */  
    @RequestMapping("/sayaaa")   
    public String sayAaa(String userName, Map<String,Object> map){   
        map.put("aaa_name", "aaa_jadyer"); //此时前台使用${aaa_name}即可取值   
        return "addSuccess";   
    }   
    @RequestMapping("/saybbb")   
    public String sayBbb(String userName, Model model){   
        model.addAttribute("bbb_name", "bbb_jadyer"); //此时前台使用${bbb_name}即可取值   
        model.addAttribute("loginUser","jadyer"); //由于@SessionAttributes,故loginUser会被自动放到HttpSession中   
        return "addSuccess";   
    }   
    @RequestMapping("/sayccc")   
    public String sayCcc(String userName, Model model){   
        model.addAttribute("ccc_jadyer"); //此时默认以Object类型作为key,即String-->string,故前台使用${string}即可取值   
        return "addSuccess";   
    }   
       
    /**  
     * 简述如何获取javax.servlet.http.HttpServletRequest、HttpServletResponse、HttpSession  
     */  
    @RequestMapping("/eat")   
    public String eat(HttpServletRequest request, HttpServletResponse response, HttpSession session){   
        System.out.println("===============" + request.getParameter("myname"));   
        System.out.println("===============" + request.getLocalAddr());   
        System.out.println("===============" + response.getLocale());   
        System.out.println("===============" + session.getId());   
        return "addSuccess";   
    }   
       
    /**  
     * 简述客户端跳转时,传参的传递  
     * @see 注意:这种情况下的参数,并不是放到HttpSession中的,不信你可以试一下  
     * @see 注意:即先访问/mydemo/sleep之后,再直接访问/mydemo/eat  
     */  
    @RequestMapping("/sleep")   
    public String sleep(RedirectAttributes ra){   
        ra.addFlashAttribute("redirectName", "redirectValue");   
        //等同于return "redirect:/mydemo/eat"; //两种写法都要写绝对路径,而SpringMVC都会为其自动添加应用上下文   
        return InternalResourceViewResolver.REDIRECT_URL_PREFIX + "/mydemo/eat";   
    }   
} 



[/size]
分享到:
评论

相关推荐

    springMVC整合DWR3.0 实例

    在此背景下,SpringMVC作为一款优秀的Java Web框架,其灵活性和扩展性使得它成为众多开发者首选的后端框架之一。而Direct Web Remoting (DWR) 则是一种简化JavaScript调用Java方法的技术,通过Ajax实现了客户端与...

    springmvc入门实例

    Spring MVC 是一个基于Java的轻量级Web应用框架,它为构建模型-视图-控制器(MVC)架构的应用程序提供了强大的支持。本入门实例旨在帮助开发者快速理解并掌握Spring MVC的基本概念和工作流程。 首先,Spring MVC的...

    Maven+SpringMVC的入门级HelloWorld实例

    在IT行业中,Maven和SpringMVC是两个非常重要的组件,它们分别是项目管理和Web应用程序开发的核心工具。Maven是一款强大的项目构建系统,它通过管理项目的依赖关系和构建生命周期,简化了Java开发流程。而SpringMVC...

    springmvc入门实例(注解)

    本入门实例将重点介绍如何使用注解来简化Spring MVC的配置,以便快速入门。Eclipse Dynamic Web工程是开发此类应用的常见环境。 首先,我们需要创建一个Eclipse Dynamic Web项目。在Eclipse中,选择"File" -&gt; "New...

    SpringMvc项目配置实例

    ### 第二种配置方式:Java 配置 1. **使用 @Configuration 注解**:在 Java 类上使用 `@Configuration` 注解来替代 XML 配置,例如创建一个名为 `WebConfig.java` 的类: ```java @Configuration @EnableWebMvc ...

    简单的SpringMVC实例

    **SpringMVC简介** ...通过上述知识点,我们可以快速搭建并运行一个SpringMVC实例,实现从请求处理到响应的完整流程。在实际项目中,还需要考虑安全性、性能优化等方面,以构建出高质量的Web应用。

    SpringMVC 开发接口实例+json参数传递

    总结,本教程通过一个具体的SpringMVC接口实例展示了如何使用JSON参数进行通信。从创建项目、配置SpringMVC、编写Controller,到定义请求和响应模型,最后测试接口,每个步骤都详细阐述,旨在帮助开发者掌握...

    springmvc实例

    在这个"springmvc实例"中,我们可以看到一个简单的 HTTP 接口的实现,通过访问 `http://localhost:8080/jxhService/test/hello` 可以测试其功能。 1. **Spring MVC 架构**: - Spring MVC 提供了一个分层的架构,...

    springmvc之HelloWord

    在IT行业中,Spring MVC是一个广泛使用的Java Web框架,它提供了模型-视图-控制器(MVC)架构,便于开发高效、可维护的Web应用程序。本教程将指导你如何使用Eclipse IDE和Maven构建工具来创建一个基础的Spring MVC...

    springMvc实例

    **Spring MVC 实例详解** Spring MVC 是 Spring 框架的一部分,它是一个用于构建 Web 应用程序的轻量级、模型-视图-控制器(MVC)框架。本实例将带您逐步了解如何在实际项目中使用 Spring MVC,以及与 MySQL 数据库...

    基于SpringMVC annotation 的图形验证码

    基于SpringMVC annotation 的图形验证码 主要是controller的写法 实现前台验证码的显示 和刷新 验证功能相信大家都能写出来 访问 http://localhost:8080/SpringMVC_annotation_volidate/login jsp页面关键代码 ...

    Spring之MVC 入门实例

    3. Eclipse 或 IntelliJ IDEA:Java IDE,便于开发和调试。 ### 二、创建 Spring MVC 项目结构 一个基本的 Spring MVC 项目结构通常包含以下部分: - `src/main/java`:存放 Java 源代码,包括控制器、模型、服务...

    SpringMVC基础

    本篇文章将深入探讨SpringMVC的基础知识,包括隐式Servlet创建、参数接收与响应、以及XML配置。 ### 1. 隐式Servlet创建 在SpringMVC中,我们不再需要手动创建Servlet实例,而是通过DispatcherServlet来作为前端...

    IDEA Maven+SpringMvc小实例,适合初学者

    在本教程中,我们将深入探讨如何使用IntelliJ IDEA(简称IDEA)集成Maven来构建一个简单的Spring MVC项目,这个实例非常适合初学者。通过学习,你可以了解到如何配置IDEA,创建Maven项目,以及如何将Spring MVC框架...

    Eclipse-Maven部署SpringMVC实例Demo

    本教程将详细讲解如何使用Eclipse和Maven来部署一个基于SpringMVC的实例Demo。 首先,我们需要创建一个新的Maven项目。在Eclipse中,选择"File" -&gt; "New" -&gt; "Other" -&gt; "Maven Project",然后按照向导设置新项目的...

    springMVC实例

    在这个实例中,我们将深入探讨如何配置SpringMVC以及如何设置前端以进行访问。 1. **SpringMVC的核心组件** - **DispatcherServlet**:它是SpringMVC的前端控制器,负责接收HTTP请求,并根据配置分发到相应的...

Global site tag (gtag.js) - Google Analytics