一、创建Maven程序
1.new project
填写程序的Maven坐标
选择自身maven根目录,其他默认即可
修改项目信息,点击finish即创建完成
修改目录结构,在main文件下新建一个src文件夹并设置成Source Root文件目录
一个Maven管理的web项目就创建完成!
二、添加相关依赖
点开pom.xml文件可以看到默认是有junit依赖的
这里我们要使用SpringMVC框架,导入spring-webmvc依赖,来到Maven Repository,搜索
点击第一个然后选择
4.1.1.RELEASE
版本,进入后赋值粘贴maven地址:
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.1.RELEASE</version>
</dependency>
为了统一对spring jar包版本统一管理,我们使用
<spring.version>4.1.1.RELEASE</spring.version>
这样springmvc的jar包就导入进来了!
三、配置SpringMVC
在src目录下(不一定在这里,也可以在别的地方)新建springmvc.xm:
在web.xml配置前端控制器,并将springmvc.xml配置文件加载进来:<web-app>里面加上以下代码:
<!--springmvc前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--contextConfigLocation配置springmvc加载的配置文件(配置处理器映射器、适配器等)-->
<!--如果不配置,则默认加载/WEB-INFO/servlet下名称为-servlet.xml(springmvc-servlet.xml)-->
<init-param>
<param-name>contextConfigLocation</param-name>
<!--放在src文件夹下,所以就是classpath:...-->
<param-value>classpath:sprinmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
如果还要让springmvc控制器能接受中文请求的话还得配置springmvc自带的编码过滤器
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
加上后如果web-app报错如一样,把web.xml文件上面的
删掉就可以了!
四、编写处理请求的处理器
src下新建一个控制器类cn.jxufe.controller.HelloWorldController
package cn.jxufe.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
//加上注解就是一个控制器了!
@Controller
public class HelloWorldController {
//使用RequestMapping来映射来自jsp的请求
//返回值会通过视图解析器解析为现实的物理视图 即文件prefix + 返回值 + suffix,这里就
//是/WEB-INF/success.jsp
@RequestMapping(value = "/helloworld", method = RequestMethod.POST)
public String helloWorld() {
return "success";
}
}
value就是发送请求时访问到这个控制器这个方法的url,method指明需要的请求方式。
然后在到springmvc下配置视图解析器:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB-INF/"> </property>
<property name="suffix" value=".jsp"> </property>
</bean>
五、新建success.jsp并运行!
修改index.jsp
<html>
<body>
<a href="helloworld">to success.jsp</a>
</body>
</html>
新建success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>成功</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>
配置好tomcat然后运行:
发现启动失败:
查看日志
可以知道当我们访问index.jsp时也是向diapatcherServlet发送请求,dispatcher扫描控制器映射,发现映射中没有符合名为index.jsp的控制器,所以就会出现错误。
具体原理可以看这个
把web中的/*改成/helloworld,重启tomcat
发现就可以启动了:
<%--index.jsp--%>
<html>
<body>
<form action="/helloworld" method="post">
<input type="submit" value="to success.jsp"/>
</form>
</body>
</html>
点击to successful.jsp
成功!
后加:
其实前面web.xml的配置可以直接吧 / * 改成 / ,/*表示管理所有请求不管时jsp、html、jpg什么的,而 / 表示只管理url没有后缀名的请求。
或者可以改成类似于 /*.do这样的,后缀名为 .do 的请求都要被安排!
而web.xml文件中的<load-on-startup> 标签表示的是该DispatcherServlet在服务器启动时就被加载(实例化并调用其init()方法)!