SpringMVC入門

SpringMVC(用于表現(xiàn)層)概述


  1. 是一種基于Java實(shí)現(xiàn)的MVC設(shè)計(jì)模型的請(qǐng)求驅(qū)動(dòng)類型的輕量級(jí)WEB框架。
  2. Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring 框架提供
    了構(gòu)建 Web 應(yīng)用程序的全功能 MVC 模塊。
  3. 使用 Spring 可插入的 MVC 架構(gòu),從而在使用Spring進(jìn)行WEB開發(fā)時(shí),可以選擇使用Spring的
    SpringMVC框架或集成其他MVC開發(fā)框架,如Struts1(現(xiàn)在一般不用),Struts2等。

SpringMVC入門


解決maven加載webapp過(guò)慢問(wèn)題
---archetypeCatalog
---internal

需引入spring-context、spring-web、spring-webmvc、servlet-api以及jsp-api
maven引入所需的jar

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.ygg</groupId>
    <artifactId>yggtzsj</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>war</packaging>

    <name>yggtzsj Maven Webapp</name>
    <!-- FIXME change it to the project's website -->
    <url>http://www.example.com</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
        <spring-version>5.0.2.RELEASE</spring-version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <finalName>yggtzsj</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
            <plugins>
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                </plugin>
                <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>3.0.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.8.0</version>
                </plugin>
                <plugin>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.1</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>3.2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-install-plugin</artifactId>
                    <version>2.5.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-deploy-plugin</artifactId>
                    <version>2.8.2</version>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

web.xml配置Servlet的映射

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
<!--  SpringMVC核心控制器-->
  <servlet>
    <servlet-name>dispatcherServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- 配置Servlet的初始化參數(shù),讀取springmvc的配置文件,創(chuàng)建spring容器 -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!-- 配置servlet啟動(dòng)時(shí)加載對(duì)象 -->
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>dispatcherServlet</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

配置SpringMVC.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       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.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <!-- 開啟注解掃描 -->
    <context:component-scan base-package="com.ygg"/>

    <!-- 視圖解析器對(duì)象 -->
    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/pages/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 開啟SpringMVC框架注解的支持 -->
    <mvc:annotation-driven></mvc:annotation-driven>

</beans>

目錄結(jié)構(gòu)如下:


配置前端控制器的class文件

package com.ygg.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 控制器
 * @author rt
 */
@Controller
public class HelloController {
    /**
     * 接收請(qǐng)求
     * @return
     */
    @RequestMapping(path = "/hello")
    public String sayHello() {
        System.out.println("Hello SpringMVC!!");
        return "success";
    }
}

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h3>入門成功</h3>

</body>
</html>

success.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h3>入門成功</h3>

</body>
</html>

配置完成
開始驗(yàn)證是否配置成功


SpringMVC的請(qǐng)求流程



請(qǐng)求綁定入門


一. 綁定機(jī)制

  1. 表單提交的數(shù)據(jù)都是k=v格式的 username=haha&password=123
  2. SpringMVC的參數(shù)綁定過(guò)程是把表單提交的請(qǐng)求參數(shù),作為控制器中方法的參數(shù)進(jìn)行綁定的
  3. 要求:提交表單的name和參數(shù)的名稱是相同的
    二. 支持的數(shù)據(jù)類型
  4. 基本數(shù)據(jù)類型和字符串類型
  5. 實(shí)體類型(JavaBean)
  6. 集合數(shù)據(jù)類型(List、map集合等)
    三. 實(shí)體類型(JavaBean)
  7. 提交表單的name和JavaBean中的屬性名稱需要一致
  8. 如果一個(gè)JavaBean類中包含其他的引用類型,那么表單的name屬性需要編寫成:對(duì)象.屬性 例如:address.name

創(chuàng)建Account類作為JavaBean

package com.ygg.domain;

import java.io.Serializable;

public class Account implements Serializable {
    private String username;
    private String password;
    private String money;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getMoney() {
        return money;
    }

    public void setMoney(String money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Account{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", money='" + money + '\'' +
                '}';
    }
}

param.jsp來(lái)發(fā)送數(shù)據(jù)

<%--請(qǐng)求參數(shù)的綁定--%>
<%--<a href="param/testParam?username=hehe">請(qǐng)求參數(shù)綁定</a>--%>

<form action="/param/saveAccount" method="post">
    姓名:<input type="text" name="username"/><br/>
    密碼:<input type="text" name="password"/><br/>
    金額:<input type="text" name="money"/><br/>
    <input type="submit" value="提交" />
</form>

ParamController類作為前端控制器

package com.ygg.controller;

import com.ygg.domain.Account;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/param")
public class ParamController {

    @RequestMapping("/testParam")
    public String testParam(String username){
        System.out.println("執(zhí)行了...");
        System.out.println(username);
        return "success";
    }

    @RequestMapping("/saveAccount")
    public String saveAccount(Account account){//這里直接引入Account它能自動(dòng)封裝
        System.out.println("賬戶數(shù)據(jù)"+account);
        return "success";
    }
}

解決中文亂碼問(wèn)題


配置一個(gè)解決亂碼的過(guò)濾器

<!--  解決中文亂碼-->
  <filter>
    <filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 額(⊙o⊙)…繼續(xù)記筆記。。??纯碨pringMVC從入門到放棄之第一章Web MVC簡(jiǎn)介一個(gè)在實(shí)驗(yàn)室的時(shí)候就是這...
    鍵盤瞎閱讀 2,171評(píng)論 2 10
  • 一.SpringMVC是什么 Spring Web MVC是一種基于Java的實(shí)現(xiàn)了Web MVC設(shè)計(jì)模式的請(qǐng)求驅(qū)...
    zlb閱讀 418評(píng)論 0 2
  • 簡(jiǎn)介 三層架構(gòu)是什么 三層架構(gòu)分別是表現(xiàn)層、業(yè)務(wù)層和持久層。表現(xiàn)層也就是我們常說(shuō)的web層,負(fù)責(zé)接收客戶端的請(qǐng)求,...
    iDevOps閱讀 127評(píng)論 0 1
  • 對(duì)于java中的思考的方向,1必須要看前端的頁(yè)面,對(duì)于前端的頁(yè)面基本的邏輯,如果能理解最好,不理解也要知道幾點(diǎn)。 ...
    神尤魯?shù)婪?/span>閱讀 901評(píng)論 0 0
  • 螞蟻私塾的《好奇心》 拆解到第三天,提到了原生家庭對(duì)孩子好奇心的影響。平時(shí)要注意保護(hù)孩子的好奇心,孩子有問(wèn)題的時(shí)候...
    孤飛雁兒閱讀 230評(píng)論 0 0

友情鏈接更多精彩內(nèi)容