Sprint MVC 入门

  1. 云栖社区>
  2. 博客>
  3. 正文

Sprint MVC 入门

路国强 2017-10-02 21:48:00 浏览855
展开阅读全文
img_66cdd311cf085384b91c18e9747e7e1e.png
目录.png

一、Spring MVC 简介

Spring MVC 框架包括 model 、view 、controll三部分组成。

model : 基本的实体类;
view : 相应的页面显示;
controller : 用于处理网站的请求;


二、创建基于 Maven 的 Web 项目

1.创建工程

打开 IntelliJ IDEA >> new project

img_873f513b1656d225914a71cf7c503017.png
image.png

project 命名,然后点 finish


img_b02abfce682bce594bf2ceb6ed50cfca.png
image.png

创建完成后的目录如下:

img_0baec37dd3c0aa68e623648f033092f6.png
image.png

修改 web.xml,把<url-pattern>的值改为/,用于拦截请求,交给Spring MVC 的后台控制器来处理

...
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>
...

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

img_3e2f5efd3c8405b4ee1d60518e4878dd.png
image.png

3.配置dispatcher-servlet.xml

前缀 dispatcher对应web.xml中的<servlet-name>

<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   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-3.0.xsd
   http://www.springframework.org/schema/context 
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">

   <context:component-scan base-package="controller" />

   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/WEB-INF/jsp/" />
      <property name="suffix" value=".jsp" />
   </bean>
 
</beans>

三、注解的介绍

1.@Controller

采用注解方式定义该类为处理请求的 Controller 类;


2.@RequestMapping

Spring MVC中使用 @RequestMapping 来映射请求。相当于Servlet中在web.xml中配置。

@RequestMapping(method=RequestMethod.GET)method 用于指定该请求类型,一般为 get 和 post

value 和path 属性
@requestMapping中的 valuepath属性,这两个属性作用相同,可以互换,如果仅有这一个属性,则可以省略。

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

img_72ed57d2e84d9346bb25027506a61c9c.png
image.png

不能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

img_a8bbb5725a6910564327433416be542a.png
image.png

如下图,发现了异常

img_87736df32c5c4d32047fb9b08fd4e503.png
image.png

点击Add missing .... 然后apply 再启动tomcat

img_4b06bbb4ea677800d9c0361da8bd2daf.png
image.png

网友评论

登录后评论
0/500
评论
路国强
+ 关注