1 、还是熟悉的配方,先创建一个父Maven项目(忘记怎么创建项目了就去前面翻笔记),导入通用的配置依赖
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>SprinMVC_Father</artifactId><packaging>war</packaging><version>1.0-SNAPSHOT</version><name>SprinMVC_Father Maven Webapp</name><url>http://maven.apache.org</url><dependencies><!--导入junit依赖方便后续测试 --><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><!--导入SpringMVC依赖 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><!--导入servlet依赖 --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><!--导入jsp依赖 --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><!--导入jsptl依赖 --><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency></dependencies><build><finalName>SprinMVC_Father</finalName></build>
</project>
2、创建子项目,并确定子项目支持web项目
给子项目也导入servlet和jsp的依赖(双重导入确保不会出错,正常的话父项目导入了子项目不导入也可以,这里我们导入两次确保不会出问题)
<!--导入servlet依赖 --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency><!--导入jsp依赖 --><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency>
3、创建一个helleservlet类继承httpservlet用来处理用户的请求,实现父类的doGet和doPost方法
package com.li.myservlet;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class HellServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1、获取前段参数String method = req.getParameter("method");if(method.equals("add")){req.getSession().setAttribute("msg","执行了add方法");}if(method.equals("delete")){req.getSession().setAttribute("msg","执行了delete方法");}//2、调用业务层 暂时没有业务成//3、视图转发或重定向req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}
顺便在web里写个测试页面
Date: 2024/4/6Time: 16:45To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
${msg}
</body>
</html>
再写个表单测试
<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/4/6Time: 17:10To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>表单</title>
</head>
<body>
<form action="/hello" method="post">
<input type="text" name="method"><input type="submit" >
</form>
</body>
</html>
3、写完servlet的第一件事情就是给它去web.xml中注册上
web.xml的头文件
<?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"></web-app>
注册完后的web.xml
<?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"><!--注册servlet --><servlet><servlet-name>hello</servlet-name><servlet-class>com.li.myservlet.HellServlet</servlet-class></servlet><servlet-mapping><servlet-name>hello</servlet-name><url-pattern>/hello</url-pattern></servlet-mapping><!--还有一些其他的配置 --><!--可以设置session的超时时间 这里设置15分钟 -->
<!-- <session-config>-->
<!-- <session-timeout>15</session-timeout>-->
<!-- </session-config>--><!--也可以在这里设置欢迎页面 默认的是 index.jsp -->
<!-- <welcome-file-list>-->
<!-- <welcome-file>xxx.jsp</welcome-file>-->
<!-- </welcome-file-list>-->
</web-app>
最后目录如下:
3、一切都写完了就配置tomcat
3、初识SpringMVC
SpringMVC的原理如下
4、对 SpringMVC有初步了解之后我们再来创建一次项目
第一步创建视图
第二步:确保最后发布的项目中导入了SpringMVC的依赖
第三步:在web.xml配置文件中配置我们的DispatchServlet
<?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">
<!--配置DispatchServlet:这个是SpringMVC的核心:请求分发器,前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--DispatchServlet要绑定一个Spring-mvc的配置文件 其实就是spring的配置文件,只是spring可以做很多事情,我们细分下来叫Spring-mvc的配置文件--><init-param><param-name>contextConfigLocation</param-name><!--这里配置文件取名字就是按照上面的servlet-name的名字取的xxx-servlet --><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>
第四步:编写springmvc的配置文件,其实就是spring的配置文件
<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--处理器映射器 处理器映射器不止有一种--><bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--处理器适配器 这个和上面的处理映射器在后期的开发中直接注解就可以实现,不用死记,知道流程就可以--><bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--视图解析器这个必须熟练掌握 后面还会学习一些模板引擎如 Thymeleaf Freemarker--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!--需要配置两个参数,一个前缀,一个后缀-->
<!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/"/>
<!-- 后缀 --><property name="suffix" value=".jsp"/></bean></beans>
第五步:编写Controller
package com.li.controller;import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class HelloController implements Controller {@Overridepublic ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {ModelAndView modelAndView = new ModelAndView();// 假设一个业务代码String result = "HelloSpringmvc";modelAndView.addObject("msg",result);// 视图跳转modelAndView.setViewName("test");return modelAndView;}
}
4、真实的开发:(一般不会像上面这样用)
第一步:配置web.xml配置文件
<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" ><web-app><display-name>Archetype Created Web Application</display-name><!--配置DispatchServlet:这个是SpringMVC的核心:请求分发器,前端控制器--><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--DispatchServlet要绑定一个Spring-mvc的配置文件 其实就是spring的配置文件,只是spring可以做很多事情,我们细分下来叫Spring-mvc的配置文件--><!--通过初始化参数指定SpringMVC配置文件的位置,进行关联--><init-param><param-name>contextConfigLocation</param-name><!--这里配置文件取名字就是按照上面的servlet-name的名字取的xxx-servlet --><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>
第二步:创建并配置springmvct配置文件
<?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:mvc="http://www.springframework.org/schema/mvc"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"><!-- 自动扫描包,让指定包下的注解生效,由IOC容器统一管理 --><context:component-scan base-package="com.li.controller"/><!-- 让Spring MVC不处理静态资源 --><mvc:default-servlet-handler /><!--支持mvc注解驱动在spring中一般采用@RequestMapping注解来完成映射关系要想使@RequestMapping注解生效必须向上下文中注册DefaultAnnotationHandlerMapping和一个AnnotationMethodHandlerAdapter实例这两个实例分别在类级别和方法级别处理。而annotation-driven配置帮助我们自动完成上述两个实例的注入。--><mvc:annotation-driven /><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"><!-- 前缀 --><property name="prefix" value="/WEB-INF/jsp/" /><!-- 后缀 --><property name="suffix" value=".jsp" /></bean></beans>
第三步:创建controlle类
package com.li.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
//@Controller是为了让Spring IOC容器初始化时自动扫描到;
//@RequestMapping是为了映射请求路径,这里因为类与方法上都有映射所以访问时应该是/HelloController/hello;@Controller@RequestMapping("/HelloController")public class HelloController {//真实访问地址 : 项目名/HelloController/hello@RequestMapping("/hello")
// 方法中声明Model类型的参数是为了把Action中的数据带到视图中;public String sayHello(Model model){//向模型中添加属性msg与值,可以在JSP页面中取出并渲染model.addAttribute("msg","hello,SpringMVC");
// 方法返回的结果是视图的名称hello,加上配置文件中的前后缀变成WEB-INF/jsp/hello.jsp。return "hello";}}
第四步:常见视图层(注意要在springmvct配置文件中配置的路径下创建视图层)
这里的路径是:/WEB-INF/jsp/
<%--Created by IntelliJ IDEA.User: AdministratorDate: 2024/4/13Time: 16:29To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Title</title>
</head>
<body>
${msg}
</body>
</html>
总结:
实现步骤其实非常的简单:
- 新建一个web项目
- 导入相关jar包
- 编写web.xml , 注册DispatcherServlet
- 编写springmvc配置文件
- 接下来就是去创建对应的控制类 , controller
- 最后完善前端视图和controller之间的对应
- 测试运行调试.
使用springMVC必须配置的三大件:
处理器映射器、处理器适配器、视图解析器
通常,我们只需要手动配置视图解析器,而处理器映射器和处理器适配器只需要开启注解驱动即可,而省去了大段的xml配置