配置一个SpringMVC项目(xml配置文件的方式) —— 具体步骤:
首先是pom.xml配置文件:
4.0.0
com.zhoulz
springmvc_helloworld
1.0-SNAPSHOT
org.springframework
spring-context
5.2.3.RELEASE
org.springframework
spring-web
5.2.3.RELEASE
org.springframework
spring-webmvc
5.2.3.RELEASE
接着,在web下WEB-INF下的 web.xml配置文件 中配置servlet:
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
springmvc
/
然后,现在controller下创建一个类: HelloController——结合下面的springmvc.xml配置文件看
package com.zhoulz.controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloController implements Controller {
/*public void hello(){
System.out.println(this.getClass().getName()+"------");
}*/
//实现Controller接口后,会默认调用如下的处理方法(上面的hello()方法就不用了),进行处理
/*public ModelAndView handleRequest(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse) throws Exception {
//调用该方法后,上面的servlet会报错,是因为缺jar包:tomcat下lib下的两个jar包:jsp-api.jar、servlet.api.jar
return null;
}*/
//进行了一定的简化:
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
//注意:返回值是ModelAndView
//加一句话,用来表明进到这个方法里面了
System.out.println(this.getClass().getName()+"-----------");
//1、创建对象
//所以要创建一个ModelAndView对象:
ModelAndView mv = new ModelAndView();
//2、添加视图名称,即要跳转的页面的名称
//设置跳转页面的名称
mv.setViewName("hello");
//3、向前端页面添加的属性值
//然后,再往里面写一些属性值
mv.addObject("hello","hello,springmvc");
//然后把这个对象值返还回去
//return null;
return mv;
}
}
然后,对应web.xml配置文件,在resources下创建一个springmvc.xml配置文件:
然后,我们可以在web下WEB-INF下创建一个(Directory)目录:page,然后再page下创建一个hello.jsp文件:
<%--
Created by IntelliJ IDEA.
User: dicfin
Date: 2022/11/10
Time: 15:56
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
欢迎加入xiaozhou
${hello} <%--把刚才写的hello拿过来--%>
现在,能找到对应页面的请求吗?
启动一下项目看看: (记得添加Tomcat配置,具体见上篇文章)
发请求的话,能跳转到页面吗?
发什么请求?—— 此时的请求不能随便写了。
注意,在配置springmvc.xml配置文件的时候,我们配了一个 helloController(即对应controller下的HelloController 类),然后我们找一下它返回对应的结果值是啥。
项目启动后,会自动跳转浏览器:
然后,我们就可以发请求了,发一个 hello :(即,在网页地址后面输入:hello)
发现,出错了:
错误如下:
javax.servlet.ServletException: 实例化Servlet类[org.springframework.web.servlet.DispatcherServlet]异常
以及
java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
即:找不到当前这个类了。
这是我们在使用IDEA时需要严格注意的一个问题:
我们最终生成的目录是 Artifacts,点开WEB-INF,发现没有我们所需要的类:
怎么办?解决如下:
Artifacts下,选中WEB-INF,右击 Create Directory ,创建 lib 目录,然后选中lib,右击:
然后,将下面的全部导进来:
完成以上操作后,重新启动项目,发出请求:
同样,发一个 hello请求,发现,没有效果,又报错了:
其中,404表示找不到对应的资源文件,即找不到我们对应的请求。
是没有配置请求吗?
:其实我们是配置了请求的,就在springmvc.xml配置文件下,配了一个bean:
在默认情况下,所对应的bean就是我们要发送请求的名称。
这里,我们将上面的id名改为: /hello —— / 不能少
重新运行,重新发请求 hello,发现,继续报错:
(500 —— 是服务器内部错误)
但是,运行结果中,我们用来验证的一句话 —— 打印了。
分析:
500 —— 是服务器内部错误
而且,上面的错误:
Circular view path [hello]: would dispatch back to the current handler URL [/springmvc_helloworld_war_exploded/hello] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.
其实这个错误表示的意思非常简单,即:
我们最终是要返回到一个页面(即hello页面,因为前面设置的:mv.setViewName("hello");)里去的,但是当前这个hello页面,我们找不到当前这个路径了。
怎么办?:需要我们在springmvc.xml配置文件中,再配置一个额外的组件:
然后重新运行,重新发请求 hello,结果如下:
运行正常。
上面是xml配置文件的方式,十分麻烦,后面多为注解的方式。