SpringMVC-HelloWorld

2.5、Hello World入门

2.5.1、准备开发环境和运行环境:

☆开发工具:eclipse

☆运行环境:tomcat6.0.20

☆工程:动态web工程(springmvc-chapter2

☆spring框架下载:

spring-framework-3.1.1.RELEASE-with-docs.zip

☆依赖jar包:

1、  Spring框架jar包:

为了简单,将spring-framework-3.1.1.RELEASE-with-docs.zip/dist/下的所有jar包拷贝到项目的WEB-INF/lib目录下;

2、  Spring框架依赖的jar包:

需要添加Apache commons logging日志,此处使用的是commons.logging-1.1.1.jar;

需要添加jstl标签库支持,此处使用的是jstl-1.1.2.jar和standard-1.1.2.jar;

2.5.2、前端控制器的配置

在我们的web.xml中添加如下配置:

<servlet>  <servlet-name>chapter2</servlet-name>  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <load-on-startup>1</load-on-startup>  
</servlet>  
<servlet-mapping>  <servlet-name>chapter2</servlet-name>  <url-pattern>/</url-pattern>  
</servlet-mapping>  

load-on-startup表示启动容器时初始化该Servlet;

url-pattern表示哪些请求交给Spring Web MVC处理, “/” 是用来定义默认servlet映射的。也可以如“*.html”表示拦截所有以html为扩展名的请求。

 

自此请求已交给Spring Web MVC框架处理,因此我们需要配置Spring的配置文件,默认DispatcherServlet会加载WEB-INF/[DispatcherServlet的Servlet名字]-servlet.xml配置文件。本示例为WEB-INF/ chapter2-servlet.xml。

 

2.5.3、在Spring配置文件中配置HandlerMapping、HandlerAdapter

具体配置在WEB-INF/ chapter2-servlet.xml文件中:

<!-- HandlerMapping -->  
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>  <!-- HandlerAdapter -->  
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>  

BeanNameUrlHandlerMapping:表示将请求的URL和Bean名字映射,如URL为 “上下文/hello”,则Spring配置文件必须有一个名字为“/hello”的Bean,上下文默认忽略。

SimpleControllerHandlerAdapter:表示所有实现了org.springframework.web.servlet.mvc.Controller接口的Bean可以作为Spring Web MVC中的处理器。如果需要其他类型的处理器可以通过实现HadlerAdapter来解决。

2.5.4、在Spring配置文件中配置ViewResolver

具体配置在WEB-INF/ chapter2-servlet.xml文件中:

<!-- ViewResolver -->  
<bean 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>  

InternalResourceViewResolver:用于支持Servlet、JSP视图解析;

    viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,classpath中必须包含jstl的相关jar包;

    prefix和suffix:查找视图页面的前缀和后缀(前缀[逻辑视图名]后缀),比如传进来的逻辑视图名为hello,则该该jsp视图页面应该存放在“WEB-INF/jsp/hello.jsp”;

 

2.5.5、开发处理器/页面控制器

package cn.javass.chapter2.web.controller;  
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 HelloWorldController implements Controller {  @Override  public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) throws Exception {  //1、收集参数、验证参数  //2、绑定参数到命令对象  //3、将命令对象传入业务对象进行业务处理  //4、选择下一个页面  ModelAndView mv = new ModelAndView();  //添加模型数据 可以是任意的POJO对象  mv.addObject("message", "Hello World!");  //设置逻辑视图名,视图解析器会根据该名字解析到具体的视图页面  mv.setViewName("hello");  return mv;  }  
}  

org.springframework.web.servlet.mvc.Controller:页面控制器/处理器必须实现Controller接口,注意别选错了;后边我们会学习其他的处理器实现方式;

public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse resp) :功能处理方法,实现相应的功能处理,比如收集参数、验证参数、绑定参数到命令对象、将命令对象传入业务对象进行业务处理、最后返回ModelAndView对象;

ModelAndView:包含了视图要实现的模型数据和逻辑视图名;

“mv.addObject("message", "Hello World!");”表示添加模型数据,此处可以是任意POJO对象;

“mv.setViewName("hello");”表示设置逻辑视图名为“hello”,视图解析器会将其解析为具体的视图,如前边的视图解析器InternalResourceViewResolver会将其解析为“WEB-INF/jsp/hello.jsp”。

 

我们需要将其添加到Spring配置文件(WEB-INF/chapter2-servlet.xml),让其接受Spring IoC容器管理:

<!-- 处理器 -->  
<bean name="/hello" class="cn.javass.chapter2.web.controller.HelloWorldController"/>  

name="/hello":前边配置的BeanNameUrlHandlerMapping,表示如过请求的URL为 “上下文/hello”,则将会交给该Bean进行处理。 

2.5.6、开发视图页面

创建 /WEB-INF/jsp/hello.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>Hello World</title>  
</head>  
<body>  
${message}  
</body>  
</html>  

${message}:表示显示由HelloWorldController处理器传过来的模型数据。

2.5.6、启动服务器运行测试

通过请求:http://localhost:9080/springmvc-chapter2/hello,如果页面输出“Hello World! ”就表明我们成功了!

 

 

2.5.7、运行流程分析

如图2-3

图2-3

运行步骤:

1、  首先用户发送请求http://localhost:9080/springmvc-chapter2/hello——>web容器,web容器根据“/hello”路径映射到DispatcherServlet(url-pattern为/)进行处理;

2、  DispatcherServlet——>BeanNameUrlHandlerMapping进行请求到处理的映射,BeanNameUrlHandlerMapping将“/hello”路径直接映射到名字为“/hello”的Bean进行处理,即HelloWorldController,BeanNameUrlHandlerMapping将其包装为HandlerExecutionChain(只包括HelloWorldController处理器,没有拦截器);

3、  DispatcherServlet——> SimpleControllerHandlerAdapter,SimpleControllerHandlerAdapter将HandlerExecutionChain中的处理器(HelloWorldController)适配为SimpleControllerHandlerAdapter;

4、  SimpleControllerHandlerAdapter——> HelloWorldController处理器功能处理方法的调用,SimpleControllerHandlerAdapter将会调用处理器的handleRequest方法进行功能处理,该处理方法返回一个ModelAndView给DispatcherServlet;

5、  hello(ModelAndView的逻辑视图名)——>InternalResourceViewResolver, InternalResourceViewResolver使用JstlView,具体视图页面在/WEB-INF/jsp/hello.jsp;

6、  JstlView(/WEB-INF/jsp/hello.jsp)——>渲染,将在处理器传入的模型数据(message=HelloWorld!)在视图中展示出来;

7、  返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

 

到此HelloWorld就完成了,步骤是不是有点多?而且回忆下我们主要进行了如下配置:

 

1、  前端控制器DispatcherServlet;

2、  HandlerMapping

3、  HandlerAdapter

4、  ViewResolver

5、  处理器/页面控制器

6、  视图

 

因此,接下来几章让我们详细看看这些配置,先从DispatcherServlet开始吧。

转载于:https://www.cnblogs.com/ClassNotFoundException/p/5845360.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256437.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习——支持向量机SVM之非线性模型(原问题和对偶问题)

目录 一、原问题&#xff08;prime problem&#xff09; 二、原问题的对偶问题&#xff08;dual problem&#xff09; 1、定义一个辅助函数 2、定义对偶问题 >>>问题1&#xff1a;上面说到遍历w&#xff0c;那w的取值范围和取值步长是怎样的&#xff1f;即遍历的…

(转)Apache Rewrite 详解

(转)Apache Rewrite 详解参考文档&#xff1a;http://man.chinaunix.net/newsoft/ApacheManual/mod/mod_rewrite.htmlApache Rewrite 详解一 入门RewriteEngine onRewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php就这两行. 然后就完成了URL重写功能了. 首先服务器是需要支…

python轮廓函数的使用

在图像的处理中有时候需要对图像中的目标区域提出出轮廓 读取图像 调用OpenCV的库使用cv.imread()来读取图像。 图像为 灰度化 二值化 提取轮廓时&#xff0c;图像一般都是二值化后的图像。在本次程序中选用cv2.THRESH_BINARY的二值化方式。即将大于阈值的部分设定为255&am…

Intent Bundle页面跳转信息的传递

MainActivity LoginActivity LoginLayout 转载于:https://www.cnblogs.com/xiaolei121/p/5846644.html

机器学习——支持向量机SVM之非线性模型(原问题转化为对偶问题)

目录 一、复习&#xff08;原问题、对偶问题、KKT条件、凸函数&#xff09; 二、将最优化问题标准化为原问题&#xff08;严格转化为标准形式&#xff09; 1、原最优化问题 2、标准化后的问题 三、转化为对偶问题&#xff08;注意变量的对应关系&#xff09; 四、对对偶问…

静止的单摄像机无法得到像点的三维坐标详解

我们知道在机器视觉中通常要使用的搭建的视觉测量系统对一个物体的尺寸、形变、以及三维形貌进行测量。一般按照摄像机的个数以及组成部分分为三类测量方法。分别为单目测量、双目&#xff08;大于2为多目&#xff09;测量、以及结构光测量。 单目测量系统 顾名思义单目就指的…

未能加载文件或程序集“Poderosa.Core

https://github.com/poderosaproject/poderosa上下载的一个开源工程&#xff0c;程序是在VS2012上编译的&#xff0c;然后VS2015转换后编译失败&#xff0c;报“未能加载文件或程序集“Poderosa.Core......”的错误 猜测是转换的时候引用丢失了&#xff0c;于是添加引用 F:\...…

图像的像素、分辨率、像元尺寸、大小、清晰度的关系

图像的像素&#xff1a; 图像是由像素所组成的&#xff0c;像素的多少表明摄像机所含有的感光元件的多少。像素是指一张图像中所有的像素数之和。 图像分辨率&#xff1a; 是指表达方式也为“水平像素数垂直像素数” 像元尺寸&#xff1a; 是指一个像素在长和宽方向上所代表的实…

机器学习——支持向量机SVM实例(兵王问题,SVM求解步骤以及思路,不求解不编程)

目录 一、问题描述&#xff08;兵王问题&#xff09; 二、步骤 1、获得数据 2、样本划分&#xff08;训练样本和测试样本&#xff09; 3、训练样本得到SVM模型 ​ 1&#xff09;数据处理 2&#xff09;训练样本和测试样本归一化 3&#xff09;选择核函数和调参 4&#…

Django的安装

Django是Python的一款Web开源框架&#xff0c;所以Django是依赖于Python的&#xff0c;首先要安装Python。 Python安装 官网地址&#xff1a;http://www.python.org/download/ 在安装Python的时候&#xff0c;会有人纠结&#xff0c;是要安装Python2还是Python3呢&#xff1f;其…

机器学习——支持向量机SVM之多分类问题

目录 方法1&#xff1a;改造目标函数与限制条件 方法2&#xff1a;一类对其他类&#xff08;类数为N&#xff0c;需要建立N个SVM模型&#xff09; 情形1&#xff1a;多个SVM模型结果交集得出确切归类 情形2&#xff1a;多个SVM模型结果交集没有得出确切归类 方法3&#xff…

python3版本无法加载reload解决办法NameError: name 'reload' is not defined

很多人在运行八点法求基础矩阵问题时&#xff0c;都会遇到NameError: name ‘reload’ is not defined的错误 只需在最前面加上from imp import reload即可

hdu 2612 Find a way(bfs)

Problem DescriptionPass a year learning in Hangzhou, yifenfei arrival hometown Ningbo at finally. Leave Ningbo one year, yifenfei have many people to meet. Especially a good friend Merceki. Yifenfei’s home is at the countryside, but Merceki’s home is in …

七桥问题

怎么不重复地走完连接两座岛和陆地的七座桥&#xff1f; 简化为以下&#xff1a; 答案是不能走完的。 奇点&#xff1a;这个点有奇数条线汇聚于此 偶点&#xff1a;这个点有奇数条线汇聚于此 七桥问题——一笔画问题 若一个图形全部是偶点或者只有2个奇点&#xff08;没有…

office2016打开PPT出现解决VBE6EXT.OLB不能被加载问题的解决办法

第一步 打开路径C:\Program Files (x86)\Microsoft Office\root\VFS\ProgramFilesCommonX86\Microsoft Shared\VBA。找到VBA只要是默认安装路径均一样。 第二步 打开VBA6找到VBE6EXT.OLB将其复制到VBA7.1中。 第三步 打开VBA7.1找到VBE7.DLL将其复制到VBA6中。 第四步…

机器学习——人工神经网络之发展历史(神经元数学模型、感知器算法)

目录 一、神经元的数学模型 ​ 二、感知器算法&#xff08;SVM算法前身&#xff09; 1、目的 2、流程 >>>问题1&#xff1a;下图w和b的调整是什么意思&#xff1f; 3、算法的有效性验证 1&#xff09;原算法 2&#xff09;增广矩阵 3&#xff09;修改后的算法…

打开word2016总是出现很抱歉,此功能看似中断需要修复。。问题解决办法

第一步 打开运行窗口&#xff0c;在电脑桌面左下角有个圆圈点击进去&#xff0c;输入regedit&#xff0c;即可进入。 第二步 打开HKEY_CURRENT_USER中的SOFTWARE 第三步 找到HKEY_CURRENT_USER\SOFTWARE\Microsoft\Office\16.0\Word\Options项如图红色箭头标示。然后点击O…

机器学习——人工神经网络之多层神经网络(多层与三层)

目录 一、多层神经网络 1、多层神经网络数学模型 2、数学模型中的非线性函数fai 1&#xff09;非线性函数fai存在的意义 2&#xff09;非线性函数fai具体是什么&#xff1f; 3、多层神经网络与单层神经网络的区别与改进 1&#xff09;单层神经网络数学模型 2&#xff0…

排序算法02--冒泡排序

思路&#xff1a;冒泡排序 就是把大的数一个个沉到下面&#xff0c;当然也可以是把小的数一个个浮到上面。 在最外层需要比较n-1次&#xff0c;因为n-1个大的数被沉到了下面&#xff0c;剩下一个自然就是最小的数了。 在这n-1次的里层&#xff0c;还需要亮亮相互比较&#xff0…