今天介绍的是springmvc的学习,越来越多的企业开始选择springmvc+mybatis来构建系统架构,在电商热门的今天,springmvc+mybatis已成为电商项目架构的很好搭配。Spring mvc和struts2都属于表现层的框架,spring mvc是Spring框架的一部分,较于struts2框架使用的更加广泛;mybatis和hibernate都属于持久层的框架,mybatis是对jdbc操作数据库的的过程进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、创建statement、手动设置参数、结果集检索等jdbc繁杂的过程代码。
首先建议eclipse安装一个springIDE,这个安装方式百度即可,安装的话就会有提示并且新建的时候能新建出配置文件
安装好以后,我们新建一个动态web项目,之后按照如下步骤来写
①配置web.xml文件
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 配置DispatcherServlet --> <servlet> <servlet-name>springDispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!--配置DispatcherServlet的一个初始化参数,配置Springmvc的配置文件的位置和名称 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <!-- 1代表项目加载的时候被创建,不是被访问的时候才被创建 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springDispatcherServlet</servlet-name> <!-- 应答请求的地址,/代表可以应答所有请求 --> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
其中,servlet-name可以随便写,我们命名是springDispatcherServlet,意思是spring的请求处理器,这个概念很重要。
这后的这些内容可看注释,学过servlet的人看明白应该没问题。
既然配置了请求处理器,那么就得有个请求的发起者,我在本例子中用的是index.jsp中的<a href="helloworld">hello world</a>把href的helloworld当成了一个请求的URL
②index.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> <a href="helloworld">hello world</a> </body> </html>
当用户点击了这个超链接之后,springmvc先是通过web.xml中的springDispatcherServlet这个请求处理器把请求转到stringmvc.xml进行处理,
③stringmvc.xml,在src下面新建
<?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: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-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 配置自动扫描的包 --> <context:component-scan base-package="com.bai.handler"></context:component-scan> <!--配置视图解析器,就是如何把handler方法的返回值解析为实际的物理视图,就是return"success"怎么展现 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> </beans>
可以看到上面先配置的是自动扫描的包,他需要扫描到具体类的具体方法,我们写了一个处理器的类HelloWorld,在包com.bai.handler下面
④处理器类
package com.bai.handler; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class HelloWorld { /** * @author peng *1.使用@RequestMapping配置映射请求的url,这个url也就是index.jsp里面超链接的href的地址 *2。返回值会通过视图解析器解析为实际的物理视图,对于InternalResourceViewResolver视图解析器,会做如下的解析 *通过prefix+returnvalue+suffix这样的方式得到实际的物理视图,然后进行转发操作 *就是将请求转发到了 * /WEB-INF/views/success.jsp这个页面 */ @RequestMapping("/helloworld") public String hello(){ System.out.println("hello world"); return "success"; } }
在这个类文件中,先写上@Controller 这个处理器的注释,然后是请求映射的地址@RequestMapping("/helloworld"),这个是下面的方法处理请求该地址的情况,我点击了超链接后,请求发送给/helloworld,那么走到stringmvc.xml中看到下面的hello()方法映射的地址就是该请求地址,那么这个方法就去处理这个请求,这个方法返回了字符串success
,返回了字符串还不行,需要映射到物理视图的层面,怎么映射呢?上面的stringmvc.xml配置文件中配置了视图解析器InternalResourceViewResolver
解析的方式就是 通过prefix+returnvalue+suffix这样的方式得到实际的物理视图,然后进行转发操作
此例子中返回的结果就是/WEB-INF/views/success.jsp,然后我只需要在新建views文件夹,新建success.jsp即可证明转发到了这个页面了
⑤success.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Insert title here</title> </head> <body> success page </body> </html>
下面就看一下浏览器中的结果
点击后的结果
地址栏未变,是服务器端的转发,成功。
项目的结构
项目需要的jar包
这是基于spring4.0版本的
补充一下:
还有一种web.xml配置文件中的写法
具体内容请看上面的注释,结构稍有改变
大致流程
有不对的地方,欢迎批评指正。