Springmvc入门(含源码)

目录

 

简介

 MVC框架共同特征

Springmvc示例

 Spring Web MVC处理请求的流程(执行原理)

SpringMVC的优点

SpringMVC解决中文乱码

常见注解

源码


简介

Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。使用 Spring 可插入的 MVC 架构,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1(现在一般不用),Struts2(一般老项目使用)等。

 MVC框架共同特征

看一下这几个问题:

怎么进行请求分发(url定位到一个Java类的方法)?

表单参数如何获取?

如何跳转到对应的页面?

跳转到页面时怎么传递参数?

Springmvc示例

1、搭建环境,创建maven项目

完善目录结构

 

添加坐标依赖

<!-- springMVC核心包 -->
<dependency>
   <groupId>org.springframework</groupId>
   <artifactId>spring-webmvc</artifactId>
   <version>4.2.4.RELEASE</version>
</dependency>
<!-- 日志文件管理包 -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-api</artifactId>
  <version>1.7.12</version>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.12</version>
</dependency>

 强制发布到tomcat上,不加可能会产生类找不到的错

<resources>
  <resource>
    <directory>src/main/java</directory>
    <includes>
      <include>**/*.xml</include>
      <include>**/*.properties</include>
    </includes>
    <filtering>false</filtering>
  </resource>
  <resource>
    <directory>src/main/resources</directory>
    <includes>
      <include>**/*.xml</include>
      <include>**/*.properties</include>
    </includes>
    <filtering>false</filtering>
  </resource>
</resources>
log4j.properties
### 日志级别 目的地  ###
log4j.rootLogger=debug, stdout,logfile
### 控制台  ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
### 文件 第二行是文件名称###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=log4j.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %l %F %p %m%n

整合好的jar

 2、创建springmvc配置文件,springMVC-servlet.xml

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
        http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <!-- 添加springmvc扫描器 -->
    <context:component-scan base-package="cn.sdut.demo"/>

</beans>

3、配置web.xml文件(通过前端核心控制器,加载springMVC-servler.xml配置文件)

<servlet>
  <servlet-name>springMVC</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:springMVC-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>springMVC</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping

4、添加测试页面

login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
    <style>
        .body{
            width: 300px;
            margin: 10px auto;
            border: 1px solid blue;
            padding: 40px;
        }
        input{
            margin-top: 10px;
            margin-bottom: 10px;
        }
        .input{
            text-align: center;
        }
    </style>
</head>
<body>
<div style="text-align: center;margin-top: 140px;font-size: larger;font-family: 微软雅黑">登 录</div>
<div class="body">
    <form action="login.do" method="post" >
        <div class="input">账 户:<input type="text" name="username" value="admin"/><br/></div>
        <div class="input">密 码:<input type="password" name="password" value="admin"/><br/></div>
        <div class="input"><input type="submit"  value="&nbsp;提&nbsp;&nbsp;&nbsp;&nbsp;交&nbsp;"/></div>
    </form>
</div>
</body>
</html>

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<body>
<h2>欢迎${username}登录成功!</h2>
</body>
</html>

5、控制器LoginController

package cn.sdut.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @author:hydra
 * @date:2019/12/3
 */

@Controller
public class LoginController {


    @RequestMapping("login.do")  //        取   接受前端参数
    public String login(@RequestParam("username") String user, String password, ModelMap map){
        //参数名不同时可以使用RequestParam

//        调  模拟调用服务层方法
        if (password.equals("admin")){
            //        存  存入会话域中
            map.put("username",user);
        }

//        转  跳转页面
        return "forward:index.jsp";
    }
}

6、运行程序

 

 Spring Web MVC处理请求的流程(执行原理)

 核心原理具体执行步骤如下:

  1. 用户发送请求给服务器。url:login.do
  2. 服务器收到请求。发现DispatchServlet可以处理。于是调用DispatchServlet。
  3. DispatchServlet内部,通过HandleMapping检查这个url有没有对应的Controller。如果有,则通过HangdlerAdapter调用Controller。
  4. Controller开始执行。
  5. Controller执行完毕后,如果返回字符串,则ViewResolver将字符串转化成相应的视图对象;如果返回ModelAndView对象,该对象本身就包含了视图对象信息。
  6. DispatchServlet将执视图对象中的数据,输出给服务器。
  7. 服务器将数据输出给客户端。

SpringMVC的优点

  1. Spring MVC使用简单,学习成本低。学习难度小于Struts2,Struts2用不上的多余功能太多。
  2. Spring MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分)
  3. Spring MVC的灵活是你无法想像的,Spring框架的扩展性好,Spring MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制
  4. 站在巨人的肩膀上成功的

SpringMVC解决中文乱码

在web.xml配置过滤器

<filter>
    <filter-name>EncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>EncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

常见注解

@Controller

  • spring中的注解,代表控制层
  • 配置文件加载时回new Bean

@RequestMapping

  • 配置请求的映射

@RequestParam

  • 页面的name属性属性与方法的参数名不一致时指明

@SessionAttributes

  • 将Model或者ModelMap中指定的属性放到session中

@ModelAttribute

  • 注解void返回值的方法
  • 定义一次,使用多次

看个例子 

User接口

controller层从前端接受参数,存入session域和request域中

@Controller
@SessionAttributes({"users"})/*将users对象放到session中*/
public class LoginController {

    /*注解返回值为void的方法,直接一次,使用多次*/
    @ModelAttribute
    public void populateModel(User user, Model model){
        user.setDate(new Date());
        model.addAttribute("users",user);
    }


    @RequestMapping("login.do")  //        取   接受前端参数
    public String login(/*@RequestParam("username") String user, String password, ModelMap map*/){
        //参数名不同时可以使用RequestParam

//        调  模拟调用服务层方法
      /*  if (password.equals("admin")){
            //        存  存入会话域中
            map.put("username",user);
        }*/

//        转  跳转页面
        return "index";
    }
}

 取参数

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<body>
<h2>欢迎${sessionScope.users}登录成功!</h2>
<h2>欢迎${requestScope.users}登录成功!</h2>
</body>
</html>

 

源码

百度网盘

提取码: b75u

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值