如何理解SpringMVC?
一句话概括:请求信息到达DispatchServlet,Servlet中根据请求信息与配置文件找到映射的视图资源
然后使用RequestDispatch请求转发到该视图资源。
一个简单的流程图分析
通过简单例子去学习SpringMVC框架
我使用的软件Spring tool
可通过官网下载或者我的下载链接下载
链接:https://pan.baidu.com/s/1Dm3E7IR-kuTWekxbCKnrOg
提取码:u0ik
第一步创建项目
在eclipse中新建项目springmvc,使用dynamic web project的方式
第二步配置环境
1 每一个框架的学习都离不开jar包,先导入相关的jar包(我是一次性全部导入jar),放入WEB-INF/lib下
下载地址
链接:https://pan.baidu.com/s/1d1b0v1jBk3JM0s7pHHWphA
提取码:x5bs
2 在web.xml文件里面部署DispatcherServler,代码如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">在这里插入代码片
<servlet>
<!--DispatcherServlet就是一个Servlet
同时DispatcherServletk(前端控制器)可以有多个,通过servlet-name区分
决定name-servlet.xml配置文件怎么去写 -->
<servlet-name>springmvc</servlet-name>
<servlet-class>
<!-- 指定servlet类 -->
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup><!--是启动顺序 -->
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name><!-- 上下servlet-name一致 -->
<url-pattern>/</url-pattern><!-- 拦截带/请求 例如/login-->
</servlet-mapping>
</web-app>
3 在WEB-INF目录下创建 springmvc-servlet.xml
springmvc-servlet.xml 与上一步中的springmvc两个加粗的地方要一致
springmvc-servlet.xml 的代码
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- <bean id="simpleUrlHandlerMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/index">indexController</prop>
</props>
</property>
</bean>
<bean id="indexController" class="controller.IndexController"></bean>-->
<!-- name将用来匹配请求的资源
spring将使用实现了Controller接口的LoginController的handleRequest方法来返回映射的视图资源 -->
<!-- name="/login"表示访问路径/login会交给LoginController的类去处理 -->
<bean name="/login" class="controller.LoginController"></bean>
<!-- 配置映射处理器:根据bean(自定义Controller)的name属性的url去寻找handler;
springmvc默认的映射处理器是BeanNameUrlHandlerMapping-->
<bean name="/register" class="controller.RegisterController"></bean>
</beans>
第三步 创建Controller类
LoginControllerl类
public class LoginController implements Controller {
//ModelAndView对象(包含模型数据、逻辑视图名)
//handleRequest 处理请求的方法
@Override
public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1)throws Exception{
return new ModelAndView("/WEB-INF/jsp/login.jsp");
}
}
RegisterController类
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class RegisterController implements Controller{
public ModelAndView handleRequest(HttpServletRequest arg0,HttpServletResponse arg1) throws Exception{
return new ModelAndView("/WEB-INF/jsp/register.jsp");
}
}
第四步创建index.jsp页面
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!-- request.getSchema()可以返回当前页面使用的协议,“http”
request.getServerName()可以返回当前页面所在的服务器的名字,“localhost"
request.getServerPort()可以返回当前页面所在的服务器使用的端口,就是8080,
request.getContextPath()可以返回当前页面所在的应用的名字,就是上面例子中的springMVC
这四个拼装起来,就是当前应用的跟路径了 -->
<!DOCTYPE html>
<html>
<head>
<base href="<%=basePath%>"><!-- <base href="...">是用来表明当前页面的相对路径所使用的根路径的 -->
<!-- 服务器会自动把 <base ...>指定的路径和页面内的相对路径拼装起来,组成完整路径。 -->
<meta http-equiv="Conter-Type" contentType="text/html; charset=UTF-8">
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body bgcolor="">
没注册的,去<a href="register">注册</a>!<br>
以注册的,去<a href="login">登陆</a>!
</body>
</html>
第五步 创建login.jsp和register.jsp
点击index里面登陆,实现页面跳转的功能
效果演示