文章目录
一、WebMVC介绍
1、MVC是什么
MVC是一种使用视图、模型、控制器设计创建Web应用程序的模式:
Model表示应用程序核心(比如数据库记录列表)、View显示数据(数据库记录)、Controller处理输入(写入数据库记录)
2、常用的MVC框架
Struts是Java Web MVC框架中不争的王者。经过长达九年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,并且占有了MVC框架中最大的市场份额。但是Struts某些技术特性上已经落后于新兴的MVC框架。面对Spring MVC、Webwork2这些设计更精密。扩展性更强的框架,Struts受到了前所未有的挑战。
3、MVC模式的优缺点
优点:耦合性低、重用性高、生命周期成本低、部署快、可维护性高、有利软件工程化管理
缺点:没有明确的定义、不适合小型和中等规模的应用程序、增加系统结构和实现的复杂性、视图与控制器之间连接过于紧密、视图对模型数据的低效率访问、一般高级的界面工具或构造器不支持模式
4、Spring MVC简介
(1)和众多其他Web框架一样,它基于MVC设计理念,此外,它采用了松散耦合可插拔组件结构,比其他MVC框架更具扩展性和灵活性。
(2)Spring MVC在数据绑定、视图解析、本地化处理及静态资源处理上都有许多不俗的表现
(3)Spring MVC框架围绕DispatcherServlet这个核心展开,DispatcherServlet是Spring MVC的总导演、总策划,它负责截获请求并将其分派给相应的处理器处理。
二.springmvc的体系结构
三.配置DispatcherServlet类
1.maven需要添加的依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.0.1</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
2.在WEB-INF下面的web.xml中配置DispatcherServlet类
<servlet>
<servlet-name>dispatcher</servlet-name>
<servler-class>org.springframework.web.servlet.DispatcherServlet</servler-class>
<!--配置文件默认找寻的位置-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher.xml</param-value>
<!--配置容器初始化DispatcherServlet-->
<!--这里不写的时候默认是-1-->
<load-on-startup>1</load-on-startup>
</init-param>
</servlet>
<!--配置拦截路径-->
<servlet-mapping>
<servlet-name>dispatcher</servler-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!--这里再配置默认的jsp页面-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
文件默认寻找的位置文件dispatcher.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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">
<!--配置包扫描路径-->
<context:component-scan base-packeage="包路径">
<!--配置视图解析器,用于将Handler方法中返回的视图名解析成真正可以展示的页面-->
<mvc:view-resolvers>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--这里的prefix是拼上前缀,suffix是拼上后缀名.jsp-->
<property name="prefix" value=""/>
<property name="suffix" value=".jsp">
</bean>
</mvc:view-resolvers>
</beans>
index.jsp中的代码
<a href="test/hello">SpringMVC测试</a>
<a href="nihao/apple">SpringMVC apple测试</a>
<a href="hello/google">SpringMVC google测试</a>
<a href="sihuoge">测试ResponseBody</a>
在HelloAction中做处理
/**
* 通过@Controller标注的类会被SpringIOC容器扫描和管理
*/
@Controller
public class HelloAction {
/**
* 定义一个Handler, 可以处理http://localhost:8080/springmvc/test/hello这个请求
* @return
*/
@RequestMapping("/test/hello")
public String hello() {
System.out.println("进入HelloAction.hello()方法");
return "hello";
}
/**
* 处理请求,并携带数据跳转到页面
* @param mv
* @return
*/
@RequestMapping("/nihao/apple")
public ModelAndView hello1(ModelAndView mv) {
System.out.println("进入HelloAction.hello1()方法");
mv.setViewName("hello");
mv.addObject("key", "apple");
return mv;
}
@RequestMapping("/hello/google")
public String hello2() {
System.out.println("进入HelloAction.hello2()方法");
return "hello";
}
/**
* 通过@ResponseBody注解标注的方法, 不会被解析成视图, 而是直接将返回的内容本身输出给调用方(浏览器、其他服务、抓包工具)
* @return
*/
@ResponseBody
@RequestMapping("/sihuoge")
public String test() {
return "sihuo";
}
}