`
gaoyuntao2005
  • 浏览: 303040 次
  • 性别: 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>

分享到:
评论

相关推荐

    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....

    Spring Web MVC入门教程

    第一章:Spring Web MVC入门 包括:是什么、能干什么、有什么、各个组成部分的功能、HelloWorld等 第二章:理解DispatcherServlet 包括:功能、配置、上下文关系、初始化顺序等 第三章:注解式控制器开发详解 ...

    Spring MVC第一个入门程序

    使用Spring MVC进行设计Web网页使用MVC进行架构设计!

    CXF示例代码-Spring MVC示例代码-20130313

    本资源,是一些示例代码,包括CXF,Spring MVC,是编写博文的示例代码。同时会不断的修改,最新版本请看日期版本号 1.博文示例代码:使用CXF和Spring...2.博文示例代码:第 1 部分:Spring MVC入门,快速搭建web应用

    Spring MVC 开发快速入门

    篇文章将教你快速地上手使用 Spring 框架,如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦!

    spring2.0技术手册 (扫描版)

    第1章认识Spring ...Spring Framework 是一个开源的Java/Java EE全功能栈(full-stack)的应用程序框架,以Apache许可证形式发布,也有.NET平台上的移植版本 喜欢Java web开发的童鞋可以上手Spring MVC

    Spring3 MVC Hibernate-JPA Eclipse Demo

    2、平台环境:JAVA1.6以上、Apache Tomcat6.0以上、MS SQL2005(可以自己更换数据库,在persistence.xml更改参数就行,具体配置参考第一天给出的链接) 3、调试环境:eclipse(File-import-existing Eclipse projects...

    SpringBoot实战(第4版)清晰版

    3 小结 18 第 2 章开发第一个应用程序 19 2 . 1 运用 Spring Boot 19 2 . 1 . 1 查看初始化的 Spring soot 新项目 21 21 . 2 Spring Boot 项目构建过程解析 24 2 . 2 使川起步依赖, 27 2 . 2 . 1 指定基于功能的...

    spring security 参考手册中文版

    第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 Gradle存储库 23 使用Spring...

    SpringBootWebApplicationStepByStep:使用Spring Boot Magic开发您的第一个Web应用程序

    使用Spring Boot的第一个Web应用程序只需25个步骤,即可使用Spring Boot开发您的第一个Web应用程序安装工具PDF: : 视频: : GIT存储库: : 课程大纲介绍开发第一个Spring Boot Web应用程序很有趣。 Spring Boot使...

    Spring Boot实战 ,丁雪丰 (译者) 中文版

    第2章 开发第一个应用程序 19 2.1 运用Spring Boot 19 2.1.1 查看初始化的Spring Boot新项目 21 2.1.2 Spring Boot项目构建过程解析 24 2.2 使用起步依赖 27 2.2.1 指定基于功能的依赖 28 2.2.2 ...

    spring-boot示例项目

    spring boot demo 是一个Spring Boot、Spring Cloud的项目示例,根据市场主流的后端技术,共集成了30+个demo,未来将持续更新。该项目包含helloworld(快速入门)、web(ssh项目快速搭建)、aop(切面编程)、data-redis...

    韩顺平java从入门到精通视频教程(全94讲)学习笔记整理(齐全)-共448页.docx

    java内容介绍 java编程可以分成三个方向: 1、java se (j2se)桌面开发 java中的基础中的基础 2、java ee (j2ee)web开发 3、java me (j2me)手机开发 ...1995 sun正式发布java第一个版本,目前最新是jdk7.0

    Spring3 MVC +HibernateJPA Eclipse Demo

    2、平台环境:JAVA1.6以上、Apache Tomcat6.0以上、MS SQL2005(可以自己更换数据库,在persistence.xml更改参数就行,具体配置参考第一天给出的链接) 3、调试环境:eclipse(File-import-existing Eclipse projects...

    SpringMVC教程

    第一章 Web MVC简介.pdf 第二章 Spring MVC入门 .pdf 第三章 DispatcherServlet详解.pdf 第四章 Controller接口控制器详解(1).pdf 第四章 Controller接口控制器详解(2).pdf 第四章 Controller接口控制器详解(3...

    spring boot实战.pdf高清无水印

    第2章 开发第一个应用程序 19 2.1 运用Spring Boot 19 2.1.1 查看初始化的Spring Boot新项目 21 2.1.2 Spring Boot项目构建过程解析 24 2.2 使用起步依赖 27 2.2.1 指定基于功能的依赖 28 2.2.2 覆盖...

    《精通Spring2.X企业应用开发详解》随书源码1-15章

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    第1篇为技能学习篇,主要包括Java Web开发环境、JSP语法、JSP内置对象、Java Bean技术、Servlet技术、EL与JSTL标签库、数据库应用开发、初识Struts2基础、揭密Struts2高级技术、Hib锄劬e技术入门、Hibernate高级应用...

    《精通Spring2.X企业应用开发详解》20-23

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

    《精通Spring2.X企业应用开发详解》16-19章

    ======================================================================== &lt;br&gt;第1篇 概述 第1章 Spring概述 第2章 快速入门 第2篇 Spring核心技术 第3章 IoC容器概述 第4章 在IoC容器中...

Global site tag (gtag.js) - Google Analytics