Sprint MVC 入门

简介: 目录.png一、Spring MVC 简介Spring MVC 框架包括 model 、view 、controll三部分组成。model : 基本的实体类;view : 相应的页面显示;controller : 用于处理网站的请求;二、创建基于 Maven 的 Web 项目1.
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
目录
相关文章
|
JSON 前端开发 Java
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
Spring MVC入门必读:注解、参数传递、返回值和页面跳转(下)
112 0
|
17天前
|
前端开发 Java 数据库
SpringBoot入门 - 对Hello world进行MVC分层
SpringBoot入门 - 对Hello world进行MVC分层
37 3
SpringBoot入门 - 对Hello world进行MVC分层
|
29天前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
33 4
|
22天前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
15 1
 SpringBoot入门(3) - 对Hello world进行MVC分层
|
2月前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
41 1
SpringBoot入门(3) - 对Hello world进行MVC分层
|
1月前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
本文介绍了如何在Spring Boot项目中实现MVC分层架构,通过将代码划分为controller、service、dao和entity四个部分,实现高内聚低耦合的设计。示例项目包括用户增删查改功能,详细展示了各层的具体实现及运行测试。
39 11
|
1月前
|
前端开发 Java 数据库
SpringBoot入门(3) - 对Hello world进行MVC分层
SpringBoot入门(3) - 对Hello world进行MVC分层
20 2
|
4月前
|
前端开发 Java Spring
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
Java 新手入门:Spring Boot 轻松整合 Spring 和 Spring MVC!
70 0
|
6月前
|
JSON 前端开发 Java
Spring Web MVC入门(3)——响应
Spring Web MVC入门(3)——响应
57 1
|
6月前
|
存储 前端开发 Java
Spring Web MVC入门(2)——请求(下)
Spring Web MVC入门(2)——请求
54 0