美文网首页Java Spring MVC
IntelliJ IDEA开发Spring MVC (一)

IntelliJ IDEA开发Spring MVC (一)

作者: 喝粥蛋 | 来源:发表于2017-05-21 14:39 被阅读194次

    一、Maven自动导入jar包

    打开你的 pom.xml 文件,你会发现它是这个样子:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.ali</groupId>
      <artifactId>webstore</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>webstore Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
    
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
    
      </dependencies>
      <build>
        <finalName>webstore</finalName>
      </build>
    </project>
    

    你现在需要做的是在<dependencies> </dependencies>之间加入你的依赖,如下所示:

         <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.0.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
    

    junit这个自动生成的依赖我们用不上,删除它。
    完成后的 pom.xml 文件如下(以后我只是列出需要的依赖,不会再有完整是展示,因为都差不多)

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.ali</groupId>
      <artifactId>webstore</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>webstore Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>4.3.0.RELEASE</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>3.1.0</version>
          <scope>provided</scope>
        </dependency>
      </dependencies>
      <build>
        <finalName>webstore</finalName>
      </build>
    </project>
    

    因为这是一个Spring MVC web项目,所以我们需要spring-webmvc的依赖;添加 jstl 是为了让我们编写 jsp 页面的时候轻松点;同理添加 javax.servlet-api 也是为了使用和 servlet 相关的代码。

    打开你的 Exrernal Libraries,你会发现它长这个样子:



    这就是Maven的好处,它不仅能够将你需要的 jar 包下载下来,而且还能够将你需要 jar 包所依赖的 jar 包也下载下来。

    二、建立java文件夹


    建好后如下图所示:



    将建立的 java 文件夹设置为 sources 文件夹,如下图所示:



    此时 java 文件夹会变为蓝色。
    最后在 java 文件夹(请注意你 java 文件夹的颜色)下面新建几个子文件夹,效果如下:

    三、建立 jsp 文件

    在WEB-INF文件夹下面,建立 jsp 文件夹,然后在 jsp 文件夹下面创建 welcome.jsp 文件(请删除 WEB-INF 文件下面的 web-xml和index.jsp)如下图所示:


    ok,现在我们来编写 welcome. jsp (终于到写代码的时候了)

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
    
        <title>Welcome</title>
    
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
    
    </head>
    
    <body>
    <div class="jumbotron">
        <h1> ${greeting} </h1>
        <p> ${tagline} </p>
    </div>
    </body>
    </html>
    

    我知道你现在可能对这个jsp代码不太熟悉,先别着急。我们先在controller文件夹下面创建 HomeController,代码如下:

    package com.packt.webstore.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    
    @Controller
    public class HomeController {
    
        @RequestMapping("/")
        public String welcome(Model model) {
            model.addAttribute("greeting", "Welcome to Web Store!");
            model.addAttribute("tagline", "The one and only amazing web store");
    
            return "welcome";
        }
    }
    

    分析:
    在 welcome. jsp 中,我们需要关注的是这两行代码:

    <h1> ${greeting} </h1>
    <p> ${tagline} </p>
    

    其中 greeting 和 tagline 是变量,在浏览器展示 jsp 页面的时候,这两个变量存储的值会以 h1 和 p 的格式展示。
    那么问题来了,这两个变量中的值是从哪里来的呢??我们建立的HomeController 里面的 welcome 方法里面的代码如下:

    model.addAttribute("greeting", "Welcome to Web Store!");
    model.addAttribute("tagline", "The one and only amazing web store");
    

    在这里,我们暂时简单的将 model 当作是一种数据结构model.addAttribute就像map一样,给 key 赋值(key-value)。所以我们现在明白了,${greeting}和${tagline} 取得值就是"Welcome to Web Store!"和"The one and only amazing web store",重点在于前台和后台的变量名一样(也就是greeting 和 tagline)

    四、创建Servlet mapping

    我们现在已经有了前台页面 welcome.jsp和从后台获得的数据,那么现在可以直接运行程序吗?显然是不可以的。因为我们从浏览器中输入的地址:http://localhost:8080 程序不知道怎么处理这个请求,所以我们需要配置Spring MVC 提供的 Dispatcher servlet。

    在 config 文件夹下面建立 WebApplicationContextConfig 和 DispatcherServletInitializer 目录结构如图所示:


    其中 WebApplicationContextConfig 的代码如下:

    package com.packt.webstore.config;
    
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
    import org.springframework.web.servlet.config.annotation.EnableWebMvc;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
    import org.springframework.web.servlet.view.InternalResourceViewResolver;
    import org.springframework.web.servlet.view.JstlView;
    
    @Configuration
    @EnableWebMvc
    @ComponentScan("com.packt.webstore")
    public class WebApplicationContextConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable();
        }
    
        @Bean
        public InternalResourceViewResolver getInternalResourceViewResolver() {
            InternalResourceViewResolver resolver = new InternalResourceViewResolver();
            resolver.setViewClass(JstlView.class);
            resolver.setPrefix("/WEB-INF/jsp/");
            resolver.setSuffix(".jsp");
    
            return resolver;
        }
    }
    

    DispatcherServletInitializer 的代码如下:

    package com.packt.webstore.config;
    
    import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
    
    
    public class DispatcherServletInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    
        @Override
        protected Class<?>[] getRootConfigClasses() {
            return null;
        }
    
        @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[] { WebApplicationContextConfig.class };
        }
    
        @Override
        protected String[] getServletMappings() {
            return new String[] { "/" };
        }
    }
    

    在前面的疑问当中,我们的问题是浏览器发出的 HTTP 请求,不能够被后台所识别,所以才需要配置Spring MVC 提供的 Dispatcher servlet。

    在 DispatcherServletInitializer 中,我们需要拦截浏览器发出的HTTP请求,所以我们需要重写这个方法:

    @Override
        protected String[] getServletMappings() {
            return new String[] { "/" };
        }
    

    这个 "/" 表示拦截到所有的请求。
    现在我们已经将浏览器的请求给拦截到了,然后该怎么办呢?我们得告诉DispatcherServlet到哪里去找静态文件和控制器,这就是我们重写getServletConfigClasses()的原因:

    @Override
        protected Class<?>[] getServletConfigClasses() {
            return new Class[] { WebApplicationContextConfig.class };
        }
    

    它将告诉 DispatcherServlet 在WebApplicationContextConfig.class里面找静态文件,相应的控制器就是我们很早就写了的 HomeController 。

    我知道,你现在也许还是不太清楚各个代码的实现细节,不用怕,我在后面会有相关的介绍。这个阶段只是简单的将整个流程走一遍。

    五、配置Tomcat

    现在我们要将整个工程发布到Tomcat上面,IDEA的Tomcat配置如下图所示:



    然后如下:


    如下:


    选择 Deployment (仔细看下,在Name的下面)


    点击 + 后,选择 Atifact,然后选择 webstore:war exploded,然后点击ok,如下图所示:


    配置好了的界面如下:


    点击上图红色方框中的 绿色 三角形,启动 Tomcat,跳转到浏览器,出现如下界面,则测试成功。

    web 界面

    六、结语

    我知道你现在也许还有很多细节没弄清楚,不用担心,我会在后面的章节,给你娓娓道来。现在你需要弄清楚的是,Spring MVC 的整个运行流程是怎样的。从宏观上面把握。

    Good luck!!

    相关文章

      网友评论

      • android0226:为什么,我有一种配置环境很难的想法

      本文标题:IntelliJ IDEA开发Spring MVC (一)

      本文链接:https://www.haomeiwen.com/subject/plbmxxtx.html