springMVC学习笔记

官方文档地址:https://docs.spring.io/spring/docs/current/spring-framework-reference/web.html#mvc

使用spring注解开发

步骤:
1、新建web项目(将简单的maven项目添加框架)
2、导入相关的jar包

<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
</dependency>
</dependencies>

3、编写web.xml文件,注册DispatcherServlet(类似mvc中的注册servlet)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--配置DispatchServlet;这个是springMVC的核心,请求分发器,前端控制器-->
<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> <!--在springMVC中,/:代表匹配所有的请求,不包括jsp页面。/*:匹配所有的请求,包括jsp-->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> </web-app>

4、编写springmvc配置文件

<?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.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <!--自动扫描包,让指定包下的注解生效,有ioc容器统一管理-->
<context:component-scan base-package="com.zheng.controller"/>
<!--让springmvc 不处理静态资源-->
<mvc:default-servlet-handler/>
<mvc:annotation-driven/> <!--视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--前缀-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--后缀-->
<property name="suffix" value=".jsp"/>
</bean> <!--BeanNameUrlHandlerMapping--> </beans>

5、创建对应的控制类,controller

6、构造前端视图和controller之间的对应

//代表这个类会被spring接管,被这个注解的类中的所有方法,如果返回值是string,并且有具体页面可以跳转,那么就会被视图解析器解析
@Controller
public class HelloController { @RequestMapping("/hello")
public String hello(Model model){
//封装数据
model.addAttribute("msg","hello springMVC");
return "hello"; }
}

7、测试

8、项目结构

使用springMVC必须配置的三部分

  • 处理器映射器
  • 处理器适配器
  • 视图解析器

注意RequestMapper说明

@Controller
@RequestMapping("c3")
public class ControllerTest3 {
@RequestMapping("/t3")
public String tset3(Model model){
model.addAttribute("msg","hello test3");
return "test";
}
}

如果RequestMapping写在类名之上,则在访问的时候需要带上它,例如/c3/t3.
一般而言只写在方法名上即可。

在测试的时候:访问出现404
1、查看控制台报的错误,缺少jar包,导入相应的jar包即可
2、jar包存在,在IDEA的项目中、添加lib依赖
【file–>project structure–>artifacts–>选中对应的项目–>Output layout–>WEB-INF–>新建lib文件夹–>点击上方的加号+添加library files所有的包到lib】

ResultFul风格

package com.zheng.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*; @Controller
public class ResultController { // @GetMapping("/add/{a}/{b}") //http://localhost:8080/springMVC/add/6/9
public String test1(@PathVariable int a, @PathVariable String b, Model model){
String res=a+b;//数字和字符串拼接
model.addAttribute("msg","test1"+res);
return "test"; } @RequestMapping(path = "/add/{a}/{b}",method = RequestMethod.GET) //http://localhost:8080/springMVC/add/4/7
public String test2(@PathVariable int a,@PathVariable String b,Model model){
String res=a+b;
model.addAttribute("msg","test2:"+res);
return "test";
}
//http://localhost:8080/springMVC/add?a=2&b=4
// @RequestMapping("/add")
public String test(int a,int b, Model model){
int res=a+b;//数字和字符串拼接
model.addAttribute("msg","结果="+res);
return "test"; }
}

一般的资源访问是: //http://localhost:8080/springMVC/add?a=2&b=4
使用规范后的是://http://localhost:8080/springMVC/add/4/7

重定向和转发

package com.zheng.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class ModelTest { //此时视图解析器被注释掉
@RequestMapping("/m/t")
public String test(Model model){
model.addAttribute("msg","ModelTest1");
return "forward:/WEB-INF/jsp/test.jsp"; //转发的形式,没有视图解析的情形,地址栏不变
} @RequestMapping("/t")
public String test2(Model model){
model.addAttribute("msg","test2");
return "redirect:/index.jsp";//重定向,没有视图解析的情形,地址栏改变 } }

乱码问题

配置tomcat,打开tomcat文件下的conf–》server。

  • 添加【URIEncoding=“UTF-8”】到对应的文件位置
<Connector port="8080" URIEncoding="UTF-8" redirectPort="8443" connectionTimeout="20000" protocol="HTTP/1.1"/>

后端框架学习3------SpringMVC的更多相关文章

  1. 后端框架学习1-----Spring

    Spring学习笔记 spring全家桶:https://www.springcloud.cc/spring-reference.html spring中文文档:http://c.biancheng. ...

  2. 后端框架学习-----mybatis(使用mybatis框架遇到的问题)

    1.配置文件没有注册(解决:在核心配置文件中注册mapper,注册有三种形式.资源路径用斜杆,包和类用点) <mappers> <!--每一个mapper.xml文件都需要在myba ...

  3. 后端框架学习-----mybatis(4)

    文章目录 4.解决属性名和字段名不一致的问题 4.解决属性名和字段名不一致的问题 1.问题.数据库字段名和属性名不一致,导致查出的数据部分为空 2.resultMap(用于解决数据库表中的字段和属性) ...

  4. Spring框架学习笔记(3)——SpringMVC框架

    SpringMVC框架是基于Spring框架,可以让我们更为方便的进行Web的开发,实现前后端分离 思路和原理 我们之前仿照SpringMVC定义了一个自定义MVC框架,两者的思路其实都是一样的. 建 ...

  5. 第65节:Java后端的学习之Spring基础

    Java后端的学习之Spring基础 如果要学习spring,那么什么是框架,spring又是什么呢?学习spring中的ioc和bean,以及aop,IOC,Bean,AOP,(配置,注解,api) ...

  6. 整合SSM框架必备基础—SpringMVC(下)

    在上一篇文章<整合SSM框架必备基础-SpringMVC(上)>中,胖达介绍了关于SpringMVC的诞生.优势以及执行流程等理论知识点,这篇文章打算在实操中加深一下对SpringMVC的 ...

  7. 适合普通大学生的 Java 后端开发学习路线

    大家好,我是帅地. 接下来的一段时间,帅地会总结各种技术栈的学习路线,例如 Java 开发,C++ 开发,python 开发,前端开发等等,假如你没有明确的目标,或许可以按照我说的学习路线来学习一波, ...

  8. JavaSE中Collection集合框架学习笔记(2)——拒绝重复内容的Set和支持队列操作的Queue

    前言:俗话说“金三银四铜五”,不知道我要在这段时间找工作会不会很艰难.不管了,工作三年之后就当给自己放个暑假. 面试当中Collection(集合)是基础重点.我在网上看了几篇讲Collection的 ...

  9. Java后端框架之Spring Boot详解,文末有Java分布式实战项目视频可取

    在 Java 后端框架繁荣的今天,Spring 框架无疑是最最火热,也是必不可少的开源框架,更是稳坐 Java 后端框架的龙头老大. 用过 Spring 框架的都知道 Spring 能流行是因为它的两 ...

随机推荐

  1. 项目经验记录丨Modbus转EtherNET/IP协议转换应用

    使用电脑通过软件来进行模拟 EtherNET/IP主站连接Mdodbus从站设备的项目记录.使用软件为EIPScan 模拟主站,通过Modbus转EtherNET/IP网关连接Modbus Slave ...

  2. 封装Fraction-分数类(C++)

    Fraction 分数类 默认假分数,可自行修改 由于concept的原因 template <typename T> concept is_float_v = std::is_float ...

  3. ceph 010 clustermap ceph调优

    cluster map [ceph: root@clienta /]# ceph mon dump epoch 4 fsid 2ae6d05a-229a-11ec-925e-52540000fa0c ...

  4. spring-aop-事务-注解开发-代理

    1.spring + mybatis: Aop流程: 提前定义好几个用于Aop的类 前置通知:新建MyBeForeAdvice类 实现 MethodBeforeAdvice,并实现其方法 后置通知:新 ...

  5. Python小游戏——外星人入侵(保姆级教程)第一章 03设置飞船图片 04创建Ship类

    系列文章目录 第一章:武装飞船 03:设置飞船图片 04:创建Ship类--管理飞船行为的类 一.设置飞船图片 1.注意事项 A.将图片设置为位图bmp格式最简单,因为pygame默认加载位图 B.飞 ...

  6. Springboot+MybatisPlus多数据源比对数据

    欢迎关注博主公众号「Java大师」, 专注于分享Java领域干货文章https://www.javaman.cn/ 基于不同的数据源进行数据比对,比较两个数据库的表之间数据的总量,以及处理后的总量,按 ...

  7. 刨析一下C++构造析构函数能不能声明为虚函数的背后机理?

    以下内容为本人的著作,如需要转载,请声明原文链接微信公众号「englyf」https://www.cnblogs.com/englyf/p/16631774.html 先说结论: 构造函数不能声明为虚 ...

  8. 没有二十年功力,写不出Thread.sleep(0)这一行“看似无用”的代码!

    你好呀,我是喜提七天居家隔离的歪歪. 这篇文章要从一个奇怪的注释说起,就是下面这张图: 我们可以不用管具体的代码逻辑,只是单单看这个 for 循环. 在循环里面,专门有个变量 j,来记录当前循环次数. ...

  9. Currtid 函数与性能问题

    对于Oracle ,一条tuple 的 rowid正常是不会变化的(引发row movement的操作除外,如:跨分区迁移update,表收缩),因此,应用设计上可以方便的使用rowid,加快访问速度 ...

  10. Batch Norm 与 Layer Norm 比较

    一.结论 Batch Norm一般用于CV领域,而Layer Norm一般用于NLP领域 Batch Norm需要计算全局平均,而Layer Norm不需要计算全局平均 二.Batch Norm Ba ...