zoukankan      html  css  js  c++  java
  • Spring

    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

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

     

  • 相关阅读:
    nodeJS操作mongoDB常用api
    git命令
    Scala笔记(1)——基本知识
    Akka Java 中文文档
    训练:用gfsh执行常见的任务
    https://confluence.jnj.com/display/AAIM/Enterprise+Agile+Data+Services
    gfsh操作
    java知识
    maven使用之烦人的.lastUpdated文件
    idea相关操作
  • 原文地址:https://www.cnblogs.com/clamp7724/p/11693572.html
Copyright © 2011-2022 走看看