`
bolide74
  • 浏览: 84816 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring温故知新:WEB篇(二)Hello,World!

阅读更多
在准备写代码之前,我们首先得把下列必备的库导入项目:
spring-framework-2.5.6\dist\spring.jar
spring-framework-2.5.6\dist\modules\spring-webmvc.jar
spring-framework-2.5.6\lib\jakarta-commons\commons-logging.jar
spring-framework-2.5.6\lib\j2ee\jstl.jar

      只要把这几个文件拷贝到项目的WebContent\WEB-INF\lib目录下,然后在eclipse里刷新一下项目,就可以自动导入库。

        这时候我们可以开始修改项目的WebContent\WEB-INF文件夹下的web.xml这个配置文件。
        要使用Spring来制作一个web,首先我们得在web.xml里新建一个servlet,这个servlet的作用就是告诉tomcat容器,当一个请求符合某一种规则的时候就用Spring来负责处理这个请求。

        例如我们需要让Spring来接管所有以.do为后缀的url请求,那么就需要修改web.xml为以下内容:

web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
	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">
	<display-name>SpringWeb</display-name>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
		<welcome-file>index.htm</welcome-file>
		<welcome-file>index.jsp</welcome-file>
		<welcome-file>default.html</welcome-file>
		<welcome-file>default.htm</welcome-file>
		<welcome-file>default.jsp</welcome-file>
	</welcome-file-list>
	<servlet>
		<servlet-name>dispatcherServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>dispatcherServlet</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
</web-app>


        如果有servlet编程基础的话就可以知道,servlet-name节点的内容是可以自定义的,不过<servlet>和对应的<servlet-mapping>一定要有相同的servlet-name。它们分别代表了一个servlet的定义和servlet的映射关系。

以上这个servlet的作用,就是告诉tomcat只要url请求是以.do为后缀的,就交给org.springframework.web.servlet.DispatcherServlet这个Spring的类来处理,而DispatcherServlet看字面意思就能明白它的作用就是一个分配器。



        只要在web.xml里成功配置好以后,我们就可以正式进入spring部分。首先我们得在web.xml的同一目录下新建一个dispatcherServlet-servlet.xml文件。

        当然你可以在任意目录新建一个任意文件名的xml,而且一般都会放在WEB-INF文件夹下的一个新建的自定义文件夹里,一般为WEB-INF\conf文件夹。不过这样的话你还得在web.xml文件里修改一下servlet的参数。
这里就把这个内容作为自学内容交给你自己去google吧,学会google要比学会编程更重要啊!

        那么默认情况下是不是这个xml的文件名必须是dispatcherServlet-servlet.xml呢?回答是肯定的。
        在默认情况下,Spring会首先自动查找web.xml同一目录下、而且文件名为servlet的名称再加上-servlet的xml文件。
        这时候你就会发现dispatcherServlet-servlet.xml这个文件名的横杆前部分就是之前web.xml里的servlet-name的值、后半部分就是恒定的servlet这个单词。
        如果之前你自定义了servlet-name,比如改成了bolide74Servlet,那么这里的文件名就必须是bolide74Servlet-servlet.xml。

dispatcherServlet-servlet.xml:
<?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"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	<!-- 视图 -->
	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 使用标签库,暂时可不用 -->
		<!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/> -->
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean>

	<!-- 映射 -->
	<bean id="urlMapping"
		class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
		<property name="mappings">
			<props>
				<prop key="helloWorld.do">helloWorld</prop>
			</props>
		</property>
	</bean>

	<!-- action -->
	<bean id="helloWorld" class="com.iteye.bolide74.action.HelloWorld">
		<property name="viewPage" value="helloWorld" />
	</bean>
</beans>


        你会发现,这个dispatcherServlet-servlet.xml其实就是一个Spring配置文件,里面都是一个个的bean,很亲切吧!
        viewResolver这个bean的作用就是告诉Spring我们的web视图文件都是以.jsp为后缀也就是jsp页面,它们都存放在/WEB-INF/jsp/这个文件夹下面。只要有了这个bean那么接下来的action部分就不用这么麻烦的每次都把jsp页面的路径和文件名都写全了。
        urlMapping就是一个映射表,它告诉了Spring哪种url请求对应了哪一个action,例如我们这里是告诉Spring只要url请求为helloWorld.do,那么调用helloWorld这个bean。
        helloWorld这个bean我就不多做解释了。它的注入参数为viewPage,值为helloWorld。这个helloWorld的值代表了这个action对应的视图文件为/WEB-INF/jsp/helloWorld.jsp,由于上面我们在viewResolver设置过路径和后缀,所以我们这里只需要输入helloWorld就可以了。

最后我们总结一下这个xml的作用,就是告诉Spring我们的视图文件为存放在/WEB-INF/jsp/目录下的所有jsp文件,并且设置当url请求为helloWorld.do的时候就调用helloWorld这个bean来处理,并把helloWorld这个值注入了viewPage这个参数。



接下来我们新建com.iteye.bolide74.action.HelloWorld这个action类:

HelloWorld.java:
package com.iteye.bolide74.action;

import java.util.HashMap;
import java.util.Map;

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

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

public class HelloWorld implements Controller {
	private String viewPage;

	public String getViewPage() {
		return viewPage;
	}

	public void setViewPage(String viewPage) {
		this.viewPage = viewPage;
	}


	@Override
	public ModelAndView handleRequest(HttpServletRequest arg0,
			HttpServletResponse arg1) throws Exception {
		String msg=arg0.getParameter("msgValue");
		msg="你输入的值为"+msg;
		Map model = new HashMap();
		model.put("msg", msg);
		return new ModelAndView(getViewPage(), model);
	}
}


这个类实现了Controller接口,这个接口是由Spring提供的。它其实是起到了一个代理作用,还记得以前的AOP代理么?忘记了的话可以回头复习一下。

这个类有一个viewPage成员属性,使用了set/get注入。当然你也可以用自定义的属性。它的值代表了这个action所对应的视图文件的文件名,这个我们之前有提到过。

Controller接口有一个handleRequest抽象方法,它的类型为ModelAndView,这个类型是Spring提供的,它的命名就是它的作用,后面我会详细介绍一下这个类型。简单的说就是这个类包含了一个url请求的参数数据和视图内容。如果你知道MVC,那么这个类就包含了其中的M和V而Controller接口就是那个C。
这里的handleRequest方法我们在"原Model"里嵌入了一个msg参数,它的值为HttpServletRequest获取的msgValue这个URL参数的值。


最后在/WEB-INF/jsp/目录下新建一个helloWorld.jsp视图文件:

helloWorld.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
	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=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="helloWorld.do">
		<input type="text"  name="msgValue"  value="" /> 
		<input type="submit"  value="speak" />
	</form>
	<%=request.getAttribute("msg")%>
</body>
</html>

这个我想都看的懂吧,就是一个传统的jsp页面。里面就一个form,注意到name为msgValue的文本输入框了没?上面的HelloWorld.java的作用获取的就是这里的msgValue的值然后处理了一下再返回给客户端。



好了,大功告成,我们直接F11启动,注意是Run on Server,这时候eclipse会新建一个内置浏览器标签,浏览器里的url地址为http://localhost:8080/SpringWeb/WEB-INF/jsp/helloWorld.jsp但是页面内容却显示的是404错误。
这是由于tomcat的安全机制,客户端是无法直接访问WEB-INF这个文件夹以及它下面的所有文件的,因此我们才会把所有重要的配置文件、视图源码之类的都放在这个文件夹下面。

我们要看到劳动成功,就得在地址栏里输入URL为:http://localhost:8080/SpringWeb/helloWorld.do  如果你全部按步骤进行,那么现在你就能看到页面内容为



在输入框里输入Hello,World!再点击Speak按钮,你就能看到“你输入的值为Hello,World!”
恭喜你,终于入门Spring Web编程了。




最后再抛出一个问题,当你在输入框内输入中文“你好!”的时候,页面返回给你的内容却是一段乱码,这该怎么办呢?这就是我们下一篇必须要解决的问题,你可以先自己google一下。






  • 大小: 152.4 KB
1
2
分享到:
评论

相关推荐

    playground:此仓库包含Hello World项目

    在IT行业中,编程初学者经常会接触到“Hello World”项目,这是一个经典的入门级示例,用于演示如何在不同的编程语言中打印出“Hello, World!”这一简单语句。在这个名为"playground"的仓库中,我们可以推测它是一个...

    Spring温故知新六AOP向切面程

    【Spring AOP 向切面编程详解】 Spring框架的核心特性之一就是AOP(Aspect Oriented Programming,面向切面编程)。AOP提供了一种模块化和声明式的方式来处理系统中的横切关注点,如日志、事务管理、权限检查等。在...

    spring_2021.7.14.zip

    标题中的"spring_2021.7.14.zip"表明这是一份关于Spring框架的资料,时间戳为2021年7月14日,可能包含了该日期前后的学习或项目经验总结。描述中提到是"项目源码笔记",适合"入门级别或者复习用",意味着这份资料...

    自己动手写Struts.pdf

    #### 第二篇 构建自己的Web框架 ##### 第4章 力学笃行:快速实现自己的Web框架 - **使用MVC Model2规范实现Web框架的示意图**:展示了MVC各个组件之间的交互关系。 - **视图层设计** - **使用JSP**:使用JSP实现...

    hi_world:让我们再打个招呼世界.......

    描述中的“让我们再打个招呼世界”直接指向了编程中最基础的“Hello, World!”程序,这是一个用于初学者入门的简单程序,用来演示语言的基本用法。 在Python中,打印“Hello, World!”是非常直观的,只需一行代码:...

    Spring全家桶思维导图

    对于经验丰富的开发者,它则可以帮助温故知新,快速回忆起Spring的各项技术。 首先,Spring的核心组件包括Spring Core和Spring Beans,它们提供了依赖注入(DI)和面向切面编程(AOP)的基础。依赖注入使得对象之间...

    七年级仁爱英语Unit1Topic1导学案.doc

    这篇七年级仁爱英语Unit1Topic1的导学案主要涵盖了英语基础知识和日常交际用语的学习,旨在帮助学生巩固旧知识,掌握新的语言技能。以下是详细的知识点解析: **一、温故知新** 这部分主要是对基本的英语问候语和...

    SQL.24小时自学手册

    只要在短短的二十四小时内,您就可以上手并开始使用SQL,本书採用step-by-step 的方法,以及延续性的课程规划,让您温故知新,举一反三,快速掌握SQL的精髓。 * 学习管理资料库物件 * 资料查询的主要函数与子句 ...

    六年级英语下册 Unit 3 Who's That Man(第2课时)教案 陕旅版-陕旅版小学六年级下册英语教案.doc

    "的第二课时教学设计,旨在帮助学生掌握一系列关键短语和句型,提升他们的英语对话能力,同时注重对过去式的学习与应用。 【教学目标】 1. 学习并理解以下短语: - At the age of(在...岁时) - Make somebody ...

    新北师大版数学二年级上册第一单元教案-20页.pdf

    这篇文档主要涉及的是小学二年级数学的教学内容,包括了三个课题:1. "谁的得分高"(第1课时和第2课时)、2. "秋游"。以下是各课题的主要知识点: 1. **课题:谁的得分高(第1课时)** - **知识要点**: - 学习...

    机械军工行业:“温故知新”系列之工业机器人行业复盘(二):从美国汽车行业“2mm工程”看工业机器人国产化空间.pdf

    从给定文件中提取的知识点如下: 1. 工业机器人行业概述:工业机器人是机械工程中的一种高科技自动化设备,主要应用于汽车制造、电子电器、化学橡胶塑料、金属制品、食品制造等多个行业。根据国际机器人联合会(IFR...

    springcloud视频学习6-2

    《SpringCloud视频学习6-2》是一段深入浅出的教程,主要针对SpringCloud这一流行的微服务框架进行讲解。SpringCloud作为一个完整的微服务解决方案,它提供了包括服务注册与发现、配置中心、全链路监控、熔断器、负载...

    spring cloud + openshift

    spring cloud + openshift example

    通信行业:温故知新,从4G看5G-1202-中信建投-12页.pdf

    通信行业:温故知新,从4G看5G-1202-中信建投-12页.pdf

    温故知新ASP.NET 2.0(C#)

    ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它基于.NET Framework,提供了丰富的功能和强大的性能。C#是一种面向对象的编程语言,是ASP.NET开发的主要语言之一,以其简洁、类型安全和高性能著称。在这...

    “温故知新”系列之工业机器人行业复盘(二):从美国汽车行业“2mm工程”看工业机器人国产化空间.rar

    “温故知新”系列之工业机器人行业复盘(二):从美国汽车行业“2mm工程”看工业机器人国产化空间

    jsp,servlet,filter温故知新

    本文将深入探讨这些技术,帮助开发者温故知新,理解它们的功能、工作原理以及如何在实际项目中应用。 ### JSP(JavaServer Pages) JSP是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容...

    java tutorial

    这篇教程将深入浅出地探讨Java的基础知识,帮助初学者快速入门,并为有经验的开发者提供温故知新的机会。 首先,我们要了解Java的基本概念。Java是由Sun Microsystems公司(现已被Oracle公司收购)于1995年推出的...

    spring cloud config

    Spring Cloud Config 是一个用于分布式系统配置管理的框架,它允许开发者在远程服务器上集中管理和版本化应用的配置,而不是在每个应用本地存储配置。这种方式在微服务架构中尤其有用,因为多个独立的服务需要共享和...

Global site tag (gtag.js) - Google Analytics