搭建SpringMvc注意事项

  1. 启动项目访问浏览器报错
    在这里插入图片描述

后台报错

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [SpringMvc.xml]; nested exception is java.io.FileNotFoundException: class path resource [SpringMvc.xml] cannot be opened because it does not exist

将web.xml中

<param-value>classpath:SpringMvc.xml</param-value>

改为

<param-value>classpath*:SpringMvc.xml</param-value>

为什么修改下面有讲解,改错误为找不到SpringMvc.xml文件

改完继续报错
在这里插入图片描述
最后检查一通是project Structure 中的Artifacts中的war包有问题,重新加载了一个war包
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------

此时web.xml中的 <param-value>classpath :SpringMvc.xml</param-value>
但是继续访问请求如图
在这里插入图片描述

后台报错:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [SpringMvc.xml]; nested exception is java.io.FileNotFoundException: class path resource [SpringMvc.xml] cannot be opened because it does not exist

原因,多模块中,我的项目为<packaging>pom</packaging>,在pom下打包resourse下资源不会进入target中
解决办法:
1.将pom修改成jar/war后打包(使用maven工具先将target 清除掉 maven clean 如何 package一下就ok),后面可以在改把<packaging>pom</packaging>改回来
2.
在这里插入图片描述
将Output path修改到resourses目录下

如果1此时web.xml中的 <param-value>classpath* :SpringMvc.xml</param-value>
访问请求如图
在这里插入图片描述
后台不报错 后台不报错的原因为

    classpath: 到你的class路径中查找文件,在target中找
  classpath*:不仅包含class的路径,还包括jar文件中(class路径)进行查找

解决办法和上面一样

  1. 报错java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet

    这类问题归结于下面:Intellij idea使用Maven搭建web项目启动报找不到类,而maven的pom.xml都已引用,问题就是在于没在WEB-INF下新建lib文件夹
    解决办法:
    在这里插入图片描述
    在IDEA中点击File > Project Structure > Artifacts > 在右侧Output Layout右击项目名,选择Put into Output Root,执行后,在WEB-INF在增加了lib目录,里面是项目引用的jar包,点击OK。​
    在这里插入图片描述
    重新启动tomcat就行了。

  2. 在web.xml中设置分发器

 <servlet>
        <servlet-name>springMvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:SpringMvc.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMvc</servlet-name>
            <url-pattern>/</url-pattern>
    </servlet-mapping>

对于<url-pattern>/</url-pattern>
方式一:带后缀,比如*.action *.do .aaa
该种方式比较精确、方便,在以前和现在企业中都有很大的使用比例 方式二:/ 不会拦截 .jsp,但是会拦截.html等静态资源(静态资源:除了 servlet和jsp之外的js、css、png等)
为什么配置为/ 会拦截静态资源???
因为tomcat容器中有一个web.xml(父),你的项目中也有一个web.xml(子),是一个继承关系
父web.xml中有一个DefaultServlet, url-pattern 是一个 /
此时我们自己的web.xml中也配置了一个 / ,覆写了父web.xml的配置
为什么不拦截.jsp呢?
因为父web.xml中有一个JspServlet,这个servlet拦截.jsp文件,而我们并没有覆写这个配置,
所以springmvc此时不拦截jsp,jsp的处理交给了tomcat
如何解决/拦截静态资源这件事? 方式三:/
拦截所有,包括.jsp

这里的/必须为/ ,为/*会页面访问不了

如果为/* 启动服务器(注意)
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值