SpringMVC(10):实现MVC的两个示例和注解改进
2018/1/5
springMVC的使用。对于springmvc的介绍可参考:http://blog.csdn.net/qq_29166327/article/details/78724291;
【0】文件框架和jar包:
图1
图2
(相比于spring的jar包,需要额外加入:spring-web-4.3.12.RELEASE.jar/spring-webmvc-4.3.12.RELEASE.jar)
【1】web项目必有web.xml文件(/WebContent/WEB-INF/),在其中配置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_2_5.xsd"
id="WebApp_ID" version="2.5">
<!-- 配置核心控制器 DispatcherServlet -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!-- 初始化参数 -->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
【2】新建resources(源文件夹),新建 springmvc-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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<bean name="/hello" class="com.smbms.controller.IndexController"></bean>
<!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 -->
<!--prefix 前缀+suffix 后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
解释:
【3】新建包(/com/smbms/controller/),新建文件 IndexController.java:
package com.smbms.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;
public class IndexController extends AbstractController{
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest arg0, HttpServletResponse arg1) throws Exception {
// Logger log = Logger.getLogger(IndexController.class.getName());
// log.debug("****************8hello,springmvc!");
return new ModelAndView("hellospringmvc");
}
}
【4】新建文件夹(/WebContent/WEB-INF/views/),创建视图文件hellospringmvc.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>
<h1>Hello,springMVC!</h1>
</body>
</html>
【5】输出结果:
图3
【6】改进:若是业务复杂时,我们岂不是建立多个javabean 作为控制器进行请求处理??<bean>数量会大大增加,怎么办??
SpringMVC 提供了一键式配置丰富:<mvc:annotation-driven/>标签,用注解的方式来进行SpringMVC的开发,即:把一个URL 映射到 Controller 上。
修改 springmvc-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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!--
<bean name="/hello" class="com.smbms.controller.IndexController"></bean>
-->
<!-- 一键式配置 -->
<context:component-scan base-package="com.smbms.controller"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 配置视图解析器: 如何把 handler 方法返回值解析为实际的物理视图 -->
<!--prefix 前缀+suffix 后缀 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
解释:
(1)删除了:
<bean name="/hello" class="com.smbms.controller.IndexController"></bean>
增加了,当然也要改动javabean,因为修改后是自动生成接口bean来支持注解的:
<context:component-scan base-package="com.smbms.controller"></context:component-scan>
<mvc:annotation-driven></mvc:annotation-driven>
(2)上面两个Bean的注册,是对springmvc对 @Controller 分发请求的支持。
(3)<mvc:annotation-driven/> 是对包进行扫描,实现注解驱动Bean的定义,同时将Bean自动注入容器中使用。没有它,标注了 @Controller 的Bean仅仅只是一个普通Bean,而不是可以处理请求的控制器。<mvc:annotation-driven/>会自动注册 DefaultAnnotationHandlerMapping(处理器映射)和 AnnotationMethodHandlerAdapter(处理器适配器)这两个bean。
修改 IndexController.java:
package com.smbms.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping("/hello")
public String index(){
return "hellospringmvc";
}
}
解释:(1) @Controller 对 java类进行标注,确定了它可以成为一个处理HTTP请求的控制器,再使用@RequestMapping 对类的方法进行标注,确定方法对应的URL。即:支持注解式的处理器。
【7】工程说明:
(1)springmvc01,是最简单的springmvc框架配置,走个流程。
dispatchServlet (springmvc-servlet.xml)配置了一个<bean>,
里面的name和class决定了url和对应处理请求的javabean。
(2) 然后,新增了注解式处理器。(@aaa@qq.com("/hello"))
以上是博文全部内容。