第⼀个SpringMVC程序以及出现404问题的解决
害!弄了整整⼀天,这个SpringMVC 的helloWorld程序终于能跑起来了,遇到了头疼的404问题始终⽆法解决,⾮常的蛋疼,代码也没有错误就是运⾏不起来!
现在我已解决这个问题,顺便做个记录
⾸先搭建好项⽬环境,创建maven⼯程,引⼊依赖
这样建⽴web⼯程可以保证l的版本为最新,不会导致版本过低⽽出现404的问题。
我出现的主要问题在于依赖有问题,换个依赖就好了,总的来说这个问题也相当隐蔽了,还好解决了!依赖⽤下⾯这些!
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
总结下程序的写⼊步骤,有两个版本,⽹上⼤都是直接上注解版,那我就先从配置版⼊⼿吧:
配置版
⼀. 确定导⼊了SpringMVC的依赖后,配置l
1. 先引⼊命名空间
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="/xml/ns/javaee"
xsi="/2001/XMLSchema-instance"
schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
</web-app>
2. 注册DispatcherServlet,并关联SpringMVC的配置⽂件
DispatcherServlet表⽰前置控制器,是整个SpringMVC的控制中⼼,⽤来接收或拦截⽤户发起的请求
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--关联SpringMVC的配置⽂件,l是⼀会要写的配置⽂件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
<!--设置启动级别为1-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp)-->
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
⼆.编写SpringMVC的配置⽂件
配置⽂件名字可以随便起,但是官⽅要求我们最好是⽤ 【servlet-name】-l 来给配置⽂件起名字,例如我起的名字叫l,这名字也要和上⾯在l中写过的的param-value对应!
1. 引⼊命名空间
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"
xsi="/2001/XMLSchema-instance"
schemaLocation="/schema/beans
/schema/beans/spring-beans.xsd">
</beans>
2. 添加处理映射器,处理适配器,视图解析器
试题解析器中要把所有视图都存放在WEB-INF⽬录中,这个⽬录客户端不能直接访问,进⽽保证视图安全<!--    添加处理映射器-->
<beans>
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--    添加处理适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--    添加视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"id="internalResourceViewResolver"> <!--        设置前缀-->
<property name="prefix"value="/WEB-INF/jsp/"/>
<!--        设置后缀-->
<property name="suffix"value=".jsp"/>
</bean>
</beans>
处理器映射器,处理器适配器,视图解析器可以称之为SpringMVC三⼤件!
三.编写操作业务controller
⼀种是使⽤注解,另⼀种是使⽤实现controller接⼝的⽅法,这⾥我们使⽤实现controller接⼝的⽅法,
更有助于我们理解SpringMVC的执⾏过程
public class HelloController implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse)throws Exception { //      创建⼀个模型和视图
ModelAndView modelAndView =new ModelAndView();
//        封装对象,放在ModelAndView中
modelAndView.addObject("msg","HelloSpringMVC");
//        封装要跳转的视图,放在ModelAndView中
modelAndView.setViewName("hello");//: /WEB-INF/jsp/hello.jsp
return modelAndView;
}
}
将⾃⼰写的业务类交给SpringIOC进⾏管理,在l中注册bean
<bean id="/hello"class="ller.HelloController"/>
四.编写要跳转的jsp页⾯,显⽰ModelAndView存放的对象
<%@ page contentType="text/html;charset=UTF-8" language="java" %>spring ioc注解
<html>
<head>
<title>Hello~~~</title>
</head>
<body>
${msg}
</body>
</html>
五.可能遇到的问题:访问出现404,排查步骤:
1. 查看控制台输出,看⼀下是不是缺少了什么jar包。
2. 如果jar包存在,显⽰⽆法输出,就在IDEA的项⽬发布中,添加lib依赖!
将之前导⼊的dependencies依赖全部复制到lib⽬录下
4. 重启Tomcat 即可解决!
注解版
写过配置版才能更加深刻的理解注解版,如果还不理解,那就写⼗遍,没有笨⼈,只有懒⼈!
⼀.由于maven可能出现资源过滤问题,在pom⽂件中完善配置
<build>
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
</properties>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
⼆.确定导⼊SpringMVC的依赖后配置l,注册DispatcherServlet(和配置版相同) <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="/xml/ns/javaee"
xsi="/2001/XMLSchema-instance"
schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--注册⼀个DispatcherServlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--        关联⼀个SpringMVC的配置⽂件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>l</param-value>
</init-param>
<!--        启动级别为1-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<!--/ 匹配所有的请求;(不包括.jsp)-->
<!--/* 匹配所有的请求;(包括.jsp) -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
三.编写SpringMVC的配置⽂件
让IOC的注解⽣效
静态资源过滤 :HTML . JS . CSS . 图⽚ , 视频 …
MVC的注解驱动
配置视图解析器
1. 引⼊命名空间
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="/schema/beans"mvc="/schema/mvc"
context="/schema/context"
xsi="/2001/XMLSchema-instance"
schemaLocation=" /schema/beans
/schema/beans/spring-beans.xsd
/schema/mvc
/schema/mvc/spring-mvc.xsd
/schema/context
/schema/context/spring-context.xsd">
</beans>
2. 设置⾃动扫描包,让包下的注解⽣效,由ioc容器统⼀管理
<component-scan base-package="ller"/>
3. 让Spring MVC不处理静态资源
<default-servlet-handler />
4. 配置⽀持MVC注解驱动
<annotation-driven />
annotation-driven的作⽤:⽤来⽀持mvc注解驱动 。
在spring中我们采⽤@RequestMapping注解来完成映射关系 ,要想使@RequestMapping注解⽣效, 必须向上下⽂中注册处理映射
器(DefaultAnnotationHandlerMapping )和处理适配器(AnnotationMethodHandlerAdapter), ⽽annotation-driven配置帮助我们⾃动完成处理映射器和处理适配器两个实例的注⼊。
5. 配置视图解析器
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver "id="internalResourceViewResolver"> <!-- 前缀 -->
<property name="prefix"value="/WEB-INF/jsp/"/>
<!-- 后缀 -->
<property name="suffix"value=".jsp"/>
</bean>
通常处理器映射器和处理器适配器不需要我们配置,它们两个已经被注解驱动替代,⽽我们只需要⼿动开启视图解析器即可
四.编写操作业务controller
有了注解,编写操作业务就变得简单多了
@RequestMapping:该注解可以写在类上也可以写在⽅法上,如果想要多级路径就可以在类上写⼀个,在⽅法上写⼀个。
@Controller//为了让Spring IOC容器初始化时⾃动扫描
@RequestMapping("/HelloController")//为了映射请求路径,这⾥因为类与⽅法上都有映射所以访问时应该是/HelloController/hello;
public class HelloController {
@RequestMapping("/hello")//此时真实访问地址为 : 项⽬名/HelloController/hello
public String sayHello(Model model){//向模型中添加属性msg与值,可以在JSP页⾯中取出并渲染
model.addAttribute("msg","hello,SpringMVC");//web-inf/jsp/hello.jsp
return"hello";//会被视图解析器处理,返回的字符串就是视图的名字
}
}
五.编写视图层

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。