(注意:对原始帖子进行了少量编辑以提高可读性)
Spring MVC使用基于模型视图控制器体系结构(MVC)模式的框架,可以轻松进行Web应用程序开发。 MVC架构模式要求将用户界面(视图),正在处理的数据(模型)和管理视图与模型之间的交互的控制器分开。
Spring MVC的核心是Servlet,即DispatcherServlet ,它处理每个请求。 DispatcherServlet将HTTP请求路由到应用程序开发人员创建的Controller类。 控制器类处理请求,并确定应将哪个视图作为响应的一部分显示给用户。
让我们开发一个简单的Web应用程序,该应用程序接收请求并将一些数据发送回用户。 在继续进行任何操作之前,建议您从此处下载源代码。
对于本教程,您还需要:
1.像Tomcat这样的servlet容器
2. Spring3.0
3. Eclipse是可选的。 我使用eclipse作为我的IDE。 Eclipse使您可以导出可以部署到Tomcat的战争。 但是您也可以使用其他IDE或命令行工具。 4.需要对JSP和Servlet有一定的了解。
步骤1:如果要在J2EE中开发Web应用程序,通常可以通过开发打包在.war文件中的servlet和/或JSP来实现。 还需要包含配置元数据的部署描述符web.xml。 这场战争被部署到了像Tomcat这样的应用服务器上。
使用Spring,首先要做的是通过将org.springframework.web.servlet.DispatcherServlet定义为该应用程序的Servlet类,将Spring连接到此J2EE Web基础结构。 您还需要将org.springframework.web.context.ContextLoaderListener定义为侦听器。 ContextLoaderListener负责加载具有Spring元数据的特定于Spring的应用程序上下文。
web.xml设置确保servlet引擎将对应用程序的每个请求都路由到DipatcherServlet 。 更新为web.xml如下所示:
<listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.htm</url-pattern>
</servlet-mapping>
步骤2:此Web应用程序中的繁重工作由控制器类完成。 这是扩展org.springframework.web.servlet.mvc.AbstractController的普通Java类或bean。 我们重写handleRequestInternal方法。 在这种方法中,您将做一些处理请求的必要工作,其中可能包括例如从数据库中读取数据。
该方法返回一个org.springframework.web.servlet.ModelAndView对象,该对象封装了视图的名称以及该视图需要显示的任何数据(模型)。 ModelAndView将数据作为名称值对保存。此数据稍后可用于视图。 如果视图是jsp,则可以使用jstl技术或直接查询Request对象来访问数据。 我们的控制器的代码如下所示:
public class SpringMVCController extends AbstractController {protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) {ModelAndView mview = new ModelAndView("springmvc") ;mview.addObject("greeting", "Greetings from SpringMVC") ;mview.addObject("member1", new Member("Jonh","Doe", "1234 Main St","Pleasanton","94588","kh@gmail.com","1234")) ;return mview ;}
}
视图springmvc的名称将传递到ModelAndView的构造函数中。 addObject方法调用将添加2个模型对象,即“ greeting”和“ member1”。 稍后,您将看到视图如何检索对象并显示它们。
步骤3:每个Spring应用程序都需要元数据来定义Bean及其依赖项。 对于此应用程序,我们创建一个springmvc-servlet.xml。 我们通过在web.xml中指定其位置来帮助spring找到它。
<context-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/springmvc-servlet.xml</param-value>
</context-param>
在springmvc-servlet.xml中,控制器bean定义为:
<bean name="/*.htm" class="com.mj.spring.mvc.SpringMVCController"/>
步骤4: DispatcherServlet如何知道哪个控制器应该处理请求?
Spring使用处理程序映射将控制器与请求相关联。 2个常用的处理程序映射是BeanNameUrlHandlerMapping和SimpleUrlHandlerMapping 。
在BeanNameUrlHandlerMapping中 ,当请求URL与bean的名称匹配时,bean定义中的类就是将处理请求的控制器。
在我们的示例中,我们使用BeanNameUrlHandlerMapping,如下所示。 每个以.htm结尾的请求url由SpringMVCController处理。
<bean name="/*.htm" class="com.mj.spring.mvc.SpringMVCController"/>
在SimpleUrlHandlerMapping中,映射更加明确。 您可以指定许多URL,并且每个URL都可以与控制器明确关联。
步骤5: DispatcherServlet如何知道作为响应返回什么?
如前所述,控制器的handleRequestInternal方法返回ModelAndView对象。
在上面显示的控制器代码中,视图“ springmvc”的名称在ModelAndView的构造函数中传递。 至此,我们刚刚给出了视图的名称。 我们没有说什么文件,类或工件有助于产生html,也没有说使用的视图技术是JSP还是速度模板还是XSLT。 为此,您需要一个ViewResolver ,它提供视图名称和具体视图之间的映射。 Spring使您可以使用许多不同的技术来生成具体视图,但是对于本示例,我们将使用JSP。
Spring提供了一个支持JSP的InternalResourceViewResolver类,并且springmvc-servlet.xml中的以下声明告诉spring我们正在使用此解析器。 在视图名称中添加了前缀和后缀,以生成呈现视图的jsp文件的路径。
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"></property><property name="suffix" value=".jsp"></property>
</bean>
步骤6:在此示例中,视图解析为springmvc.jsp,该视图使用JSTL获取并显示数据。 Spring使JSP可以将模型对象“ greeting”和“ member1”用作请求范围对象。 出于教育目的,下面的代码也直接从请求中获取对象。
// Using JSTL to get the model data
${greeting}
${member1.lastname// Using java to get the model directly from the request
Map props = request.getParameterMap() ;
System.out.println("PARAMS =" + props) ;
Enumeration em = request.getAttributeNames() ;
while (em.hasMoreElements()) {String name = (String) em.nextElement() ;System.out.println("name = "+name) ;
}
System.out.println("Attrs are "+request.getAttributeNames()) ;
System.out.println("greeting is "+ request.getAttribute("greeting")) ;
Member m = (Member)request.getAttribute("member1") ;
System.out.println("member is "+m.toString()) ;
步骤7:到目前为止,我们开发的所有文件都应打包到war文件中,就像在任何Web应用程序中一样。 通过复制到tomcat_install \ webapps,可以将战争部署到tomcat。 我发动了一场战争,您可以在这里下载。
步骤8:将您的Web浏览器指向http:// localhost:8080 / springmvc / test.htm以运行该应用程序。 浏览器应显示数据。
总而言之,Spring通过提供可以轻松组装的构建块来简化Web应用程序的开发。 我们使用Spring MVC构建了一个Web应用程序。 Spring提供了一种简单的方法来将我们的模型,控制器SpringMVCController和视图springmvc.jsp连接在一起。 我们不必显式地编写任何请求/响应处理逻辑。 通过更改springmvc-servlet.xml中的元数据,您可以切换到其他控制器或其他视图技术。
没错 ,我们的JCG合作伙伴 Manoj Khangaonkar 提供了使用Spring开发Web应用程序的简单指南。 您可以在此处找到为本教程创建的源代码。 别忘了分享!
相关文章:
- JBoss 4.2.x Spring 3 JPA Hibernate教程
- 使用Spring将POJO公开为JMX MBean
- Spring3 RESTful Web服务
- 带有Spring和Maven教程的JAX–WS
- 使用Spring Security保护GWT应用程序
- 使用Spring AspectJ和Maven进行面向方面的编程
- Spring MVC拦截器示例
- 在Spring容器中声明bean
- 使用Spring发送电子邮件
翻译自: https://www.javacodegeeks.com/2011/02/spring-mvc-development-tutorial.html