7.3应用案例:SpringMVC注解开发
1、常用注解
@Controller:声明Action组件,负责注册bean到Spring上下文
@RequestMapping:用于为控制器指定可以处理的url请求
@RequestParam:用于指定参数的name属性
@RequestBody:用于读取Request请求的body部分数据
@ResponseBody:用于将控制器方法返回的对象写入到Response对象的body数据区
@PathVariable:用于指定url作为参数
@Resource用于注入,( 由j2ee提供 ) 默认按名称装配
@Autowired用于注入,(由spring提供) 默认按类型装配
@ExceptionHandler:用于异常处理的方法
@ControllerAdvice:用于使控制器成为全局的异常处理类
@ModelAttribute:用于优先调用被注解的方法,或注解参数中的隐藏对象
对于案例7.2,我们只需要用如下的springmvc-config.xml文件和LoginCtrler.java文件替换相应文件即可:
springmvc-config.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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd"> <!-- 指定需要扫描的包 --> <context:component-scan base-package="ctrl" /> <!-- 定义视图解析器 --> <bean id="viewResolver" class= "org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- 设置前缀 --> <property name="prefix" value="/" /> <!-- 设置后缀 --> <property name="suffix" value=".jsp" /> </bean> </beans> |
在代码<context:component-scan base-package="ctrl" />中我们设定了控制器需要扫描的包,为ctrl,只要包ctrl中出现的控制器类都将被扫描到。
在视图解析器里我们用代码<property name="prefix" value="/" />设定了视图所在的目录,”/”代表使用的是网站的根目录;用代码<property name="suffix" value=".jsp" />设定了视图的文件后缀,也即扫描所有根目录下所有的以.jsp为后缀的网页文件。
LoginCtrler.java文件
package ctrl; import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller @RequestMapping(value="/manage") public class LoginCtrler{ @RequestMapping(value="/doLogin") public String login(HttpServletRequest request, Model model){ String uname=request.getParameter("loginname"); model.addAttribute("msg", uname); if(uname.equals("tom")) return "mainpage"; else return "login"; } } |
在这个文件里,我们使用注解@Controller说明本类是一个控制器类,用注解@RequestMapping(value="/manage")说明访问该类使用的URL是”/manage”,用注解@RequestMapping(value="/doLogin")说明访问方法login()使用的URL是”/ doLogin”。这样,在下面的登录页login.jsp文件中我们就可以用代码<form id="form1" name="form1" method="post" action="manage/doLogin">来访问该方法了。
login.jsp文件:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <form id="form1" name="form1" method="post" action="manage/doLogin"> <p> <input type="text" name="loginname" id="textfield" /> </p> <p> <input type="text" name="loginpassword" id="textfield2" /> </p> <p> <input type="submit" name="button" id="button" value="提交" /> </p> </form> </body> </html> |
运行程序,并在浏览器中输入http://localhost:8080/springMVC2/login.jsp

点击提交按钮结果如下:


