Spring MVC 入门(一)
helloworld
IDEA创建工程:
选择SpringMVC即可,等待创建
编写前端控制器
由于SpringMVC需要一个前端控制器(相当于医院分诊台)来拦截前端请求,并且智能分发。
前端控制器是一个Servlet,所以应该在Web.xml中配置servlet进行拦截
在WEB-INF目录下的web.xml文件中,有一个叫做dispatcher的东西,内容如下(初始状态可能没有< init-param >以及其子模块)
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>index.jsp</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
接下来是该部分的详细讲解:
<load-on-startup>1</load-on-startup>
load-on-startup 代表服务器启动时创建对象,其数值代表优先级,数值越小,优先级越高,越先创建对象。不加该标签则在第一次访问时创建对象
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>index.jsp</param-value>
</init-param>
该部分指定配置文件位置,因此我们在src 文件下创建一个SpringBean 文件,创建方法如图:
然后将< param-value >该为:classpath: springmvc.xml;
如下:
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
将< servlet-mapping >中的对应 < url-pattern> 改为/
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
<!-- /*与/都是拦截所有请求,但是“/*”会拦截jsp页面,一旦拦截,jsp页面将无法显示
/不会拦截jsp,保证jsp访问正常
-->
</servlet-mapping>
然后在springmvc.xml< bean>中添加:
xmlns:context="http://www.springframework.org/schema/context"
添加后的结果应该是:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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"
xmlns:context="http://www.springframework.org/schema/context">
</beans>
添加扫描所有组件:
<context:component-scan base-package="com.tryMvc"></context:component-scan>
其中base-package中写想要扫描的包
编写处理器
为了测试,我选择在WEB-INF下添加文件,目录结构如图:
success.xml文件内容如下:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Success!</title>
</head>
<body>
<a href="/hello">Hello world</a>
</body>
</html>
然后在src文件下创建Java文件,
在MyFirstController 中添加方法,并且添加@Controller注解
@Controller是用来表示哪个组件是控制器,
代码如下:
@Controller
public class MyFirstController {
@RequestMapping("/hello")
//处理当前项目下的Hello请求
public String myFirstController(){
System.out.println("Get");
return "/WEB-INF/pages/success.jsp";
}
}
请求处理完返回success页面
注意:此处由于/WEB_INF/pages/success.jsp请求前缀是/WEB-INF/pages,后缀是.jsp,所以可以在springmvc.xml中配置一个视图解析器,这样返回时,可以直接返回网页文件名。代码如下:
<!-- 配置一个视图解析器,能帮助拼接页面地址 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages"></property>
<property name="suffix" value=".jsp"></property>
</bean>
prefix代表前缀,suffix代表后缀
运行前的准备:
在运行前,需要在IDEA环境中配置Apache服务器步骤如下:
1、
点击右上角Add Configuration并在左侧选择+
2、
选中TomcatServer
3、
选择本地Tomcat文件
4、
选择Deployment,并点击右侧加号,然后点击Artifact…
配置完成
运行
运行成功!