Spring - springMVC - 简单的例子

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

 

 

然后是视频里画的工作流程图

 

 

 

 

posted @ 2019-10-17 17:37  不咬人的兔子  阅读(304)  评论(0编辑  收藏  举报