提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
Spring MVC环境的搭建,并实现视图层(View)与控制器(Controller)之间的参数传递
一、MVC设计模式
- 视图(View)-对应组件:JSP或者HTML文件
- 控制器(Controller)-对应组件:Servlet
- 模型(Model) -对应组件:JavaBean
1、JSP Model
2、MVC 优点
- 多视图共享一个模型,大大提高代码的可重用性
- MVC三个模块相互独立,松耦合架构
- 控制器提高了应用程序的灵活性和可配置性
- 有利于软件工程化管理
4、 MVC 缺点
- 原理复杂
- 增加了系统结构和实现的复杂性
- 视图对模型数据的低效率访问
二、Spring MVC环境搭建
1.Spring MVC框架搭建步骤
1、下载jar文件并导入工程
- spring-web-3.2.13.RELEASE.jar
- spring-webmvc-3.2.13.RELEASE.jar
2、配置文件
- 在web.xml中配置Servlet
DispatcherServlet:核心控制器
<?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>*.action</url-pattern>
</servlet-mapping>
</web-app>
- 创建Spring MVC的配置文件
InternalResourceViewResolver:内部的视图解析器
<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<bean name="/index.action" class="com.etc.controller.IndexController"></bean>
<!--配置扫描器-->
<context:component-scan base-package="com.etc.controller"></context:component-scan>
<!--配置注解驱动-->
<mvc:annotation-driven/>
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
3、创建Controller-处理请求的控制器 [Handler(处理器)]
- 参考IndexController(第一种创建方式)
/**
* @author lyt
* 控制器的第一种创建方式
*/
public class IndexController extends AbstractController {
public IndexController() {
super();
}
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
return super.handleRequest(request, response);
}
@Override
protected ModelAndView handleRequestInternal(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
System.out.println("hello spring mvc!");
return new ModelAndView("login");
}
}
- 参考CallController (第二种)
- 参数传递,Controller方法中参数前加@RequestParam进行直接入参
@Controller
public class CallController {
Logger logger = Logger.getLogger(CallController.class);
@RequestMapping("/callme1.action")
public String call1(String tel,String email){
logger.info("电话"+tel+"邮箱"+email);
return "login";
}
@RequestMapping("/callme2.action")
public String call2(@RequestParam String tel, String email){
logger.info("电话"+tel+"邮箱"+email);
return "login";
}
@RequestMapping("/callme3.action")
public String call3(@RequestParam(value = "tele",required = false) String tel, @RequestParam(value = "mail") String email){
logger.info("电话"+tel+"邮箱"+email);
return "login";
}
}
- 参考 ModelAndViewController
- 模型数据传递
- Model 数据结构:Map类型
-
推荐使用mv4方法@Controller public class ModelAndViewController { Logger logger = Logger.getLogger(ModelAndViewController.class); @RequestMapping("/mv1.action") public ModelAndView mv1(String username){ logger.info(username); //创建ModelAndView对象 ModelAndView modelAndView = new ModelAndView(); //把用户名放进作用域 modelAndView.addObject("username",username); //将视图名称放入mv modelAndView.setViewName("main"); return modelAndView; } @RequestMapping("/mv2.action") public ModelAndView mv2(String username,int password){ logger.info(username); //创建用户对象 User user = new User(); user.setUsername(username); user.setPassWord(password); //创建ModelAndView对象 ModelAndView modelAndView = new ModelAndView(); //把用户名放进作用域 modelAndView.addObject("user",user); //将视图名称放入mv modelAndView.setViewName("main"); return modelAndView; } @RequestMapping("/mv3.action") public String mv3(String username, Map<String,Object> model){ logger.info(username); model.put("username",username); return "main";//视图的名称 } @RequestMapping("/mv4.action") public String mv4(String username, Model model){ logger.info(username); model.addAttribute("username",username); return "main"; } }
- 对应的main.jsp
-
</head> <body> <h1>主页面</h1> <h2>${username}</h2> <h2>用户名:${user.username}</h2> <h2>用户名密码:${user.passWord}</h2> <h2>年龄:${age}</h2> </body>
po包下的User类
-
注意用户类中的属性与页面中的属性一致
public class User { private String username; private int passWord; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public int getPassWord() { return passWord; } public void setPassWord(int passWord) { this.passWord = passWord; } }