8spring mvc
Posted yuanGrowing
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了8spring mvc相关的知识,希望对你有一定的参考价值。
1、什么是mvc? model-view-control的缩写,百度百科上定义这是一种软件设计典范,使用一种数据、业务逻辑、页面分离的方式组织代码。我个人把这个理解为一种大的设计模式,像工厂模式、代理模式都是在编写代码时遇到具体问题的一种解决方法,但是mvc是整个软件的设计模式,是一个大的框架。具体的mvc解释在网上很多,我现在也没有理解它的精髓。我自己写东西的时候总觉得mvc很臃肿,需 要些很多代码才能完成一个功能,也许以后项目实战多了会用好的吧。 2、 mvc中web的请求与响应 一次http请求可以被以下图所表示,下图中的服务器就是mvc中的controller(控制器)。我们在一个网页中的每一次 点击每一次刷新都会向服务器发送request,然后服务器就会寻找能够响应这个request的类或者说方法,然后将request处理之后将结果返回给我们。 我们可以看一下一个简单的登陆的mvc过程。3、spring mvc spring mvc是现在比较流行的一个web mvc框架,它允许我们采用注解的方式,进行controller层的搭建。 下面是spring文档中的一幅原理图,从图中可以看出,所有的请求都会被一个叫做front controller(前端控制器) 的东西拦截,然后由这个front controller来控制请求的处理。
话不多说,还是直接看代码,这样比较容易理解。我们以用一个登陆的例子,然后按照一个请求的产生与结束来进行讲解。 首先,是工程的搭建,我用的maven搭建工程,下面是引入的jar包,另外还有jstl.jar和standard.jar,需要手动引入,在maven中没有。
pom文件:
<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>com.example.learnspring</groupId> <artifactId>learnspring</artifactId> <packaging>war</packaging> <version>1.0-SNAPSHOT</version> <name>learnspring Maven Webapp</name> <url>http://maven.apache.org</url> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>4.2.1.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.30</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>3.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>3.2.0.RELEASE</version> </dependency> </dependencies> <build> <resources> <resource> <directory>src/main/java</directory> </resource> <resource> <directory>src/main/resources</directory> </resource> </resources> </build> </project> |
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>login</title> </head> <body> <form action="../req/login.do" method="get"> <label>name:</label><input name="name"> <label>password:</label><input name="password" type="password"> <input type="submit" value="submit"> <input type="reset" value="reset"> </form> </body> </html> |
<!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>learnspring</display-name> <servlet> <servlet-name>learnspring</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>learnspring</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app> |
package com.example.web;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.*;/*** Created by Administrator on 2016/4/7.*/@Controller//声明这是一个Controller类,这样服务器初始化的时候就能被spring容器识别@RequestMapping(value = "/req")//这是声明请求的名称(路径)用的public class LoginController@RequestMapping(value = "/login.do",method = RequestMethod.GET)//和前一个requestmapping组合形成了名为/req/login.do的请求public Object login(@RequestParam String name, @RequestParam String password)//表示这个请求接收名为name和password的参数String data_password = getPasswordByName(name);if(password.equals(data_password))return "index" ;//返回字符串index,它的本意是向返回一个index.html页面elsereturn "login" ;//如果密码不对,就返回login.html页面String getPasswordByName(String name)//根据名称获取密码return "admin" ; |
Upon initialization of a
DispatcherServlet , Spring MVC looks for a file named
[servlet-name]-servlet.xml
in the
WEB-INF
directory of your web application and creates the beans defined there, overriding the definitions of any beans defined with the same name in the global scope.
在初始化DispatcherServlet的同时,springmvc会在web-inf文件夹下寻找一个名为 [servlet-name]-servlet.xml的文件,然后创建在这个文件中定义的相关的bean。
|
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd"> <context:component-scan base-package="com.example.web"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> <property name="prefix" value="/pages/"/> <property name="suffix" value=".html"/> </bean> </beans> |
OK,这样一个简单的spring mvc程序就写好了,启动服务器试一下。注意我们要学会看服务器的日志,我启动的时候有这么一段,这说明一个名为/req/login.do的get类型请求已经被服务器初始化了,我们只要以正确的url访问就可以了。
以上是关于8spring mvc的主要内容,如果未能解决你的问题,请参考以下文章
Spring8Spring框架中的单例Beans是线程安全的么
8spring注解学习(bean的生命周期)——让Bean实现InitializingBean,DisposableBean这两个接口进而实现初始和销毁方法
8Spring+Struts2+MyBaits(Spring注解+jdbc属性文件+log4j属性文件)