SprngMVC框架

1. SpringMVC框架

1.1. 作用

SpringMVC框架解决了V与C的交互问题。

原生的Servlet就是控制器,使用Servlet主要存在的问题是实例太多,配置麻烦,管理难度大等一系列的问题。例如项目中有用户注册功能,则可能需要开发UserRegisterServlet,如果还有登录功能,则可能需要开发UserLoginServlet,几乎是每个功能需要有1个对应的Servlet,如果一个项目中有200个不同的功能,则需要200个Servlet,在更大的系统中,Servlet的数量就非常多,在实际运行时,在内存中的Servlet对象就会占据大量的内存空间!由于Servlet的数量很多,进而导致配置文件的配置信息会非常多,配置信息多了以后,就会引发管理难度大的问题。

1.2. SpringMVC中的核心组件
  • DispatcherServlet:前端控制器,用于接收所有请求,并负责分发;

  • HandlerMapping:根据请求路径映射控制器或控制器的方法,确定请求路径与控制器或控制器中的方法的对应关系;

  • Controller:实际处理请求的组件;

  • ModelAndView:控制器的返回结果,包括处理完成后的数据,及最终应该响应给客户端的视图名称;

  • ViewResolver:根据视图名称得到具体的视图组件。

具体的执行流程图:

在这里插入图片描述

2. SpringMVC HelloWorld

2.1. 目标

在浏览器中通过http://localhost:8080/项目名称/hello.do可以访问某个JSP显示的页面,页面中显示Hello, SpringMVC字样。

2.2. 创建项目

创建Maven ProjectArtifact Idcn.tedu.springArtifact IdSPRINGMVC01Packaing必须选择war

创建完成后,首先生成web.xml文件。

然后,在pom.xml中添加spring-webmvc的依赖。

然后,将Spring的配置文件复制到src/main/resources下。

另外,还需要添加Tomcat运行环境。

2.3. 配置DispatcherServlet

打开web.xml,在配置文件中对DispatcherServlet进行配置,使之可以处理所有以.do结尾的请求:

	<servlet>
		<servlet-name>SpringMVC</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

SpringMVC框架是基于Spring框架的,后续开发的组件也应该随着项目启动就完成初始化,例如自定义的控制器类等等,也就意味着当项目启动时,就应该加载Spring的配置文件(spring.xml)。

DispatcherServlet的父类FrameworkServlet中定义了名为contextConfigLocation的属性,当DispatcherServlet初始化时,会自动读取该属性的值,而该属性的值应该是配置文件的路径,则DispatcherServlet就会自动加载配置文件!

所以,还应该对DispatcherSerlvetcontextConfigLocation属性进行配置,值是Spring的配置文件,并保证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:spring.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>SpringMVC</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

完成以上配置后,如果需要检测配置是否成功,可以在Spring的配置文件中添加组件扫描:

<context:component-scan base-package="cn.tedu.spring" />

然后,创建cn.tedu.spring.User类,为该类添加注解,并自定义构造方法:

@Component
public class User {
	public User() {
		System.out.println("初始化User对象。");
	}
}

当把项目部署到Tomcat时,Tomcat启动就会初始化DispatcherServlet,由于配置了初始化参数contextConfigLocation,就会加载Spring的配置文件,在配置文件中执行组件扫描,扫描到User时,由于User类添加了注解,Spring就会创建User类的对象,也就是执行了无参数的构造方法,则会执行以上代码中的输出语句!总的来说,启动Tomcat就可以看到以上输出语句!

2.4. 通过控制器接收请求

自定义控制器类cn.tedu.spring.HelloController,在类之前添加@Controller注解:

@Controller
public class HelloController {
}

然后,在类中添加方法以处理请求,关于方法的设计:

  1. 应该使用public权限;

  2. 暂时使用String作用方法的返回值类型;

  3. 方法的名称可以自由定义;

  4. 方法可以没有参数。

则可以添加:

public String showHello() {
}

然后,在方法之前使用@RequestMapping("请求路径")来配置请求路径:

@RequestMapping("hello.do")
public String showHello() {
}

则实现了请求路径与处理请求的方法的映射关系,即:当请求hello.do时,就会自动调用showHello()方法!

可以在以上方法中输出日志,以观察运行效率,暂时不关心返回值,所以,测试运行时页面将提示404错误,暂时是正常的:

@RequestMapping("hello.do")
public String showHello() {
	System.out.println("HelloController.showHello()");
	return null;
}

最后,重新启动项目,通过http://localhost:8080/SPRINGMVC01/hello.do进行访问,在浏览器中会提示404,并在Eclipse的控制台中可以看到以上输出语句的内容!

2.5. 显示页面

首先,在webapp/WEB-INF/hello.jsp页面,用于显示。

在控制器处理请求的方法中,返回的String值表示“视图名称”,将根据视图解析器ViewResolver进行解析,得到以上创建的JSP文件。

实际使用的InternalResourceViewResolver的工作原理就是以webapp作为根路径,“前缀 + 控制器返回的字符串 + 后缀”得到文件位,所以,可以配置为:

	<!-- 视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 前缀 -->
		<property name="prefix" value="/WEB-INF/"></property>
		<!-- 后缀 -->
		<property name="suffix" value=".jsp"></property>
	</bean>

然后,控制器的方法必须返回"hello",这样,前缀与返回值与后缀拼接起来,就可以得到/WEB-INF/hello.jsp

最后,在浏览器再次访问,可以看到JSP页面设计的内容。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值