2.1. 目标
在浏览器中通过http://localhost:8080/项目名称/hello.do
可以访问某个JSP显示的页面,页面中显示**Hello, SpringMVC!!!**字样。
2.2. 创建项目
创建Maven Project,Artifact Id为cn.tedu.spring
,Artifact Id为SPRINGMVC01
,Packaing必须选择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
就会自动加载配置文件!
所以,还应该对DispatcherSerlvet
的contextConfigLocation
属性进行配置,值是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 {
}
然后,在类中添加方法以处理请求,关于方法的设计:
- 应该使用
public
权限; - 暂时使用
String
作用方法的返回值类型; - 方法的名称可以自由定义;
- 方法可以没有参数。
则可以添加:
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文件下,添加视图解析器的配置。