【Java EE 学习第83天】【SpringMVC】

一、SpringMVC框架概述

  什么是SpringMVC?SpringMVC是一个和Struts2差不多的东西,他们的作用和性质几乎是相同的,甚至开发效率上也差不多,但是在运行效率上SpringMVC要高于Struts2;注意这里的SpringMVC很明确的指明了使用了MVC框架,Struts2也使用了MVC框架。

  1.环境准备

    和之前使用的spring环境几乎是差不多的,但是需要增加两个核心包:

org.springframework.web.servlet-3.0.0.RELEASE.jar

org.springframework.web-3.0.0.RELEASE.jar

    当然,这是在Spring3.2之前的环境下,Spring3.2有了重大的升级,不再使用org.springframework.web.servlet-3.0.0.RELEASE.jar,而是取而代之的使用了下面的jar包:

spring-webmvc-3.2.0.RELEASE.jar

  当然,还是推荐使用Spring3.2的版本,根据spring官方文档中的声明,自3.0版本之后一直到3.2版本的所有版本都存在已知的而且很明显的bug;在spring3.2中则解决了相当数量的bug。

  2.需要的完整jar包列表

    由于我使用的是Eclipse,所以相关的jstl先关jar包IDE并没有提供支持,所以只能手动添加jstl.jar以及standard.jar了:

aopalliance.jar
commons-logging.jar
jstl.jar
spring-aop-3.2.0.RELEASE.jar
spring-aspects-3.2.0.RELEASE.jar
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-context-support-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
spring-web-3.2.0.RELEASE.jar
spring-webmvc-3.2.0.RELEASE.jar
standard.jar

  很明显了,使用SpringMVC的另外一个最大的好处就是不用像在Struts2中那样再引入一大批的jar包了。

二、第一个SpringMVC程序

  1.首先在web.xml配置文件中配置一个Servlet

<servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.action</url-pattern>
</servlet-mapping>

  2.配置spring配置文件

  默认的Servlet将会读取WEB-INF文件夹下的相应配置文件;当然该配置文件的命名还需要满足规则才行:$servletName-servlet.xml,否则Servlet也找不到相应的配置文件;根据上述的配置中的servlet-name标签的值,我们将配置文件的名字命名为:action-servlet.xml,这个配置文件实际上就是Spring的配置文件

  首先配置“内部资源视图解析器”

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.2.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-3.2.xsd">
    <!-- 内部资源视图解析器 -->
    <bean id="internalResourceViewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/jsps/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
<beans>

  内部视图资源解析器确定了一种规则,那就是将Controller返回的ModelAndView对象进行解析,并将viewName提取出来和"prefix"以及"suffix"进行拼接,得到需要跳转的资源位置,并执行跳转,具体是重定向还是转发,需要根据ModelAndView的内容进行确定。

  这里则是假设所有jsp页面都保存到了/jsps目录下,并且都是以.jsp结尾。

  3.新建控制器

  所有控制器的超类都是AbstractController,这里直接继承该类,并重写该类的核心方法:handleRequestInternal,该方法返回值是ModelAndView对象,该对象必须赋予一个字符串代表资源的位置。

package com.kdyzm.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class HomeController extends AbstractController {
    @Override
    protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        System.out.println("你好,这是第一个SpringMVC程序!");
        return new ModelAndView("index");
    }
}

  这里的index经过"内部视图资源解析器"解析之后,就转变成了真正的地址:/jsps/index.jsp,在浏览器上就需要使用http://localhost:8080/项目名称/jsps/index.jsp来访问了。

  新建控制器之后需要将控制器注入到spring容器管理。

<bean name="/home.action" class="com.kdyzm.controller.HomeController"></bean>

  4.在/jsp/文件夹下新建jsp页面index.jsp

 1 <%@ page language="java" pageEncoding="utf-8"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 3 <html>
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
 6 <title>Insert title here</title>
 7 </head>
 8 <body>
 9     你好,这是第一个SpringMVC程序!
10 </body>
11 </html>

  5.在浏览器上输入http://localhost:8080/springmvc/home.action进行测试

  

  测试成功。

三、三种不同的URL处理器映射

  所谓的处理器映射就是一种Map对象,它储存着请求的url到控制器的映射,它能够将我们的请求转交给某一个指定的控制器处理。

  1.Bean名url处理器映射

    这是默认的url处理器映射,也是最常使用的url处理器映射;所谓默认,就是不配置也会自动加载,这里显式声明一下意思意思:

<bean
    class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
    <property name="order" value="3"></property>
</bean>

    它有一个serOrder方法,该方法能够确定该url处理器的优先级,如果配置了多个url处理器映射,那么该值越大的越有限匹配;之前的例子由于没有明确的配置url处理器映射,所以使用的是默认的url处理器映射。

  2.简单url处理器映射

    这种url处理器映射基本上没有人使用,因为使用这种方式需要将key和值一一列举出来,这种工作量即使在一个中型项目中也是难以承受的。

  

时间: 2024-10-16 21:02:12

【Java EE 学习第83天】【SpringMVC】的相关文章

Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库

参考: https://my.oschina.net/gaussik/blog/513444 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2) 5 数据库配置 下面,就要通过一个简单的例子,来介绍 SpringMVC 如何集成 Spring Data JPA(由 Hibernate JPA 提供),来进行强大的数据库访问,并通过本章节

Java EE 学习(5):IDEA + maven + spring 搭建 web(1)

参考:http://www.cnblogs.com/lonelyxmas/p/5397422.html http://www.ctolib.com/docs-IntelliJ-IDEA-c--159047.html 孔老师的<SpringMVC视频教程> 记录: 本节主要完成 使用 maven 管理 spring + 项目 包,搭建 maven+spring 的 web 项目平台. 前提: 已安装并配置好 - Intellij IDEA 16.3.5 Ultimate - JDK 1.8.0_

Java EE 学习(8):IDEA + maven + spring 搭建 web(4)- 用户管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) ava EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 记录: 通过对用户表的管理,更加深入地讲解SpringMVC的操作. 6 用户管理 既然我们

Java EE 学习(9):IDEA + maven + spring 搭建 web(5)- 博客文章管理

转载:Gaussic(一个致力于AI研究却不得不兼顾项目的研究生) . 注:在阅读本文前,请先阅读: Java EE 学习(5):IDEA + maven + spring 搭建 web(1) Java EE 学习(6):IDEA + maven + spring 搭建 web(2)- 配置 Spring Java EE 学习(7):IDEA + maven + spring 搭建 web(3)- 配置数据库 Java EE 学习(8):IDEA + maven + spring 搭建 web(

【Java EE 学习第16天】【dbcp数据库连接池】【c3p0数据库连接池】

零.回顾之前使用的动态代理的方式实现的数据库连接池: 代码: 1 package day16.utils; 2 3 import java.io.IOException; 4 import java.lang.reflect.InvocationHandler; 5 import java.lang.reflect.Method; 6 import java.lang.reflect.Proxy; 7 import java.sql.Connection; 8 import java.sql.D

Java EE学习--Quartz基本用法

新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人. 首先提到的是Quartz,一个开源的定期执行计划任务的框架.其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇.心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了. 第一步:下载Qu

JAVA EE 学习笔记[V1 jsp编程]

在三月初学校开设了javaee的课程,也就此展开了对javaee基础的学习.然后老师也对这次的课程有一定要求.前面的基础就为最终的作业做准备啦~ 在上学期我们学习了java相关知识,也对java se 的安装使用有了一定的认知,而java ee则是构建于java se 平台之上的一套多层的,可扩展的的网络应用. 学习java ee我们首先进行环境的搭建.无非就是使用 tomcat进行服务器的搭建和jdk环境变量配置.而IDE这方面我们选择myeclipse 2016 CI(这个编译器自带tomc

Java EE学习之旅1——HeadFirstJavaEE

因为找到的实习是用Java开发的公司,所以来学习一下Java EE的知识. 首先找来了书<轻量级Java EE企业应用实战>. 啊不得不说学了Java之后直接看这个还是完全不行呢,好多名词看都没有看过啊哈哈. 首先来看看都些啥看不懂的词... 1.JSP.Servlet和JavaBean JSP和Servlet都是用在表现层的东西,而实质上JSP编译成Servlet才运行. 但Servlet开发成本太大,所以用JSP. JavaBean用来通信交换表现层和底层数据. 2.MVC和Struts

Java EE学习——Quartz的Cron表达式

经历过低谷后,还是要好好学习,越失落会越来越落后. 今天写一下Cron表达式的用法,虽然是之前自己写的,也过了挺长一段时间,这次就拿出来作为回顾吧. Cron表达式是Quartz的精髓(个人觉得),比如我们想设定淘宝“秒杀”的那一秒时间,完全可以用下面的方法设置执行时间. Calendar cal = Calendar.getInstance(); //设置将要发生的时间... cal.set(Calendar.DATE, xxx); //.......常规的生成scheduler和job //