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页面设计的内容。

2.6. 作业

新创建SPRINGMVC02项目,要求通过http://localhost:8080/SPRINGMVC02/reg.do可以显示用户注册页面,页面中至少包括用户名、密码、年龄、手机号码、邮箱这5个输入框,及1个提交按钮;要求通过http://localhost:8080/SPRINGMVC02/login.do可以显示用户登录页面,页面中至少包括用户名、密码这2个输入框,及1个提交按钮;

提示:只需要创建1个控制器类,该类中添加2个处理请求的方法。

###################### 以上大纲步骤 #####################################
1.创建项目
2.配置Tomcat环境和web.xml文件,在web.xml文件当中配置*.do
3.添加spring.xml文件,并加上组件扫描,检查web.xml配置是否成功
4.添加SpringMVC的依赖
5.添加控制器
6.添加视图,在WEB-ING文件下,
7.根据视图后缀,在spring.xml文件下,添加视图解析器的配置。