`
gaoyuntao2005
  • 浏览: 311345 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

入门 17 - 第一个Spring MVC Web程序

阅读更多

进行这个程序之前,请您先完成入门 04 - 第一个Spring程序。 
 我们的第一个Spring MVC Web程序将使用Tomcat 5.0.28来示范,我们在webapps目录下建立一个springapp目录,这次为了方便,我们直接使用spring.jar,以及其相依的 commons-logging.jar,请将这两个jar放到 springapp/WEB-INF/lib下。 
 Spring MVC框架的中心是dispatcher:org.springframework.web.servlet.DispatcherServlet。 DispatcherServlet负责将Web请求分派(dispatch)给handler,Spring为handler定义了预设接口: org.springframework.web.servlet.mvc.Controller:

Controller.java

public interface Controller {

    public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) throws Exception;

}


 DispatcherServlet分派请求的根据是委托给实作 org.springframework.web.servlet.HandlerMapping接口的对象来处理,例如 org.springframework.web.servlet.handler.SimpleUrlHandlerMapping,请求与 handler之间的映射是撰写在Bean定义档中。 
 DispatcherServlet本身是一个Servlet,我们要先在web.xml中定义:

web.xml

<?xml version="1.0" encoding="ISO-8859-1"?>

                                                                               

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"

    version="2.4">

                                                                               

    <description>

        Spring App Examples.

    </description>

    <display-name>Spring App Examples</display-name>

   

    <servlet>

        <servlet-name>hello</servlet-name>

        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>hello</servlet-name>

        <url-pattern>*.do</url-pattern>

    </servlet-mapping>

                                                                               

</web-app>


 在web.xml中,我们定义了一个DispatcherServlet的实例hello,所有*.do结尾的请求都会由它来处理, DispatcherServlet预设会使用Servlet的名称为前置,读取name-servlet.xml作为其Bean定义档,以上面的设定即 读取hello-servlet.xml。依这个机制,如果您要多个模块,可以定义不同的名称来使用多个DispatcherServlet的实例,并分别读取不同的Bean定义档。 
 您也可以自行定义Bean定义档的名称,像是:

<servlet>

    <servlet-name>hello</servlet-name>

    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

    <init-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>/WEB-INF/hello1-servlet.xml, /WEB-INF/hello2-servlet.xml</param-value>

    </init-param>     

</servlet>


 我们这边使用预设的hello-servlet.xml作为Bean定义档的名称,其内容如下:

hello-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">

        <property name="mappings">

            <props>

                <prop key="/hellouser.do">helloUserAction</prop>

            </props>

        </property>

    </bean>

   

    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

        <property name="viewClass">

            <value>org.springframework.web.servlet.view.InternalResourceView</value>

        </property>

    </bean>

   

    <bean id="helloUserAction" class="onlyfun.caterpillar.HelloUserAction">

        <property name="helloWord">

            <value>Hello!</value>

        </property>

        <property name="viewPage">

            <value>/WEB-INF/jsp/hellouser.jsp</value>

        </property>

    </bean>

</beans>


 DispatcherServlet将请求与handler的映射交给HandlerMapping的实作 org.springframework.web.servlet.view.InternalResourceViewResolver,在上面的设定中,我们将/hellouser.do的请求交给名称为helloUserAction的handler,它是个实作Controller接口的类别,我 们待会再来看看它。 
 先来关心一下viewResolver,Spring可以让您使用不同的表示层技术,透过viewResolver的转换,您的表示层可以使用纯綷的 JSP/Servlet、JSTL、Velocity、Tiles等等,在这边我们使用JSP/Servlet,您只要简单的设定viewClass属性 为org.springframework.web.servlet.view.InternalResourceView。如果您的表示层使用 JSTL,则可以设定org.springframework.web.servlet.view.JstlView,同样的,对于Spring支持的其 它表示层技术,Spring都提供有一个viewClass可以设定。 
 来看看helloUserAction,它实作了Controller界面:

HelloUserAction.java

package onlyfun.caterpillar;

 

import java.io.IOException;

import java.util.*;

import javax.servlet.*;

import javax.servlet.http.*;

import org.springframework.web.servlet.mvc.Controller;

import org.springframework.web.servlet.ModelAndView;

import org.springframework.web.bind.RequestUtils;

 

public class HelloUserAction implements Controller {

   private String helloWord;

    private String viewPage;

   

   public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res)

        throws ServletException, IOException {

      String user = RequestUtils.getRequiredStringParameter(req, "user");

      Map model = new HashMap();

      model.put("helloWord", getHelloWord());

      model.put("user", user);

   

       return new ModelAndView(getViewPage(), model);

    }

   

    public void setViewPage(String viewPage) {

       this.viewPage = viewPage;

    }

   

    public String getViewPage() {

       return viewPage;

    }

 

    public void setHelloWord(String helloWord) {

       this.helloWord = helloWord;

    }

   

    public String getHelloWord() {

       return helloWord;

    }

}


 handlerRequest()在MVC/Model2中扮演的作用,在于处理请求内容、呼叫商务对象、准备Model,它必须返回一个ModelAndView的实例,表示最后要显示给使用者观看的表示层资源。 
 在上面的例子中,我们只是将请求中的user参数取出,填入Model中,ModelAndView接受一个Map对象作为请求,之后viewResolver会根据所设定的viewClass将之转换为View层可以抽取出来的数据源。 
 在上面的例子中,我们使用了依赖注入的方式设定helloWord,以及View的地址,利用依赖注入的方式,我们可以避免将View的资源地址写死在 程序中,而请您回顾一下viewPage属性,我们设定其为/WEB-INF/jsp/hellouser.jsp,将资源设定在WEB-INF中,可以避免使用者直接存取资源,以获得较高的安全性与资源访问控制 
 hellouser.jsp的内容如下,我们使用了JSP 2.0的Expression Language将Model取出以显示在页面上:

hellouser.jsp

<html>

<head><title>HelloPage</title></head>

<body>

    <H1> ${helloWord}, ${user}!!</H2>

</body>

</html>


现在可以启动您的Servlet容器了,在网址列输入本地测试地址:

http://localhost:8080/springapp/hellouser.do?user=Justin


我们给了一个请求参数user=Justin,程序执行的结果如下:

<html>

<head><title>HelloPage</title></head>

<body>

    <H1> Hello!, Justin!!</H2>

</body>

</html>

分享到:
评论

相关推荐

    Java EE 框架整合 开发入门到实战-Spring+Spring MVC+MyBatis微课版复习笔记

    - 控制反转是Spring框架的核心,它通过描述(如XML配置或注解)由第三方(Spring容器)生成或获取被依赖的实例,从而实现对象之间的解耦,减少程序间依赖,提升模块化程度。 - 依赖注入是IoC的一种表现形式,它从...

    Spring MVC 入门实例

    如果你的数据库已经配置好, 就将第一个注释去掉. jdbc.properties: 1 jdbc.driverClassName=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost/test?useUnicode=true&characterEncoding=UTF-8 3 jdbc....

    Java EE 框架整合开发⼊⻔到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf

    这份文档名为《Java EE 框架整合开发入门到实战——Spring+Spring MVC+MyBatis(微课版)课后习题答案.pdf》,它显然是关于Java EE中流行的三个框架整合使用的教程。这三个框架分别是Spring、Spring MVC和MyBatis,...

    Spring MVC第一个入门程序

    ### Spring MVC 第一个入门程序详解 #### 一、前言:为什么选择Spring MVC? 随着互联网技术的飞速发展,Web应用程序的需求日益增加。为了更好地管理Web应用中的业务逻辑与数据展示,模型-视图-控制器(Model-View...

    spring mvc入门示例

    Spring MVC 是一个强大的Java Web开发框架,用于构建可维护、高性能和灵活的Web应用程序。...对于初学者来说,从搭建环境、创建第一个“Hello, World”开始,逐步深入学习各个组件和特性,是掌握Spring MVC的关键步骤。

    Spring MVC--2.入门程序

    创建Spring MVC项目的第一步是创建一个Maven项目,并在`pom.xml`文件中配置必要的依赖。你需要引入Spring Web、Spring MVC以及Servlet API等相关依赖。例如: ```xml &lt;groupId&gt;org.springframework ...

    Spring mvc 入门向导

    创建第一个Spring MVC项目时,我们需要在STS中生成项目,并通过pom.xml文件添加必要的Spring库依赖。这通常包括Spring MVC的核心模块,以及其他支持如视图解析和数据绑定的组件。添加欢迎页面是一个快速入门的好方法...

    Spring Web Services 框架入门研究--发布服务

    这个框架提供了一种模型-视图-控制器(MVC)架构来创建服务,并且支持WSDL(Web Service Description Language)第一类公民,使得服务接口定义清晰且易于理解。 描述中虽然没有具体信息,但通常Spring Web Services...

    spring3.0mvc自学教程ppt+注解教程+注解实例+springmybatis教程+项目实例+中文api (老师的心血)从入门到项目实战

    Spring 3.0 MVC 是一个强大的Java框架,用于构建企业级Web应用程序。它以其模块化、松耦合和高度可配置性而闻名。本自学教程集合了多种资源,旨在帮助初学者逐步掌握Spring 3.0 MVC的核心概念,并通过实际项目实例...

    intellij idea 2017 spring mvc 入门

    【描述】:“Java Spring MVC超简单,Spring MVC入门,第一个Java程序,IntelliJ IDEA入门” 这表明我们将从零开始,逐步学习如何在IntelliJ IDEA这个强大的Java集成开发环境中配置Spring MVC环境,创建并运行一个...

    Spring MVC入门小例子

    **Spring MVC 入门教程** ...通过实践,你已经迈出了学习 Spring MVC 的第一步。对于标签中的 "源码",你可以在 `MySpringMVC` 中查看具体的代码实现;对于 "工具",这里主要涉及的是 Maven 和 IDE 的使用。

    spring mvc入门

    为了进行Spring MVC的入门学习,第一步是搭建开发环境。可以按照以下步骤来操作: 1. 创建一个项目,例如命名为springMVC_01_helloword。 2. 导入Spring MVC所需的jar包,可以导入Spring 3.0版本的所有jar包。 3....

    第二章 Spring MVC入门 源代码下载

    Spring MVC 是一个基于 Java 的轻量级 Web 开发框架,它是 Spring 框架的重要组成部分,主要用于构建 MVC(Model-View-Controller)架构的 Web 应用程序。本章将介绍如何入门 Spring MVC,通过提供的源代码下载,你...

    Spring MVC入门

    在Spring MVC中,`HelloWorld`是常见的第一个示例,它展示了如何设置和运行一个简单的应用程序。首先,我们需要配置Spring MVC的核心容器——DispatcherServlet,它作为前端控制器接收所有HTTP请求,并将它们分发到...

    【BAT必备】spring面试题,spring MVC面试题,spring boot面试题,spring cloud面试题

    Spring框架是一个开源的Java平台,用于构建企业级应用程序。它提供了一种简洁的方式来管理组件、事务处理、数据访问以及与各种第三方库集成。Spring的核心功能包括依赖注入(DI)、面向切面编程(AOP)和容器管理等...

    《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》配套资源.zip

    《Java EE企业级应用开发教程(Spring+Spring MVC+MyBatis)》是一份全面深入讲解Java企业级应用开发的教程,重点聚焦于Spring、Spring MVC和MyBatis这三个核心框架。这些技术在现代Java开发中占据着举足轻重的地位...

    Spring MVC

    - 文件:`第一个Spring.docx` 可能是关于构建第一个Spring MVC应用的教程,涵盖了基本配置和简单Controller的编写。 总之,Spring MVC 是一个功能强大且灵活的Web框架,通过它我们可以构建高效、可维护的Java Web...

    spring mvc 教程

    学习 Spring MVC 的第一步通常是创建一个简单的 "Hello World" 示例。这通常涉及设置开发环境,配置 DispatcherServlet、HandlerMapping、HandlerAdapter 和 ViewResolver,编写处理器类(Controller),以及定义...

    sprimg-mvc 基础入门

    在实际项目中,"spring-mvc基础入门"可能包括创建一个简单的Spring MVC项目,配置web.xml和Spring的Context配置,编写第一个Controller,处理GET和POST请求,学习如何注入Service层,理解模型数据的传递,以及如何...

Global site tag (gtag.js) - Google Analytics