目录


前端设计模式介绍

分析前端设计模式

Spring MVC简单介绍

Spring和Spring MVC的关系

配置Spring MVC的环境并简单测试


前端设计模式介绍

  前端设计模式其实和前端没啥关系,这个“前端”就是一个Servlet,可以将这个servlet理解为一个网关(gateway),所有对服务器的请求都会被这个servlet处理。

  这个servlet(front servlet)在处理请求的时候,会分析用户的请求URL,根据不同的URL,调用不同的方法处理,或者转发给对应的servlet去处理。

  另外,这个servlet还有另外一个名字——dispatcher servlet(调度servlet),因为他的工作方式就是:调度不同方法或者servlet来处理请求。

  举个特别简单的例子:

package cn.ganlixin.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; @WebServlet("/") // 拦截所有请求(除jsp以外的请求)
public class DispatcherServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8"); String action = request.getParameter("action"); if ("demo".equals(action)) {
demo(request, response);
} else if ("test".equals(action)) {
test(request, response);
} else {
response.sendError(404);
} } private void demo(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().println("this is demo action");
} private void test(HttpServletRequest request, HttpServletResponse response) throws IOException {
response.getWriter().println("this is test action");
}
}

  访问该项目的任意servlet,请求都会被这个DispatcherServlet拦截,然后根据请求中的action的值来调用不同的方法去处理,当然,也可以改一种方式,将请求转发给其他servlet进行处理。

分析前端设计模式

  分析上面这个DispatcherServlet,他的工作流程大概分为4步:

  1、接受请求;

  2、获取请求参数(解析请求信息);

  3、根据请求调用不同的处理程序;

  4、返回响应给客户端。

  这4步,如果对每一步进行深入的开发,就有点像Spring MVC了。Spring MVC就提供了四个接口去完成上面这几个步骤。

Spring MVC简单介绍

  Spring MVC是Spring框架的子项目,在进行Web开发的时候,可以提升相当大的效率。

  上面分析了前端设计模式工作流程,分为4个步骤,在Spring MVC中,有4个接口专门与之对应:

  1、DispatcherServlet:前端控制器,用于接收所有请求。

  2、HandlerMappering:解析请求格式,判断需要执行哪个方法

  3、HandlerAdapter:负责调用具体的方法(controller)处理请求

  4、ViewResolver:视图解析器,返回指定视图给客户端。

  

  流程图如下:

  

Spring和Spring MVC的关系

  Spring MVC是Spring的子项目,Spring容器是Spring MVC容器的父容器。所以Spring MVC能够使用Spring的所有资源(包括IoC、DI、AOP....以及Spring容器中的bean)

配置Spring MVC环境并简单测试

  导入jar包

  需要spring-web 和 spring-webmvc包,另外,Spring MVC还需要spring-aop包。

  创建Spring MVC配置文件

  Spring MVC的配置文件可以任意指定,存放位置也可以任意,这里测试的时候,选择将Spring MVC的配置文件存放在src目录下的/config目录下(自己创建的),配置文件名为springmvc.xml。内容如下:

<?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/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"> <!-- 执行注解所在的package -->
<context:component-scan base-package="cn.ganlixin.controller"></context:component-scan> <!-- 使用注解驱动,配置之后可以省略下面两个注解的配置 -->
<mvc:annotation-driven />
<!--
org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter
--> <!-- 设置静态资源目录 -->
<mvc:resources location="/js/" mapping="/js/**"></mvc:resources>
<mvc:resources location="/css/" mapping="/css/**"></mvc:resources>
<mvc:resources location="/images/" mapping="/images/**"></mvc:resources>
<!--
URL中满足mapping的请求,会去对应的location中寻找
mapping的/js/*可以匹配js目录下的所有文件,/js/**可以匹配js目录下的文件以及子目录(子目录的子目录)
-->
</beans>

  

  配置web.xml

  前面我们已经创建了Spring MVC的配置文件(projectRoot/src/config/springmvc.xml),创建之后,启动服务器其实和没有配置Spring MVC是一样的,原因:

  1、所有请求都不会被Spring MVC的DispatcherServlet拦截;

  2、项目下的所有注解不会被扫描,因为Spring MVC的配置文件虽然配置了扫描,但是却没有读取配置文件(也就不会去扫描注解了,因为<context:component-scan />指定了注解所在的package)。

  所以,下面就配置web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <!-- 配置Tomcat加载SpringMVC的DispatcherServlet,并设置SpringMVC的配置文件路径 -->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:config/springmvc.xml</param-value>
</init-param>
<!-- 设置为自启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!-- 配置字符编码 -->
<filter>
<filter-name>encoding</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>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

  

  创建一个简单的controller

package cn.ganlixin.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; @Controller
public class FirstController { @RequestMapping("demo")
public String demo() {
System.out.println("hello");
return "test.jsp";
} @RequestMapping("test")
public String test11111() {
System.out.println("test");
return "test.jsp";
}
}

  解释上面这个FirstController:

  1、这个controller就相当于一个servlet,只是他没有继承HttpServlet;

  2、使用@Controller来标记类名,目的是创建一个bean(和@Component功能类似),只是语义与@Component不同。

  3、使用@RequestMapping("url-pattern")就是为url-pattern绑定处理方法,比如@RequestMapping("test")表示访问ip:port/project/test时会执行test11111()方法。url-pattern不是必须和方法名一致。

  4、方法中的return "*.jsp",就是将指定的jsp返回给客户端(返回之前会进行数据处理)。

SpringMVC 框架介绍以及环境搭建的更多相关文章

  1. 【小程序自动化Minium】一、框架介绍和环境搭建

    微信小程序自动化测试系列分享 一.Minium 简介 minium 是微信团队为小程序专门开发的自动化框架,我们可以用它来做小程序的UI自动化测试,但是它的能力却不仅仅在于UI自动化. 正是得益于官方 ...

  2. [springboot 开发单体web shop] 1. 前言介绍和环境搭建

    前言介绍和环境搭建 简述 springboot 本身是为了做服务化用的,我们为什么要反其道使用它来开发一份单体web应用呢? 在我们现实的开发工作中,还有大量的业务系统使用的是单体应用,特别是对于中小 ...

  3. Django 01 django基本介绍及环境搭建

    Django 01 django基本介绍及环境搭建 #http服务器 #用来接收用户请求,并将请求转发给web应用框架进行处理 #Web应用框架 #处理完请求后在发送给http服务器,http服务器在 ...

  4. Maven介绍及环境搭建

    Maven介绍及环境搭建 Maven是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建.报告和文档的软件项目管理工具. 下载Maven boot:类加载器框架,Maven使用它加在自 ...

  5. Maven快速入门(一)Maven介绍及环境搭建

    做开发的程序员都知道,在系统开发需要各自各样的框架.工具.其中有一种工具不管你是初级程序员还是高级程序员都必须熟练掌握的,那就是项目管理工具(maven.ant.gradle).接下来就总结Maven ...

  6. Python介绍及环境搭建

    摘自http://www.cnblogs.com/sanzangTst/p/7278337.html Python零基础学习系列之二--Python介绍及环境搭建   1-1.Python简介: Py ...

  7. dubbo框架及dubbo环境搭建

    https://blog.csdn.net/liuhaiabc/article/details/52781351 dubbo框架及dubbo环境搭建

  8. 【转】SpringMVC+Spring3+Hibernate4开发环境搭建

    原文地址: SpringMVC+Spring3+Hibernate4开发环境搭建

  9. App自动化测试-1.App自动化介绍和环境搭建

    App自动化测试-1.App自动化介绍和环境搭建 *:first-child { margin-top: 0 !important; } body>*:last-child { margin-b ...

随机推荐

  1. ArticleRemoveDelDialog【基于AlertDialog的回收删除对话框】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 回收删除对话框,继承AlertDialog. 仿照钉钉的长按弹出的移除置顶对话框. 效果图 代码分析 继承AlertDialog: ...

  2. 【Python3爬虫】斗鱼弹幕爬虫

    在网上找到了一份斗鱼弹幕服务器第三方接入协议v1.6.2,有了第三方接口,做起来就容易多了. 一.协议分析 斗鱼后台协议头设计如下: 这里的消息长度是我们发送的数据部分的长度和头部的长度之和,两个消息 ...

  3. vue项目使用MD5进行密码加盐

    首先给项目安装MD5模块:npm install --save js-md5 使用方法有两种: 使用方法1:  在需要使用的项目文件中引入MD5:import md5 from 'js-md5'; 使 ...

  4. Springboot 系列(五)Spring Boot web 开发之静态资源和模版引擎

    前言 Spring Boot 天生的适合 web 应用开发,它可以快速的嵌入 Tomcat, Jetty 或 Netty 用于包含一个 HTTP 服务器.且开发十分简单,只需要引入 web 开发所需的 ...

  5. 几分钟搞定redis存储session共享——设计实现

    前面我们写过C#在redis中存储常用的5种数据类型demo,没看过的可以点击电梯直达:https://www.cnblogs.com/xiongze520/p/10267804.html 我们上一篇 ...

  6. connection holder is null新增解决方案(2018-06-02)

    最近在做Java后台的项目,用到了druid数据库连接池,阿里出品,肯定是精品的意思咯,这也是我们老大搭建的框架,我就站在前人的肩膀上飞翔了.先前在一个事物里,使用了多条数据库操作,都是正常的,但是前 ...

  7. Markdown 7min快速入门

    目录 概述 宗旨 兼容 特殊字符自动换行 区块元素 段落和换行 标题 区块引用 列表 代码区块 分隔线 区段元素 链接 强调 代码 图片 其他 表格 删除线 注脚 锚点 反斜杠 自动链接 参考文献 正 ...

  8. flex页面布局练习--知乎

    采用flexbox弹性容器 在手机端进行页面布局 样本地址: http://tpl.zhuamimi.cn/%E6%89%8B%E6%9C%BA%E7%AB%AF%E9%A1%B5%E9%9D%A2- ...

  9. qsv文件转码mp4格式过程记录

    之前帮一个朋友剪辑配音视频,源文件在爱奇艺里,特有的qsv格式让我白忙活一下午. 晚上趁着有空,在网上查找资料,翻阅了很多文件,都让我无从下手. 基本都是一个套路,转成fiv格式,再转mp4格式,但是 ...

  10. Vue开发插件

    (一)Vue.js的插件应该有一个公开方法:install. 这个方法的第一个参数是Vue构造器,第二个参数是一个可选的选项对象,一般是如下操作: MyPlugin.install = functio ...