Spring 是全栈(从后台到前端全包)轻量级开源框架。
主要思想是:IOC(控制反转,对象的创建使用在其他类中实现) 和 AOP(面向切面编程,大体就是动态控制,让耦合度降低,不需要知道要处理的类的内部结构就可以进行处理),主要依靠了反射机制实现。
也有的会提到DI(依赖注入,不依靠对象本身进行赋值,我们传统赋值方式是先声明对象(new一个object),然后用对象.set方法赋值,依赖注入则是通过反射方式不依靠声明对象进行赋值)
这是我之前写注解和反射的时候的一个例子,可以更好地理解。 https://www.cnblogs.com/clamp7724/p/11667845.html
spring处理请求采用了单例模式
简单的实例
reference: https://www.bilibili.com/video/av50213945/?p=5
点一个链接,然后跳转到helloworld页面
1.
创建一个新model
2. 创建maven
3. 起名字
4. 然后一路next就可以了
创建完后左边大概是这么个结构
5. 在mian目录下创建两个文件夹,java和resources
6. 把java文件夹设为source root,放置java类
7. 把sources文件夹设为resource root,用来存放配置文件
8. 配置环境:
打开pom.xml
在properties中加入
<spring.version>5.0.2.RELEASE</spring.version>
这个类似于定义了个变量,这样将来改spring版本的时候只改这里就好了,这个文件下的其他配置就不用改了
修改依赖 dependencies
如果spring版本过低可能需要升级
dependencies中加入依赖
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.0</version> <scope>provided</scope> </dependency>
9. 修改web.xml文件,配置前端控制器
在web.xml中添加servlet配置
<!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> <servlet> <!-- 配置Servlet的初始化参数,读取springmvc的配置文件,创建spring容器 --> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 配置servlet启动时加载对象,扫描注解,把controller创建为对象(spring底层代码完成),这样就可以用来控制前台了 --> <!-- 而这个过程也就是IOC AOP 对象创建由spring利用反射完成--> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <!-- 拦截请求,/表示全部拦截,具体由哪个controller处理利用注解详细分配 --> <servlet-mapping> <servlet-name>dispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 处理中文乱码,前台用的utf-8所以这里把encoding设为 UTF-8 就可以了,其他是固定的(filter-name 自己可以改,上下一致就可以)--> <filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
这个是固定格式
里面的sevlet- mapping是name和pattern的配对,决定了什么请求归谁处理。这里配置的意思是所有url(因为pattern是 /)的请求都由 dispatcherServlet 处理
然后具体的路径会由注解赋值进行分配(spring底层已经写好了,我们直接用注解分配哪个页面用哪个方法就可以了,很方便,原理就是我最上面链接里写的那个例子)。
10. 添加spring配置文件
然后起个名字,我的是叫 springmvc
然后修改里面代码
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" 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 http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 配置spring创建容器时要扫描的包 --> <context:component-scan base-package="hello_word"></context:component-scan> <!-- 配置视图解析器, 决定controller跳转后对应的显示页面去哪找--> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/pages/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 配置spring开启注解mvc的支持 <mvc:annotation-driven></mvc:annotation-driven>--> </beans>
然后配置就算完成了- -真工作的以后基本上都是从别人那粘贴的。。。所以不用记住代码,就记住要配置哪些文件的哪些属性,这些属性管什么就好了。
11. 修改index.jsp (这个是启动服务后显示的第一个页面)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%> <html> <head> <title>Hello world</title> </head> <a href="${ pageContext.request.contextPath }/hello">Hello world</a> </body> </html>
href里的
${ pageContext.request.contextPath }/
可以不写,这个是绝对路径,不写会变成相对路径。
12. 然后编写controller
java文件夹中创建package,我的叫hello_world,这里的名字要和springmvc.xml里面的配置名字一样,这样拦截到请求后才会扫描到对应的controller
然后在package里面创建一个java类用来作为controller,我的叫 HelloWorldController
controller代码为:
package hello_word; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller //注解表示这是一个controller //@RequestMapping(path = "/hello") 这里也可以加RequestMapping注解,如果加在类上则表示一级路径,那样跳转路径就变成了hello/helloworld @RequestMapping(path = "/hello", method = {RequestMethod.GET}) // RequestMapping中右path,value(和path作用一样),method 三个方法,method的参数是一个enum类对象(枚举),使用时用类名RequestMethod + .属性,可以规定接受请求的种类: // GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE; public class HelloWorldController { @RequestMapping(path = "/helloworld") //说明地址二级路径是helloworld的请求,由这个方法处理 public String helloWorldPath(){ System.out.println("hello world"); return "success"; //表示跳转的页面为 success.jsp } }
13.然后直接在index.jsp页面上右键启动
完成- -
然后才发现success.jspl里面面<h1>Hello world</h1>> 后面多了个 ' > '
=.=
如果第一次启动可能会有问题,比如tomcat没配置对一类的。
可以参考我之前的两个笔记
另一个是sring mvc的例子(这个方法不同,而且据说不太专业?所以只看下面的启动部分就好了)
https://www.cnblogs.com/clamp7724/p/11333998.html
tomcat的安装和配置
https://www.cnblogs.com/clamp7724/p/11484331.html
然后是视频里画的工作流程图