赞
踩
控制器 Controller,复杂提供访问应用程序的行为,通常通过接口定义或者注解定义两种方式实现
控制器Controller : 负责解析用户的请求并将其转换为一个模型
在spring mvc中一个控制器可以包含多个方法
在spring mvc中,对于controller的配置方式有很多种,下面讲述下具体的配置方式
第1步,新建一个maven子项目,并添加web能力支持,配置项目的lib包内容
第2步,编写web.xml,配置DispatcherServlet, 配置springmvc-servlet.xml,
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <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>
第3步,编写web.xml,配置springmvc-servlet.xml, 配置springmvc-servlet.xml,
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0"> <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>
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" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <context:component-scan base-package="com.baifu.controller"/> <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> </beans>
第4步 实现Controller,并在springmvc-servlet.xml里面注册一下
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ControllerTest1 implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("msg", "ControllerTest1");
modelAndView.setViewName("test");
return modelAndView;
}
}
springmvc-xml.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" xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"> <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/> <context:component-scan base-package="com.kuang.controller"/> <mvc:default-servlet-handler/> <mvc:annotation-driven/> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"/> <property name="suffix" value=".jsp"/> </bean> <bean id="/t1" class="com.baifu.controller.ControllerTest1"/> </beans>
第5步,对应的视图页面 /WEB-INF/jsp/test.jsp,只是获取一下模型的数据
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>实现Controller测试!</title>
</head>
<body>
${msg}
</body>
</html>
第6步,配置tomcat,然后即可进行测试,输出 Test1Controller,测试成功!
小结:
1、实现接口controller定义控制器是一个较老的办法
2、缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller,定义的方式比较麻烦;
3、我们在springmvc-servlet.xml里面删掉控制器映射器,控制器适配器,一样可以实现,因为springmvc会根据默认的去查找
springmvc-servlet.xml
<!--<context:component-scan base-package="com.kuang.controller"/>-->
<!--<mvc:default-servlet-handler/>-->
<!--<mvc:annotation-driven/>-->
注解的说明:
@Component 代表是spring一个组件
@Service 代表service
@Controller 代表controller
@Repository
@Controller,注解的类,中的所有方法,如果返回值是String,并且有具体的页面可以跳转,那么就会被视图解析器解析(还要经过DispatcherServlet吗?还是直接给视图解析器啊?)!
注解方式必须开启如下三个配置
<context:component-scan base-package="com.kuang.controller"/>
<mvc:default-servlet-handler/>
<mvc:annotation-driven/>
用于映射URL到控制器类或一个特定的处理程序方法。可以用于类或者方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径
我们可以测试下,只在方法上面加RequestMapping
@Controller
public class ControllerTest3 {
@RequestMapping("/test1")
public String test(Model model){
model.addAttribute("msg","Test2Controller");
return "test";
}
}
访问路径: http://localhost:8080/项目名/test1,运行测试,输出 Test2Controller,测试成功!
小结:可以发现,两个控制器指向了同一个视图 test.jsp(实现controller也指向的test.jsp),输出了不同的内容!说明视图是可以复用的,只要有一个大致的框架,向里面输出不同的内容就行了,控制器和视图之间是弱耦合的关系!
@RequestMapping 注解用于映射 url 到控制器类或某个特定的方法,可用于类或方法上。 用于类上,表示类上的路径是方法上的路径的上一级!
@Controller
@RequestMapping("/admin")
public class ControllerTest2 {
@RequestMapping("/test1")
public String test(Model model){
model.addAttribute("msg","Test333Controller");
return "test";
}
}
访问路径: http://localhost:8080/项目名/admin/test1,测试输出Test333Controller
两种方法都需要在 web.xml 中注册 DispatcherServlet
,因为它是中央控制器!同时还要给它一个配置文件 springmvc-servlet.xml.
实现接口,就要配置相应的 bean;开启注解,只需要在对应的类中配置就行了!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。