创建maven项目出现的问题及解决

来源:互联网 发布:过滤蓝光软件 编辑:程序博客网 时间:2024/05/11 04:35

这几天在做毕业设计,需要搭建项目,当第二次碰到的时候又忘记怎么解决的了,看之前的备注以及解决方法才想起来怎么弄,今天想把所出现的问题以及解决方法进行重新整理一下,如果有错误可以一起讨论讨论,哈哈~

  • 创建web项目,没有web.xml导致pom.xml出现web.xml is missing and is set to true的错误
  • jsp页面头部信息错误 The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path
  • maven依赖servlet-api和jsp-api的问题
  • maven中json-lib库无法引入
  • 如何修改maven项目名称
  • 如何修改复制项目的根路径

一、创建web项目,没有web.xml导致pom.xml出现web.xml is missing and is set to true的错误

如果你是这样创建maven项目的:

这里写图片描述

这里写图片描述

这里写图片描述
解决方法是
如果你的maven项目在创建的时候已经是war项目了,那么解决方法是:
这里写图片描述

这里写图片描述

这里写图片描述

二、jsp页面头部信息错误 The superclass “javax.servlet.http.HttpServlet” was not found on the Java Build Path

当创建一个jsp就会出现这个问题,原因是缺少tomcat
解决方法是:
2.1 方法1:

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

2.2方法2:

在pom.xml文件中加入:

<build>    <plugins>        <plugin>            <groupId>org.apache.tomcat.maven</groupId>            <artifactId>tomcat7-maven-plugin</artifactId>            <version>2.2</version>            <configuration>                <port>80</port>                <path>/income</path>            </configuration>        </plugin>    </plugins></build>

三、maven依赖servlet-api和jsp-api的问题

原代码:

    <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.1.0</version>        </dependency>        <dependency>            <groupId>javax.servlet.jsp</groupId>            <artifactId>javax.servlet.jsp-api</artifactId>            <version>2.3.1</version>        </dependency>

导致的错误是:

   Java.lang.ClassCastException:            org.springframework.web.filter.CharacterEncodingFilter cannot be cast to javax.servlet.Filter

原因:

在运行的时候,容器会提供servlet-api和jsp-api这两个jar包,假如没有填写scope作用域,就会导致与tomcat中的servlet-api和jsp-api冲突,所以,这两个要加上scope为provide,使其能够在编译和测试阶段使用(为了能够让jsp编译通过)

解决方法:

<dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.1.0</version>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>javax.servlet.jsp</groupId>            <artifactId>javax.servlet.jsp-api</artifactId>            <version>2.3.1</version>            <scope>provided</scope>        </dependency>

3.1 需要这servelt-api和jsp-api的原因:

 1. 为了能够将jsp能够正确编译 2. jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类);jsp更擅长表现于页面显示,servlet更擅长于逻辑控制;Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到 3.Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
3.2 Servlet的生命 周期:
第一个客户端的请求到达 ServerServer 调用 Servlet 的 init() 方法(可配置为 Server 创建 Servlet 实例时调用,在 web.xml 中 <servlet> 标签下配置 <load-on-startup> 标签,配置的值为整型,值越小 Servlet 的启动优先级越高)一个客户端的请求到达 ServerServer 创建一个请求对象,处理客户端请求Server 创建一个响应对象,响应客户端请求Server 激活 Servlet 的 service() 方法,传递请求和响应对象作为参数service() 方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息service() 方法使用响应对象的方法,将响应传回Server,最终到达客户端。service()方法可能激活其它方法以处理请求,如 doGet() 或 doPost() 或程序员自己开发的新的方法。对于更多的客户端请求,Server 创建新的请求和响应对象,仍然激活此 Servlet 的 service() 方法,将这两个对象作为参数传递给它。如此重复以上的循环,但无需再次调用 init() 方法。一般 Servlet 只初始化一次(只有一个对象),当 Server 不再需要 Servlet 时(一般当 Server 关闭时),Server 调用 Servlet 的 destroy() 方法。

3.3 这里讲解一下scope作用域:

 1. compile(缺省值):compile表示被依赖项目参与当前项目的变异,包括测试,运行周期也参与其中,是一个**比较强的依赖** 2. provided:表示打包的时候可以不用包进去。事实上改以来理论上可以参与编译、测试、运行等周期。相当于compile,但是在打包阶段做了exclude,也就是说再运行的时候不会发布出去   (例如:         对于scope=compile的情况(默认scope),也就是说这个项目在编译,测试,运行阶段都需要这个artifact对应的jar包在classpath中。        而对于scope=provided的情况,则可以认为这个provided是目标容器已经provide这个artifact。换句话说,**它只影响到编译,测试阶段**。        在编译测试阶段,我们需要这个artifact对应的jar包在classpath中,        而在运行阶段,假定目标的容器(比如我们这里的liferay容器)已经提供了这个jar包(例如tomcat已经提供了这个jar包在运行的时候)        ,所以无需我们这个artifact对应的jar包了。        ) 3.  runtime,在**运行和测试**时使用,在编译阶段不使用,如JDBC驱动,适用运行和测试阶段 4.  system:从参与度来说,也provided相同,不过被依赖项不会从maven仓库抓,而是从本地文件系统拿,一定需要配合systemPath属性使用 5.   test,只在**测试**时使用,用于编译和运行测试代码。不会随项目发布。 

四、maven中json-lib库无法引入

一开始是这样写的:

这里写图片描述

错误是:
这里写图片描述

解决方法及原因:

官网上面有两个文档:
这里写图片描述
所以是因为json-lib库有两个jdk版本的实现,json-lib-2.1-jdk13.jar和json-lib-2.1-jdk15.jar,需要加上描述符即可

        <dependency>            <groupId>net.sf.json-lib</groupId>            <artifactId>json-lib</artifactId>            <version>2.4</version>            <classifier>jdk15</classifier>        </dependency>

五、如何修改maven项目名称

需要两步骤:
修改
这里写图片描述

这里写图片描述

六、如何修改复制项目的根路径

这里写图片描述
这里写图片描述

0 0
原创粉丝点击