zoukankan      html  css  js  c++  java
  • Intellij Idea通过Maven创建Spring MVC项目以及出错的解决办法[图]

    尝试使用eclipse创建dynamic web的方式去创建一个spring mvc项目以失败结束。

    主要原因:eclipse在国内安装spring tool插件非常慢,花了两个小时,还安装失败。

     序曲:2020年2月21日整晚通宵至2020年2月22日早上六点,然后22日晚上又花了5个小时,终于解决这个烦人的问题。

    注意事项:tomcat与spring与jdk的各种版本匹配问题。自行百度。

    OS:Windows 10 1809

    Idea:2019.3.3

    JDK:1.8_221

    Tomcat:9.0.031

    MAVEN:3.6.3

    Spring:5.2.0(详见pom.xml配置文件)

    于是改用idea.

    1. Idea新建maven项目。前提,java和maven已在电脑上安装并配置好。

    2.在src/main/java新建一个包com.qa和一个文件夹resource.

    3.右键->maek directory as,com.qa为sources root, resource文件夹为resources root.注意source和resource是不一样的。

    4.Idea->Setting->Build,Execution,Deployment->Build Tool->Maven->Import

    5. pom.xml配置文件内容。以下是经过测试正确的。

    <?xml version="1.0" encoding="UTF-8"?>
    
    <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/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>org.example</groupId>
      <artifactId>SpringMVC20</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>SpringMVC20 Maven Webapp</name>
      <!-- FIXME change it to the project's website -->
      <url>http://www.example.com</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.7</maven.compiler.source>
        <maven.compiler.target>1.7</maven.compiler.target>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>javax.servlet-api</artifactId>
          <version>4.0.1</version>
          <scope>provided</scope>
        </dependency>
    
        <dependency>
          <groupId>javax.servlet.jsp</groupId>
          <artifactId>javax.servlet.jsp-api</artifactId>
          <version>2.3.3</version>
          <scope>provided</scope>
        </dependency>
    
        <dependency>
          <groupId>javax.servlet</groupId>
          <artifactId>jstl</artifactId>
          <version>1.2</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-context</artifactId>
          <version>5.2.0.RELEASE</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-core</artifactId>
          <version>5.2.0.RELEASE</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-beans</artifactId>
          <version>5.2.0.RELEASE</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-aop</artifactId>
          <version>5.2.0.RELEASE</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring</artifactId>
          <version>5.2.0.RELEASE</version>
          <type>pom</type>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-expression</artifactId>
          <version>5.2.0.RELEASE</version>
        </dependency>
    
        <dependency>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
          <version>1.2</version>
        </dependency>
    
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.12</version>
          <scope>test</scope>
        </dependency>
    
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-web</artifactId>
          <version>5.2.0.RELEASE</version>
        </dependency>
    
        <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-webmvc</artifactId>
          <version>5.2.0.RELEASE</version>
        </dependency>
      </dependencies>
    
      <build>
        <finalName>SpringMVC20</finalName>
        <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
          <plugins>
            <plugin>
              <artifactId>maven-clean-plugin</artifactId>
              <version>3.1.0</version>
            </plugin>
            <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
            <plugin>
              <artifactId>maven-resources-plugin</artifactId>
              <version>3.0.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.8.0</version>
            </plugin>
            <plugin>
              <artifactId>maven-surefire-plugin</artifactId>
              <version>2.22.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-war-plugin</artifactId>
              <version>3.2.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-install-plugin</artifactId>
              <version>2.5.2</version>
            </plugin>
            <plugin>
              <artifactId>maven-deploy-plugin</artifactId>
              <version>2.8.2</version>
            </plugin>
    
            <plugin>
              <groupId>org.apache.tomcat.maven</groupId>
              <artifactId>tomcat7-maven-plugin</artifactId>
              <version>2.2</version>
              <configuration>
                <port>8080</port>
                <path>/</path>
                <uriEncoding>utf-8</uriEncoding>
              </configuration>
            </plugin>
          </plugins>
        </pluginManagement>
      </build>
    </project>

    6.spring.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:context="http://www.springframework.org/schema/context"
           xmlns:mvc="http://www.springframework.org/schema/mvc"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans.xsd
           http://www.springframework.org/schema/context
           https://www.springframework.org/schema/context/spring-context.xsd
           http://www.springframework.org/schema/mvc
           https://www.springframework.org/schema/mvc/spring-mvc.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop.xsd">
    
    
        <context:annotation-config/>
        <context:component-scan base-package="com.qa">
            <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
        <mvc:annotation-driven/>
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
            <property name="prefix" value="/"/>
            <property name="suffix" value=".jsp"/>
        </bean>
    
    </beans>

    7.改写web.xml

    <!DOCTYPE web-app PUBLIC
     "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
     "http://java.sun.com/dtd/web-app_2_3.dtd" >
    
    <web-app>
      <display-name>Archetype Created Web Application</display-name>
    
      <servlet>
        <servlet-name>mvc-dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>/WEB-INF/spring.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
      </servlet>
      <servlet-mapping>
        <servlet-name>mvc-dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
      </servlet-mapping>
    </web-app>

    8.hello.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <h1>不错,来了!</h1>
    <h1>This is hello_jsp</h1>
    </body>
    </html>

    9.index.jsp

    <html>
    <body>
    <h1>Hello Spring of 2020.Feb.22</h1>
    <h2>Hello World!</h2>
    <a href="hello">go to hello</a>
    </body>
    </html>

    10.Hello.java

    package com.qa;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    //import org.springframework.web.bind.annotation.RequestMethod;
    
    //import javax.servlet.http.HttpServletRequest;
    
    @Controller
    
    public class Hello {
    //    @RequestMapping(value = "/index", method = RequestMethod.GET)
        @RequestMapping("/hello")
        public String index() {
            System.out.println("==========================");
            System.out.println("HELLO JAVA");
            return "hello";
        }
    }

    11.整体目录结构

    12.Idea配置tomcat.

    如果打开没有Tomcat Server,就点击上面的“+”号,然后选择local。

    13.当出现下面的java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config错误,这是因为我的pom.xml文件里面没有正确引入jstl包

    Type Exception Report
    
    Message Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
    
    Description The server encountered an unexpected condition that prevented it from fulfilling the request.
    
    Exception
    org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
    	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063)
    	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    
    
    Root Cause
    java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config
    	org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:103)
    	org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:137)
    	org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:145)
    	org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:317)
    	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373)
    	org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118)
    	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057)
    	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    
    
    Root Cause
    java.lang.ClassNotFoundException: javax.servlet.jsp.jstl.core.Config
    	org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365)
    	org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188)
    	org.springframework.web.servlet.support.JstlUtils.exposeLocalizationContext(JstlUtils.java:103)
    	org.springframework.web.servlet.view.JstlView.exposeHelpers(JstlView.java:137)
    	org.springframework.web.servlet.view.InternalResourceView.renderMergedOutputModel(InternalResourceView.java:145)
    	org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:317)
    	org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1373)
    	org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1118)
    	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1057)
    	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
    	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
    	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
    	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    
    
    Note The full stack trace of the root cause is available in the server logs.

    14.这是maven的pom.xml错误的包

    15.这是正确的jstl包

    16.运行结果正确。

    17.如何运行

    参考:

    https://blog.csdn.net/yangshuaionline/article/details/90379763

    这个帖子给了我很大帮助。

    后记:

    2020年2月22日晚11点 农历2020年正月二九 上海 晴但很冷,气温大概13摄氏度。

  • 相关阅读:
    Nginx配置,请求到tomcat中
    读取远程数据库的视图(包括如何连接其他的数据库)
    slf4j日志的使用-学习笔记
    Freemarker生成word文档的时的一些&,>,<报错
    freemarker的replace的使用
    防止表单重复的常用几种方式
    两种表复制语句(SQL)
    总结:如何判断一个对象是否可被回收
    24种设计模式优缺点及适用场景#抽象工厂模式
    24种设计模式优缺点及适用场景#工厂方法模式
  • 原文地址:https://www.cnblogs.com/majestyking/p/12348100.html
Copyright © 2011-2022 走看看