项目场景:
本文仅记录笔者在初次学习SpringMVC中遇到的一些错误及其调试,希望能帮到各位
问题1描述:
经过n次初始化SpringMVC失败后,在网上搜一些资料得知是Tomcat版本不符合,从8.5切换到9后可成功初始化(不要使用10因为Servlet的Jar包改名了,导致了不兼容)
问题2描述:
关于对静态资源的访问,因为大部分的servlet的映射大多数写为/,所以也会将不是.JSP的格式全部拦截,如下图web.xml,而且尽量不要将静态资源放在WEB-INF目录中,这个是安全目录,就是可以让服务端访问,而不能让客户端访问。
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- <context-param>-->
<!-- <param-name>contextConfigLocation</param-name>-->
<!-- <param-value>/WEB-INF/applicationContext.xml</param-value>-->
<!-- </context-param>-->
<!-- <listener>-->
<!-- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>-->
<!-- </listener>-->
<!-- <servlet>-->
<!-- <servlet-name>dispatcher</servlet-name>-->
<!-- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>-->
<!-- <load-on-startup>1</load-on-startup>-->
<!-- </servlet>-->
<!-- <servlet-mapping>-->
<!-- <servlet-name>dispatcher</servlet-name>-->
<!-- <url-pattern>/</url-pattern>-->
<!-- </servlet-mapping>-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
可以如下图xml所示,亦可以像上图调用默认的servlet(要将代码段放在dispatcher前面)
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
dispatcher-servelet.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.2.xsd">
<context:component-scan base-package="controller"/>
<!--对静态资源文件的访问-->
<mvc:resources mapping="/static/**" location="/static/" />
<mvc:annotation-driven/>
<mvc:default-servlet-handler/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- <mvc:interceptors>-->
<!-- <mvc:interceptor>-->
<!-- <mvc:mapping path="User/**"/>-->
<!-- <bean class="controller.springController"></bean>-->
<!-- </mvc:interceptor>-->
<!-- </mvc:interceptors>-->
</beans>
问题3描述:
jsp中的url以及调用一些js静态资源尽量要写成如下形式
<a href="${pageContext.request.contextPath}/toPage/register">
<input type="button" value="注册"class="layui-btn layui-btn-normal">
</a>
<script type="text/javascript" src="${pageContext.request.contextPath}/static/location.js"></script>
问题4描述:
进行页面的直接访问时(即不做任何操作访问)可像下图一样写(如果JSP文件放在WEB-INF文件夹中,不能直接访问JSP,否则会出现404错误)
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/toPage")
public class pageController {
@RequestMapping("/{page}")
public String toPage(@PathVariable String page){
return page;
}
/*
下面的可以访问WEB-INF/Admin里的JSP
*/
@RequestMapping("/Admin/{page}")
public String toAdminPage(@PathVariable String page){
String toUrl="Admin"+"/"+page;
//System.out.println(toUrl);
return toUrl;
}
@RequestMapping("/Borrower/{page}")
public String toBorrowerPage(@PathVariable String page){
String toUrl="Borrower"+"/"+page;
//System.out.println(toUrl);
return toUrl;
}
}
/*
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
访问拼接会将上面的字符串和前缀和后缀进行拼接访问
*/
问题5描述:
当你的代码莫名其妙爆红时,但是仍然可以运行,不要不相信自己的代码。你所应该做的是重新加载Maven项目。
问题6描述:
当你的代码运行不了时,可能是没对jar包进行依赖,或者没把jar包导入WEB-INF里的lib。
点击第一个库,shift点最后一个库,全选后导入。
没有用Maven的小伙伴可以自己导入,先将所需要的jar包放入WEB-INF下的lib包中(没有可以自己创建),然后如下图所示点击添加
选择这个
将所需要的jar包选择点击确定后应用,确定即可。