脚本宝典收集整理的这篇文章主要介绍了[SpringMVC 01] SpringMVC原理,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
导入的四个包:
servlet-api
jsp-api
spring-webmvc
jstl
基于java实现的MVC轻量级web框架(可以把servlet等需要用到的bean注册到spring中,方便使用)
SpringMVC框架围绕一个DispatcherServlet的调度设计(做请求分发)
核心作用: 以前不同的业务有好多个servlet,在用户和servlet中间加一层,实现请求的转发
原理:
req进来的时候,先到Front controller, 相当于DispatcherServlet,用来分发请求;controller返回的结果是ModelandView, 然后Front controller发给View template来渲染,再返回Front controller然后return resp。
一个需求,写一个servlet(实现doGet);在web.xml中注册servlet和映射servlet-mapping
每一个需求都需要这么写(web.xml中注册很多个servlet)
init-param
标签包括spring-servlet.xml的位置和load-on-startup
启动级别属性),并对其映射。老一套的BeanNameUrlHandlerMapper
SimpleControllerHandlerAdapter
InternalResourceViewResolver
,分别是:处理映射器,处理器适配器,视图解析器(遇到的问题:当maven项目是后添加的web支持时,需要自己配置tomcat中的lib依赖包,否则tomcat中没有lib依赖包报错404)原因:WEB-INF的默认位置不同,后添加的支持在根目录下
流程:
其中,在web.xml中配置DispatcherServlet, 在spring-servlet.xml 中配置HandlerMapping, HandlerAdapter和ViewResolver。
主要分为三步:前端控制器接受用户的请求并拦截,根据对应的请求找到对应的Controller处理器,处理器调用业务层并返回信息给前端控制器,然后前端控制器调用视图解析器找到对应视图并将数据渲染
DispatcherServlet需要截取所有的请求,但不需要截取.jsp, 所以在配置url时,使用/
表示只截取请求,不截取jsp;
使用/*
表示截取请求和.jsp。
<?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">
<!--配置DispatcherServlet, 是SpringMVC的核心,请求分发器-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 绑定Spring的配置-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!-- 设置启动级别为1-->
<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>
配置spring.xml, 包括Mapping、Adapter、ViewResolver(需要配置prefix和suffix)
最后再注册controller,id是用户要访问的地址
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="InternalResourceViewResolver">
<!-- 获取到视图名之后来解析视图,添加前缀和后缀获得jsp页面的位置-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="/hello" class="com.roy.controller.HelloController"/>
</beans>
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mv = new ModelAndView();
// 写业务
mv.addObject("msg", "Hello,SpringMVC");
mv.setViewName("test");
return mv;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--获取数据--%>
${msg}
</body>
</html>
以上是脚本宝典为你收集整理的[SpringMVC 01] SpringMVC原理全部内容,希望文章能够帮你解决[SpringMVC 01] SpringMVC原理所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。