Table of Contents
2):框架自身可能要写什么(springmvc的前端控制器的配置)
5.4:consumes:只接受内容类型是哪种的请求,规定请求头中的Content-Type
5.5:produces:告诉浏览器返回的内容类型是什么,给响应头中加上Content-Type:text/html;charset=utf-8
一:springMVC简介
1:是Spring实现web模块的;简化web开发的
2:传统的MVC
3:springMVC下的MVC
二:springMVC的HelloWorld
1:普通web模式下
1.1:选择spring模块
1.2:选择项目位置
1.3:系统自动下载jar包
1.4:加入jar包依赖
1.5:配置tomcat(也可以不配置,一会自己加)
1.6:修改web.XML
1.7:springMVC的配置
在dispatcher-servlet.xml配置spring mvc相关的。如:扫描的基包、页面访问位置及后缀。
如果你的取得名字是HelloMVC,那么与其对应的servlet名字必须是:HelloMVC-servlet.xml。格式是:自定义名称-servlet.xml
HelloMVC-servlet内容如下:
需要说明的是:先引入context及mvc之后,下面就可以联想出来了。
1.8:写一个controller
1.9:部署项目
启动:
注:如果有的报错:记得修复Artifacts(目的就是将lib下的jar包,加入web-info下)
2:使用maven工具
2.1:创建项目
2.2:添加依赖
我们打开其中的pom.xml,添加我们的依赖。这里我把我的依赖全部放出来,复制到你的pom.xml的dependencies标签之间就可以了,pom文件中也会给你一个示例。
我们今天做最简单的helloworld,只需要导入webmvc即可
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.6.RELEASE</version> </dependency> </dependencies>
2.3:添加框架支持
配置完pom.xml之后,我们在idea中要添加一下框架的支持。右击我们的项目文件夹,选择add framework support
将下图中的Spring和Spring下的Spring MVC都勾上,之前配置pom.xml文件时,已经自动下载了spring相关文件,所以这里就直接用之前下载好的就可以了,OK。(注意:点了Add framework support之后,在下图中有可能会找不到Spring,解决办法在下图的下方
如果在Add framework support中找不到Spring,那是因为项目中可能已经存在Spring相关文件,但不一定是完善的。因此我们要将已经存在的Spring给删掉,重新添加,方法如下:
点击File,选择Project Structure,(快捷键ctrl+shift+alt+s)选择Facets,就会看到有一个Spring啦,右击它,点删除就行啦,然后再回到上面第3步重新Add framework support,Spring就会出现啦。
可以看到新增了两个xml文件,并且我也调整了一下包结构
2.4:修改web.XML
2.5:springMVC的配置
在dispatcher-servlet.xml配置spring mvc相关的。如:扫描的基包、页面访问位置及后缀。
如果你的取得名字是HelloMVC,那么与其对应的servlet名字必须是:HelloMVC-servlet.xml。格式是:自定义名称-servlet.xml
HelloMVC-servlet内容如下:
需要说明的是:先引入context及mvc之后,下面就可以联想出来了。
2.6:写一个controller
2.7:部署项目
启动:
3:总结springmvc的HelloWord
1:导包:
spring-beans-4.0.0.RELEASE.jar
spring-context-4.0.0.RELEASE.jar
2:写配置:
1)web.xml可能要写什么
配置springmvc的前端控制器,指定springmvc配置文件位置
<?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">
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!--contextConfigLocation:spring本身的框架配置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--在dispatcher-servlet.xml配置spring mvc相关的。如:扫描的基包、页面访问位置及后缀。
如果你的取得名字是HelloMVC,那么与其对应的servlet名字必须是:HelloMVC-servlet.xml。
格式是:自定义名称-servlet.xml-->
<!--<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>-->
<!-- servlet启动加载,servlet原本是第一次访问创建对象;
load-on-startup:服务器启动的时候创建对象;值越小优先级越高,越先创建对象;
-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<!--
/*和/都是拦截所有请求; /:会拦截所有请求,但是不会拦截*.jsp;能保证jsp访问正常;
/*的范围更大;还会拦截到*.jsp这些请求;一但拦截jsp页面就不能显示了;
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
去掉注释就是这样:
<servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
2):框架自身可能要写什么(springmvc的前端控制器的配置)
在dispatcher-servlet.xml配置spring mvc相关的。如:扫描的基包、页面访问位置及后缀。
如果你在web.xml中取得名字是HelloMVC,那么与其对应的servlet名字必须是:HelloMVC-servlet.xml。 格式是:自定义名称-servlet.xml,这样就可以在web.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"
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-4.0.xsd">
<!--扫描包-->
<context:component-scan base-package="com.wkl"></context:component-scan>
<!--指定视图解析器的前后缀-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/pages/"/>
<property name="suffix" value=".jsp"/>
</bean>
</beans>
3: 测试
@Controller
public class HelloController {
@RequestMapping("/hello")
public String hello(){
System.out.println("请求了。。。。。");
return "success";
}
}
4:helloworld原理和细节
4.1:helloword流程
* 1)、客户端点击链接会发送 http://localhost:8080/hello 请求
* 4)、来看请求地址和@RequestMapping标注的哪个匹配,来找到到底使用那个类的哪个方法来处理
* 5)、前端控制器找到了目标处理器类和目标方法,直接利用返回执行目标方法;
* 6)、方法执行完成以后会有一个返回值;SpringMVC认为这个返回值就是要去的页面地址
4.2:一个方法一个请求
5:RequestMapping属性详解
5.1:method:限定请求方式、
* 【GET】, HEAD, 【POST】, PUT, PATCH, DELETE, OPTIONS, TRACE
5.2:params:规定请求参数
* param1: 表示请求必须包含名为 param1 的请求参数
* 发送请求的时候必须带上一个名为username的参数;没带都会404
* !param1: 表示请求不能包含名为 param1 的请求参数
* 发送请求的时候必须不携带上一个名为username的参数;带了都会404
* param1 != value1: 表示请求包含名为 param1 的请求参数,但其值不能为 value1
* 发送请求的时候;携带的username值必须不是123(不带username或者username不是123)
* {“param1=value1”, “param2”}: 请求必须包含名为 param1 和param2 的两个请求参数,且 param1 参数的值必须为 value1
5.3:规定请求头;也和params一样能写简单的表达式
5.4:consumes:只接受内容类型是哪种的请求,规定请求头中的Content-Type
5.5:produces:告诉浏览器返回的内容类型是什么,给响应头中加上Content-Type:text/html;charset=utf-8
6:@RequestMapping模糊匹配功能
7:@PathVariable 路径占位符
//路径上可以有占位符: 占位符 语法就是可以在任意路径的地方写一个{变量名}
// /user/admin /user/leifengyang
// 路径上的占位符只能占一层路径
@RequestMapping("/user/{id}")
public String pathVariableTest(@PathVariable("id")String id){
System.out.println("路径上的占位符的值"+id);
return "success";
}