刚接触springMVC,写一篇博客记录一下,以免后面就忘掉了。。。
使用IDEA的话可以很快的搭建起一个spring MVC的项目模版,很多需要的配置文件以及目录结构IDEA都会帮我们生成。
首先新建一个工程,选择spring-->spring MVC,如果选择了download,IDEA会帮我们下载需要的库。
给项目起一个名字
点击finish之后,IDEA会帮我们下载库,下载完成之后就能看到工程的详细目录以及其中包含的文件。
点击菜单栏的run-->edit configuration
选择tomcat local
先打开server选项卡,给服务器起一个名字,选择tomcat的路径,还可以选个默认浏览器什么的,其他的暂时不需要改动。
然后打开Deployment选项卡,创建Artifact
如果最后如下图所示的话就OK了 ,最后apply 点击OK即可。
从工程目录中我们可以看到,工程中包含一个index.jsp文件,我们可以试着运行一下这个项目,看能不能出现index页面,如果试过之后会发现,其实这时候服务都没有启动,看一下输出日志,可以发现是因为spring的原因,再去环境配置看看。
打开project structure,artifacts会发现配置有报错的地方,
解决这个问题点击fix(看上图)将对应的库加载进来就可以了,apply,点击OK即可。
这时候再次运行该项目,就可以看到index已经运行出来。
到此位置,只是配置了一下环境,测试了在当前环境下能运行jsp文件,还没有MVC的东西出现,现在就开始添加controller。在src下面新建一个包,名字可以任意但包是一定要建的,因为springMVC是没办法运行在默认包下面的,我这里叫做horizonhui.mvc.controller
在该包下面新建一个class文件,HelloController。
代码如下:
在这段代码中,包含几个注解,@Controller就声明了这是一个控制器,@RequestMapping说明了url路径。
package horizonhui.mvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("mytest")
public class HelloController {
@RequestMapping("/hello")
public String hello(){
return "/WEB-INF/jsp/hello.jsp";
}
}
上面我直接写了一个jsp文件的路径,但是我们前面并没有建立这样一个jsp文件,所以我们在WEB-INF下新建一个jsp目录,然后新建一个hello.jsp文件。Spring并不限制你必须创建在WEB-INF下,但是这样更安全,因为WEB-INF目录用户是不能直接访问的,毕竟View里边可能会有一些代码
<%--
Created by IntelliJ IDEA.
User: Horizonhui
Date: 2019/1/23
Time: 10:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
Hello World!
此时我们可以通过http://localhost:8080/mytest/hello.form这个url来访问hello.jsp,至于form是个什么东西,我们去看web.xml文件,在url-pattern中指明了*.form,当然我们可以改。
将url-pattern改为/即可 ,这样我们就可以通过这个访问http://localhost:8080/mytest/hello
但是,大家可能已经发现了,不管是更改之前还是更改之后,都是404.。。
在这里,其实我们访问的url没错,不管是有没有form,这不是问题所在,我们时尝试通过controller来访问的jsp,controller所在的包也是我们自己建的,说到这你可能知道了,spring找不到我们的controller。从上面的web.xml可以看到,IDEA默认帮我配置了一个名字叫做dispatcher的Servlet,这个Servlet使用org.springframework.web.servlet.DispatcherServlet这个类来处理,那我们就去找dispatcher-servlet.xml这个文件。在beans里面加上这段,指明我们的controller在哪。
到这,再次试一下访问hello.jsp,可以发现helloworld已经出现了。
其实,上面我们建的hello.jsp就已经时属于view的部分了,我们在建立controller的同时就将view建立出来了,但是一般来说Controller代码的返回值是成字符串“hello”就可以了,不需要.jsp,也不需要前边的路径,而我们返回的是“/WEB-INF/jsp/hello.jsp” ,这就要在配置文件中设置前缀和后缀了。
还是找到dispatcher-servlet.xml,配置ViewResolver,加入以下代码,指明前缀和后缀,这里改了不要忘记该controller的返回值。 class 指定ViewResolver的实现的类,你可以根据不同的情况,使用不用的ViewResolver,这里指定是 org.springframework.web.servlet.view.InternalResourceViewResolver
此时我们就可以直接返回“hello”了。
将controller文件改成如下代码,通过建立一个Model向View传值
package horizonhui.mvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("mytest")
public class HelloController {
@RequestMapping("/hello")
public String hello(Model model){
model.addAttribute("name","horizonhui");
//return "/WEB-INF/jsp/hello.jsp";
return "hello";
}
}
同时更改hello.jsp文件,接收来自controller的值
<%--
Created by IntelliJ IDEA.
User: Horizonhui
Date: 2019/1/23
Time: 10:13
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
Hello World!
<%--修改这个地方,接收controller的数据--%>
${name}
此时,再次运行该工程,就可以看到jsp页面中显示了从controller过来的值,至此一个简单的springMVC项目就完成了,最初生成的index.jsp其实我们就在也没有用到了。