其他分享
首页 > 其他分享> > springMVC项目流程

springMVC项目流程

作者:互联网

springMVC流程:

简介:学习动力节点springMVC笔记记录01

1、依赖pom.xml文件
<?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.fridas</groupId>
  <artifactId>springmvc-01</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.3.16</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>
2、默认的容器配置文件web.xml
<!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>
    <!--申明springMVC的核心对象-->
    <servlet>
        <servlet-name>mySpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--自定义配置文件位置-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
        <!--表示服务器tomcat创建对象的顺序,大于等于0的整数值,数值越小创建越早-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <!--将一些请求交给mySpringMVC处理,
            不使用 *.do 而使用 / 后就可以后续直接访问请求,不需要加自定义的后缀,
            但需要在spring配置文件中配置静态资源访问
            下面例中:student/add.do可以直接使用student/add
        -->
        <servlet-name>mySpringMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>

3、自定义配置文件路径
<?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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <!--申明组件扫描器-->
    <context:component-scan base-package="com.fridas.controller"/>
    <!--申明视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--前缀:指定视图文件路径-->
        <property name="prefix" value="/WEB-INF/view/"/>
        <!--后缀:指定视图文件拓展名-->
        <property name="suffix" value=".jsp"/>
    </bean>
    <!--申明注解驱动:resources和@RequestMapping使用冲突-->
    <mvc:annotation-driven />
    <!--申明静态资源的第二种处理方式,推荐,也需要加注解驱动annotation-driven
        mapping:访问静态资源的url地址,可以使用通配符:** ,表示任意目录和目录中的资源名称
        location:静态资源在项目中的位置,不要使用/WEB-INF目录,可以将静态文件都放在一个static目录下
    -->
    <mvc:resources mapping="/static/**" location="/static/" />
</beans>
4、前端控制器index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>注解开发第一个springMVC</title>
</head>
<body>
    <p>MyController控制器处理的相关请求:</p><br/>
    <p>一、指定请求方式</p><br/>
    <a href="some.do">发起some.do的get请求</a>
    <br/>
    <br/>
    <form action="other.do" method="post">
        <input type="submit" value="post请求">
    </form>
    <p>二、不指定请求方式</p><br/>
    <a href="first.do">发起first.do的get请求</a>
    <br/>
    <br/>
    <form action="first.do" method="post">
        <input type="submit" value="post请求">
    </form>
    <br/>

    <p>StudentController控制器处理的相关请求:</p><br/>
    <a href="student/add.do">发起一个student/add.do的请求</a>
    <br/>
    <a href="student/delete.do">发起一个student/delete.do的请求</a>
    <br/>

    <img src="static/images/p3.jpg" alt="图片未显示">

</body>
</html>

5.1、后端控制器MyController
package com.fridas.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;

/**
 * @Description: @Controller:创建控制器(处理器)对象
 **/
@Controller
public class MyController {
    /**
     * 自定义方法,处理请求
     * @RequestMapping 请求映射,
     * 属性:value,请求中的url地址,唯一值,以 / 开头
     * 属性:method,指定请求的访问方式,常用GET、POST、PUT、DELETE
     */
    @RequestMapping(value = "/some.do", method = RequestMethod.GET)
    public ModelAndView doSome() {
        System.out.println("注解执行doSome的方法");
        /*调用service对象,处理请求,返回结果*/
        ModelAndView modelAndView = new ModelAndView();
        /*添加数据*/
        modelAndView.addObject("msg", "处理了some.do的请求");
        modelAndView.addObject("fun", "执行了doSome的方法");
        /**
         * 指定视图,setViewName("视图的完整路径")
         * 相当于modelAndView.setViewName("/WEB-INF/view/show.jsp");
         */
        modelAndView.setViewName("show");
        return modelAndView;
    }

    @RequestMapping(value = "/other.do", method = RequestMethod.POST)
    public ModelAndView doOther() {
        System.out.println("注解执行doOther的方法");
        /*调用service对象,处理请求,返回结果*/
        ModelAndView modelAndView = new ModelAndView();
        /*添加数据*/
        modelAndView.addObject("msg", "处理了other.do的请求");
        modelAndView.addObject("fun", "执行了doOther的方法");
        /**
         * 指定视图,相当于modelAndView.setViewName("/WEB-INF/view/other.jsp");
         */
        modelAndView.setViewName("other");
        return modelAndView;
    }

    @RequestMapping(value = "/first.do")
    public ModelAndView doFirst() {
        System.out.println("注解执行doFirst的方法");
        /*调用service对象,处理请求,返回结果*/
        ModelAndView modelAndView = new ModelAndView();
        /*添加数据*/
        modelAndView.addObject("msg", "处理了first.do的请求");
        modelAndView.addObject("fun", "执行了doFirst的方法");
        /**
         * 指定视图,相当于modelAndView.setViewName("/WEB-INF/view/other.jsp");
         */
        modelAndView.setViewName("other");
        return modelAndView;
    }
}
6.1、视图页面show.jsp 和other.jsp

show.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>show</title>
</head>
<body>
    /WEB-INF/view/show.jsp ,显示request作用域中的数据 <br/>
    <h3>msg数据:${msg}</h3>
    <h3>fun数据:${fun}</h3>
</body>
</html>

other.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>other</title>
</head>
<body>
    /WEB-INF/view/other.jsp ,显示request作用域中的数据注解开发 <br/>
    <h3>msg数据:${msg}</h3>
    <h3>fun数据:${fun}</h3>

</body>
</html>
5.2、后端控制器StudentController
@Controller
@RequestMapping(value = "/student")
public class StudentController {
    @RequestMapping(value = "/add.do")
    public ModelAndView doAdd(){
        System.out.println("注解执行doAdd的方法");
        /*调用service对象,处理请求,返回结果*/
        ModelAndView modelAndView = new ModelAndView();
        /*添加数据*/
        modelAndView.addObject("msg","处理了/student/add.do的请求");
        modelAndView.addObject("fun","执行了doAdd的方法");
        /**
         * 指定视图,setViewName("视图的完整路径")
         * 相当于modelAndView.setViewName("/WEB-INF/view/add.jsp");
         */

        modelAndView.setViewName("add");
        return modelAndView;
    }
    @RequestMapping(value = "/delete.do")
    public ModelAndView doDelete(){
        System.out.println("注解执行doDelete的方法");
        /*调用service对象,处理请求,返回结果*/
        ModelAndView modelAndView = new ModelAndView();
        /*添加数据*/
        modelAndView.addObject("msg","处理了/student/delete.do的请求");
        modelAndView.addObject("fun","执行了doDelete的方法");
        /**
         * 相当于modelAndView.setViewName("/WEB-INF/view/delete.jsp");
         */
        modelAndView.setViewName("delete");
        return modelAndView;
    }
}
6.2、视图页面add.jsp和delete.jsp

add.jsp:

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

/WEB-INF/view/add.jsp ,显示request作用域中的数据注解开发 <br/>
<h3>msg数据:${msg}</h3>
<h3>fun数据:${fun}</h3>

</body>
</html>

delete.jsp:

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

/WEB-INF/view/delete.jsp ,显示request作用域中的数据注解开发 <br/>
<h3>msg数据:${msg}</h3>
<h3>fun数据:${fun}</h3>

</body>
</html>

注意:

1.jsp中${}中的数据不显示错误

<h3>msg数据:${msg}</h3>

显示:msg数据:${msg},而不显示msg的值。
原因:EL功能默认关闭,需加入

<%@page isELIgnored="false"%>

标签手动开启EL功能。

2.tomcat请求参数乱码处理

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false" %>
<html>
<head>
    <title>请求参数</title>
</head>
<body>
<p>一、逐个接收请求参数</p>
<form action="receive-property.do" method="post">
    姓名:<input type="text" name="name">  <br/>
    年龄:<input type="text" name="age">  <br/>
    <input type="submit" value="提交参数">
</form>
</body>
</html>

表单post请求输入为中文时,返回中文乱码,get则无乱码。解决方法如下:
在web.xml配置文件中添加过滤器

  <!--申明过滤器,解决post请求中乱码问题-->
  <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>
    <!--强制请求及应答(request & response)对象使用encoding的编码方式-->
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <!--强制所有请求,先经过过滤器处理-->
    <url-pattern>/*</url-pattern>
  </filter-mapping>

但在Tomcat下运行时,对于GET请求参数的处理和POST参数不同,会出现POST中文参数正常,但是GET请求中文参数乱码的情形。GET通过url传递参数值,则需修改tomcat的server.xml文件Connector的URIEncoding属性为UTF-8。

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" URIEncoding="UTF-8"/>

3、控制器方法返回对象转为json步骤:

1)pom.xml加入jackson依赖,springmvc框架默认处理json使用jackson

 <!--jackson依赖-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.12.5</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.5</version>
        </dependency>

2)在springmvc配置文件中,加入注解驱动标签mvc:annotation-driven

    <!--申明注解驱动:创建HttpMessageConverter接口的7个实现类对象-->
    <mvc:annotation-driven />

3)在控制器方法的上面加入@ResponseBody注解,表示返回值数据,输出到浏览器

4、ajax请求中文乱码

需要在MyController后端控制器中@RequestMapping注解增加produce属性:produces = "text/plain;charset=utf-8"

   /**
     * 控制器方法返回数据
     * 区分返回值string是数据还是视图:
     *    方法上有@ResponseBody注解是数据,没有则是视图
     * 解决中文乱码:
     *    produces属性:指定content-type的值
     */
    @RequestMapping(value = "/stringData.do",produces = "text/plain;charset=utf-8")
    @ResponseBody
    public String doStringData(){
        System.out.println("控制器方法返回string,是数据");
        return "Hello SpringMVC注解式开发";
    }

index.jsp

<html>
<head>
    <title>控制器方法返回值</title>
    <script type="text/javascript" src="js/jquery-3.4.1.js"></script>
    <script type="text/javascript">
        $(function () {
            /*绑定事件*/
            $("#btnAjax").on("click", function () {
                $.ajax({
                    url:"stringData.do",
                    data: {
                        name: "张三",
                        age: 23
                    },
                    dataType:"text",
                    success: function (resp) {
                        alert("resp=" + resp)
                    }
                })
            })
        })
    </script>
</head>

<body>
<p>控制器方法返回string,ajax请求</p>
<button id="btnAjax">发起ajax请求</button>
</body>
</html>

标签:do,请求,项目,springMVC,流程,jsp,ModelAndView,msg,modelAndView
来源: https://www.cnblogs.com/fridas/p/16067650.html