一、Spring MVC 简介
Spring MVC 框架包括 model 、view 、controll三部分组成。
model : 基本的实体类;
view : 相应的页面显示;
controller : 用于处理网站的请求;
二、创建基于 Maven 的 Web 项目
1.创建工程
打开 IntelliJ IDEA >> new project
project 命名,然后点 finish
创建完成后的目录如下:
修改 web.xml
,把
的值改为/
,用于拦截请求,交给Spring MVC 的后台控制器来处理
...
dispatcher
/
...
2.创建Controller 和 jsp页面
src 目录下创建 controller 目录,用于放置 controller 类,并创建一个 LoginController 类
LoginController 类中添加的代码
package controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Created by peter on 2017/9/29.
*/
@Controller
@RequestMapping(value = "/login", method = RequestMethod.GET)
public class LoginController {
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String loginSucc(ModelMap model) {
model.addAttribute("userId", "hfie");
model.addAttribute("name", "lugq");
return "success";
}
}
在web/WEB-INF
中创建一个 jsp
目录,创建 login.jsp
3.配置dispatcher-servlet.xml
前缀 dispatcher
对应web.xml
中的
三、注解的介绍
1.@Controller
采用注解方式定义该类为处理请求的 Controller 类;
2.@RequestMapping
在Spring MVC
中使用 @RequestMapping
来映射请求。相当于Servlet中在web.xml中配置。
@RequestMapping(method=RequestMethod.GET)
method 用于指定该请求类型,一般为 get 和 post
value 和path 属性
@requestMapping
中的 value
和 path
属性,这两个属性作用相同,可以互换,如果仅有这一个属性,则可以省略。
1.作用在方法上:http://localhost/SpringMVC/login
@Controller
public class UserController {
@RequestMapping("/login")
public String login() {
return "success";
}
}
2.作用在Controller
类上:http://localhost/SpringMVC/user/login
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/login")
public String login() {
return "success";
}
}
作用在类上的第一层的 url 路径,作用在方法上的是第二层url路径。
四、框架中的 ModelAndroidView、Model、 ModelMap
1.ModelMap
ModelMap 实现了 Map 接口,包含addAttribute、addAttributes 方法。
用于传递控制方法处理数据到结果页面,换而言之把结果页面上需要的数据放到 ModelMap 对象中即可。
五、遇到的错误
1.端口占用
IntelliJ运行Java Web程序的时候会开启新的Tomcat实例,很可能会和之前运行的Tomcat实例发生冲突,解决冲突的最快的办法通常是直接把之前运行的Tomcat shutdown掉。
[2017-09-29 03:40:48,069] Artifact Demo:war exploded: Artifact is being deployed, please wait...
错误: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is:
java.net.BindException: Address already in use
查看占用该端口的进程
lsof -i tcp:1099
kill 掉该进程
peter:~ peter$ lsof -i tcp:1099
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 20305 peter 23u IPv6 0xaa99c1ef5f15c5f1 0t0 TCP *:rmiregistry (LISTEN)
peter:~ peter$ kill -9 20305
2.新建的项目运行显示404
新建的项目,运行后就显示 404
不能startup.sh
启动Tomcat
,在IDEA 中直接自己启动,否则就会404.
如果已经手动startup.sh
,就在./shutdown.sh
停止Tomcat
3. during artifact deployment
新建了一个 spring MVC 项目,无改动的情况下,运行,报错如下:
Artifact HellowSpring:war exploded: Error during artifact deployment. See server log for details.
或者如下
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
解决:
点击Project Structure
如下图,发现了异常
点击Add missing ....
然后apply
再启动tomcat