zoukankan      html  css  js  c++  java
  • 笔记23 搭建Spring MVC

    搭建一个最简单的SpringMVC示例

    1.配置DispatcherServlet 

    DispatcherServlet是Spring MVC的核心。在这里请求会第一次 接触到框架,它要负责将请求路由到其他的组件之中。 

    使用Java将DispatcherServlet配置在Servlet容器中,而不 会再使用web.xml文件。

    SpittrWebAppInitializer.java==================web.xml

     1 package spittr.config;
     2 import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
     3 
     4 public class SpittrWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
     5 
     6     @Override
     7     protected Class<?>[] getRootConfigClasses() {
     8         // TODO Auto-generated method stub
     9         return new Class<?>[] { RootConfig.class };
    10     }
    11 
    12     @Override
    13     protected Class<?>[] getServletConfigClasses() {
    14         // TODO Auto-generated method stub
    15         return new Class<?>[] { WebConfig.class };
    16     }
    17 
    18     @Override
    19     protected String[] getServletMappings() { // 将DispatcherServlet映射到“/”
    20         // TODO Auto-generated method stub
    21         return new String[] { "/" };
    22     }
    23 
    24 }

    扩 展AbstractAnnotationConfigDispatcherServletInitializer的任意类都会自动地 配置Dispatcher-Servlet和Spring应用上下文,Spring的应用上下 文会位于应用程序的Servlet上下文之中。 

    2.Spring MVC配置类

    WebConfig.java=========================myspringmvc-servlet.xml

     1 package spittr.config;
     2 
     3 import org.springframework.context.annotation.Bean;
     4 import org.springframework.context.annotation.ComponentScan;
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.web.servlet.ViewResolver;
     7 import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
     8 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
     9 import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    10 import org.springframework.web.servlet.view.InternalResourceViewResolver;
    11 
    12 @Configuration
    13 @EnableWebMvc // 启用Spring MVC
    14 @ComponentScan("spittr.web") // 启用组件扫描
    15 public class WebConfig extends WebMvcConfigurerAdapter {
    16     @Bean // 配置JSP视图解析器
    17     public ViewResolver viewResolver() {
    18         InternalResourceViewResolver resolver = new InternalResourceViewResolver();
    19         resolver.setPrefix("/WEB-INF/view/");
    20         resolver.setSuffix(".jsp");
    21         resolver.setExposeContextBeansAsAttributes(true);
    22         return resolver;
    23     }
    24 
    25     @Override // 配置静态资源处理
    26     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
    27         // TODO Auto-generated method stub
    28         configurer.enable();
    29     }
    30 
    31 }

    上面的代码中第一件需要注意的事情是WebConfig现在添加了 @Component-Scan注解,因此将会扫描spitter.web包来查找组件。稍后编写的控制器将会带有@Controller注 解,这会使其成为组件扫描时的候选bean。因此,不需要在配置 类中显式声明任何的控制器。

    然后添加了一个ViewResolver bean。更具体来讲, 是Internal-ResourceViewResolver。功能是查找JSP文件,在查找的 时候,它会在视图名称上加一个特定的前缀和后缀。

    最后,新的WebConfig类还扩展了WebMvcConfigurerAdapter 并重写了其configureDefaultServletHandling()方法。通过 调用DefaultServlet-HandlerConfigurer的enable()方法,要求DispatcherServlet将对静态资源的请求转发到Servlet容 器中默认的Servlet上,而不是使用DispatcherServlet本身来处理 此类请求。 

    3.RootConfig.java

    因为主要聚焦于Web开 发,而Web相关的配置通过DispatcherServlet创建的应用上下文 都已经配置好了,因此现在的RootConfig相对很简单

     1 package spittr.config;
     2 
     3 import org.springframework.context.annotation.ComponentScan;
     4 import org.springframework.context.annotation.ComponentScan.Filter;
     5 import org.springframework.context.annotation.Configuration;
     6 import org.springframework.context.annotation.FilterType;
     7 import org.springframework.web.servlet.config.annotation.EnableWebMvc;
     8 
     9 @Configuration
    10 @ComponentScan(basePackages = { "spittr" }, excludeFilters = {
    11         @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })
    12 public class RootConfig {
    13 
    14 }

    4.编写一个简单的控制器HomeController,用于显示首页

     1 package spittr.web;
     2 
     3 import org.springframework.stereotype.Controller;
     4 import org.springframework.web.bind.annotation.RequestMapping;
     5 import org.springframework.web.bind.annotation.RequestMethod;
     6 
     7 @Controller // 声明为一个控制器
     8 public class HomeController {
     9     public HomeController() {
    10     }
    11 
    12     @RequestMapping(value = "/", method = RequestMethod.GET)
    13     public String home() {
    14         return "home";
    15     }
    16 }

      HomeController唯一的一个方法,也就是home()方法,带 有@RequestMapping注解。它的value属性指定了这个方法所要处 理的请求路径,method属性细化了它所处理的HTTP方法。

      在本例 中,当收到对“/”的HTTP GET请求时(也可以是其他的,例如value的值为home),就会调用home()方法。

       home()方法其实并没有做太多的事情:它返回了一 个String类型的“home”。这个String将会被Spring MVC解读为要 渲染的视图名称。

      DispatcherServlet会要求视图解析器将这个 逻辑名称解析为实际的视图。 鉴于配置InternalResourceViewResolver的方式,视图 名“home”将会解析为“/WEB-INF/views/home.jsp”路径的JSP

    5.home.jsp编写    

     1 <%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
     2 <%@ taglib prefix="c"  uri="http://java.sun.com/jsp/jstl/core"%>
     3 <%
     4 String path = request.getContextPath();
     5 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     6 %>
     7 
     8 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     9 <html>
    10   <head>
    11     <base href="<%=basePath%>">
    12     
    13     <title>Spittr</title>
    14     
    15     <meta http-equiv="pragma" content="no-cache">
    16     <meta http-equiv="cache-control" content="no-cache">
    17     <meta http-equiv="expires" content="0">    
    18     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    19     <meta http-equiv="description" content="This is my page">
    20     <!--
    21     <link rel="stylesheet" type="text/css" href="styles.css">
    22     -->
    23 
    24   </head>
    25   
    26   <body>
    27     <h1>Welcome to Spittr</h1>
    28     <a href="<c:url value="/spittles"/>">Spittles</a>
    29     <a href="<c:url value="/spitter/register"/>">Register</a>
    30   </body>
    31 </html>

     6.测试

    测试分为两种,一种是采用单元测试的方法,另一种是部署到tomcat服务器上进行测试。

    测试一:单元测试

    <1>编写HomeControllerTest.java

     1 package spittr.web;
     2 
     3 import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
     4 import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.view;
     5 
     6 import org.junit.Test;
     7 import org.springframework.test.web.servlet.MockMvc;
     8 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
     9 
    10 public class HomeControllerTest {
    11     @Test
    12     public void testHomePage() throws Exception {
    13         HomeController controller = new HomeController();
    14         // 搭建MockMvc
    15         MockMvc mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    16         // 对“/”执行GET请求 预期得到home视图
    17         mockMvc.perform(get("/")).andExpect(view().name("home"));
    18     }
    19 }

    发起了对“/”的GET请求,并断言结果视图的名称为 home。它首先传递一个HomeController实例 到MockMvcBuilders.standaloneSetup()并调用build()来构 建MockMvc实例。然后它使用MockMvc实例来执行针对“/”的GET请 求并设置期望得到的视图名称。

    <2>需要的jar包

      官网下载spring-framework-5.0.5.RELEASE,外加junit-4.12jar和hamcrest-all-1.3.jar

                    

    测试二:服务器测试

    <1>需要的jar包

          

    <2>结果

     

  • 相关阅读:
    修改nuget包默认存放路径,避免增加C盘的负担
    .Net Core 3.0 (一):安装Vs2019
    .NET Core 学习资料
    SQLSERVER查询整个数据库中某个特定值所在的表和字段的方法
    MySql 时间查询
    如何设置IIS程序池的回收时间,才能最大程度的减少对用户的影响?
    SqlServer 获取工作日(周六、周日休息,周六日不休息,周六不休息)
    SQL Server 删除数据库中表数据
    SQL Server 删除数据库所有表和所有存储过程
    摘要
  • 原文地址:https://www.cnblogs.com/lyj-gyq/p/8922081.html
Copyright © 2011-2022 走看看