1.在IDEA创建项目
然后下一步设置项目名,接着创建就行
2.配置和启动tomcat
点击Fix,就会跳到以下界面
启动tomcat
会报错
原因是缺少 ContextLoaderListerner这个类
解决:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
点击“Artifacts”选项,可以看到下面有一个指示标,说缺少“Spring mvc”的jar包,
点击Fix,选择一个 Add all missing ... 就行
此时重新启动Tomcat,就成功了访问了默认的index.jsp
3.创建HelloWorld类
在HelloWorld类上添加 @Controller,@RequestMapping
并写一个普通方法,添加上 @RequestMapping,如下
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/springmvc")
public class HelloWorld {
@RequestMapping("/helloworld")
public String hello(){
System.out.println("hello world");
return "success";
}
}
访问的时候要怎么访问?
因为类有一个@RequestMapping("/springmvc"),而方法也有一个@RequestMapping("/helloworld"),然后要对hello() 发出请求,得这样:http://localhost:8080/springmvc/helloworld.form
如果类没有@RequestMapping("/springmvc"),则得:得这样:http://localhost:8080/helloworld.form
疑惑: .form 是啥,我们来看 web.xml文件
可以看到配置文件中帮我们配置一个Servlet,这个Servlet是org.springframework.web.servlet.DispatcherServlet这个类来处理,并且可以看到 *.form,这个url-pattern就是来配置拦截什么请求的,
我们把它改为 /,表示拦截所有请求:
这样的话,我们只需要这样就可以访问:http://localhost:8080/springmvc/helloworld
如果这样启动Tomcat的话会出现404,我们的hello()方法在访问时,如果访问成功会在控制台打印一条语句,结果现在访问却没有打印,说明spring识别不到@Controller
这时候就要去配置dispatcher-servlet.xml这个文件
4.配置dispatcher-servlet.xml
IDEA中创建SpringMVC有两个配置文件:dispatcher-servlet.xml和applicationContext.xml
我刚开始就在applicationContext.xml,结果总是404,原因是dispatcher-servlet.xml是专门来配置@Controller标记的类的
然后我们需要告知Spring去哪里扫描包,将包里面的类添加进Spring
<context:component-scan base-package="cn.springmvc.hello"><</context:component-scan>
现在重启访问的话,还是会出现404,但是控制台已经可以打印语句了,说明添加进Spring成功
那么为什么还会404,看上图的警告,因为我们没有配置视图解析器
hello()返回值会通过视图解析器解析为实际的物理视图,回到dispatcher-servlet.xml,配置如下
<!--配置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--视图路径,转发后会到这去找文件-->
<property name="prefix" value="/WEB-INF/views/"></property>
<!--找后缀为jsp的文件-->
<property name="suffix" value=".jsp"></property>
</bean>
对于InternalResourceViewResolver类会做如下解析:
通过 prefix + 返回值 + 后缀,这样的方式来得到实际的物理视图,然后做转发操作
如:/WEB-INF/views/ success .jsp
4.创建视图文件
在WEB-INF下创建文件名为views,并创建一个success.jsp的文件,该jsp的文件名必须跟hello()返回值相同
这样就成功了