SpringMVC(2021年3月13日以更新一起加油学习吧)
SpringMVC简介
简介:
是基于Spring的一个框架,实际上就是Spring的一个模块 专门做web开发的。理解是servlet的一个升级
web开发的底层是servlet,框架是在servlet基础上面加入一些功能,让你做web开发方便
SpringMVC就是一个Spring。Spring是容器,IOC能够管理对象,使用bean,@Component,@Repository,@Service,@Controller
SpringMVC能够创建对象,放入到容器中(SpringMVC容器),Springmvc放的是控制器对象,
使用使用@Contorller创建控制器对象把对象放入SpringMvc容器中,把创建的对象作为控制器使用,这个控制器对象能接收用户的请求,显示处理结果,就当做是一个servlet使用
使用@Contorller注解创建的是一个普通的对象不是servlet。SpringMvc赋予了控制器对象一些额外的功能。
web开发底层是servlet,SpringmVC中有一个对象是servlet:DispatherServlet(中央调度器)
DispatherSevlet:负责接收用户的所有请求,用户把请求给了DispatherServlet,之后DispatherServlet把请求转发给了Cotroller对象,最后是把Controller对象处理请求
index.jsp–DispatherServlet(Servlet)–转发,分配给Controller对象(@Controller注解创建的对象)
springMVc(所需的jar包):
1.jar
spring-aop.jar
spring-bean.jar
spring-context.jar
spring-core.jar
spring-web.jar
speing-mvc.jar
springmvc第一个程序
Servlet-springmvc
jsp->Servlet(SpringMvc)->Jsp
springmvc配置文件spring.xml
配置常用的命名空间:beans,aop,context,mvc、
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
普通的servlet流程
请求-url-pattern-交给对应的servlet去处理
如果现在想用springmvc,而不是普通的sercvlet.
需要spring介入程序配置一个Springmvc自带的servlet
通过一下配置,拦截所有请求,交给SpringMvc处理
<servlet>
<servlet-name>springDispatcherServlet</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>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!--/是拦截所有请求
/user:拦截以user开头的请求
/user/abc.do 之拦截该请求
.abc 拦截以adc结尾的请求
-->
<servlet-name>springDispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
然然后再springMVC.xml中扫描注解包以及配置视图解析器
InternalResourceViewResolver:视图解析器(外部不能直接访问/WEB-INF目录下的资源)
只能通过内部服务器转发的形式进行访问,那么InternalResourceViewResolver就可以解决这个问题
InternalResourceViewResolver的两个属性:prefix:文件目录
suffix:后缀
<!--扫描有注解的包-->
<context:component-scan base-package="org.springmvc.hander"></context:component-scan>
<!--视图解析器InternalResourceViewResolver-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--prefix文件目录-->
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
项目要中同时兼容 springMvc和servlet
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>.action</url-pattern>
</servlet-mapping>
<a href="wecome">fist springmvc</a>/*会被servlet所拦截*/
<a href="user/welcome.action">fist springmvc</a>/*会被springmvc所拦截*/
在springmvcHandler:
//接口/类 注解 配置
@Controller
public class SpringMvcHandler {
//请求被拦截
@RequestMapping
public String wecome(){
//我们在springmvc.xml中配置了InternalResourceViewResolver所以这里(success)不需要配置文件目录以及后缀.jsp
return "success";
}
}
在web下创建一个views里面创建一个success.jsp
启动项目点击超链接 会跳转到success.jsp页面
原理: springMvcHandler拦截wecome请求进行跳转
3月10日
DispatcherServlet在web.xml中的默认地址
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--init-param是设置DispatcherServlet文件位置
ContextConfigLocation:有一个默认文件位置如果放在默认文件位置那么就不用写<init-param>默认文件位置在WEB-INF下面 文件名必须是 spring-DispatcherServlet-servelt.xml
-->
<init-param>
<param-name>ContextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
@RequestMapping还可以加载类前例:
在index.jsp中
<a href="Handeler/wecome/abc">fist springmvc</a>
映射是去匹配@RequestMapping注解,可以和方法名、类名不一致
通过method=RequestMethod.POST可以指定拦截请求方式
拦截失败405
拦截成功的样子