M---model 模型,即数据,就是dao和bean
V----view 视图 网页 jsp 用来展示数据的
c-controller 控制器 不同的数据,展示在不同的页面上
springmvc的核心说白了就是servlet,然后把之前mvc架构中的model层拆分成了业务层(Service)和数据访问层(Dao,Data Access Object)
springmvc是spring的一个模块
4.1.1 pom.xml中导入依赖
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.20version>
dependency>
<packaging>warpackaging>
若没有出现蓝色小圆点,你需要检查以下两点
1 pom.xml是否配置了打包方式为war
2 pom.xml内容变动后是否点击了右侧刷新小图标
<filter>
<filter-name>encodingfilter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
<init-param>
<param-name>encodingparam-name>
<param-value>utf-8param-value>
init-param>
filter>
<filter-mapping>
<filter-name>encodingfilter-name>
<url-pattern>/*url-pattern>
filter-mapping>
<servlet>
<servlet-name>mvcservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:/springMvc.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>mvcservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
a servlet-name标签里面的内容任意取,只是要求Servlet标签和Servlet-mapping标签里面的值要保持一致
b servlet-class里面可以写dispatcherServlet,然后回车后就会自动补全的
c url-pattern里面只能是/,一定不能/*.因为想要jsp页面正常展示
d /*和/的区别
简单来说就是/* 会拦截所有资源(包含jsp页面)
会拦截除了jsp页面之外的所有资源,例如:html,css,静态资源
这时图片资源可能会出现404错误,这时就需要我们去进行放行的配置了
f 服务器默认是第一次被调用时的初始化,但是我们想springmvc在服务器一启动的时候就初始化,
因此就需要做如下配置
contextConfigLocation
classpath:/springmvc.xml
其中param-name是固定写contextConfigLocation
param-value里面由两部分组成
第一部分是根据主配置文件的位置来的,因为笔者创建的主配置文件位于resource资源文件夹,隶属于src/main下面,
就是在src文件夹下的都要加classpath:,因此第一部分写的内容就是classpath:
第二部分是你所创建主配置文件(spring Config形式的)
h filter的配置是用于解决post请求乱码的问题
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
<context:component-scan base-package="com.controller">context:component-scan>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/">property>
<property name="suffix" value=".jsp">property>
bean>
package com.controller;
import org.springframework.stereotype.Controller;
/**
* Controller是语义化的,用于控制器组件的生成
*/
@Controller
public class UserController {
}
/*形参就是name属性*/
public String login1(String yhm, String pwd){
System.out.println("用户名:"+yhm);
System.out.println("密码:"+pwd);
/*跳到什么页面 就写什么名字 不要带上拓展名*/
/* return "jsp/b"*/
return "index";
}
b.1 里面的形参名需要与form表单里面的name属性要保证一致的
b.2 因为暂时没有前后端分离,此时方法的返回值可以用String
b.3 方法的返回值直接填需要跳转的jsp页面名称,不需要写扩展名,如果jsp页面在文件夹里头,那就
@RequestMapping(value = "/login1",method = {RequestMethod.POST,RequestMethod.GET},
params = {"yhm","pwd"},
)
b.1 value是配置访问该方法的地址,不必与方法名一致,访问的链接必须与其一致,不然就会访问错误
b.2 method是请求方式,多个请求可以用{}装,之中用,分隔
b.3 params是要求访问该地址必须要携带的两个参数,也是通过,进行分隔
package com.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class UserController {
@RequestMapping(value = "/login2",method = {RequestMethod.POST,RequestMethod.GET},
params = {"yhm","pwd"}
)
/*形参就是name属性*/
public String login1(String yhm, String pwd){
System.out.println("用户名:"+yhm);
System.out.println("密码:"+pwd);
/*跳到什么页面 就写什么名字 不要带上拓展名*/
/* return "jsp/b"*/
return "index";
}
}