Java 21:Spring 4(Intelij IDEA下的SpringMVC环境搭建)

本文详细记录了在Intelij IDEA中搭建SpringMVC环境的过程,包括遇到的问题及解决方案,如ContextLoaderListener类找不到、JSTL库的引入问题等。通过这些步骤,成功建立了包含控制器、模型、视图的MVC基础架构。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近又开始学习Java Web,其实之前已经实习做过几个月相关工作,当时用的是SSH进行了几个月ERP软件的开发,感觉最难的还是前期学的时候,各种不知道怎么搭建环境,书上的、网上的代码也基本不能直接跑通,当时自己搭SSH花了一周多,最后的原因居然是有个Spring的包漏掉了(我是把下载的Spring资料里lib所有的JAR放进去,结果没想到还有一些JAR不在lib里,在其他目录里,很郁闷)

然后最近买了本《Spring实战》,看起来不错,但是照着敲代码又让我郁闷了,按着上面的纯Java注解的方式敲出来没反应(书上代码居然还有个别拼写错误)。。。也没报错,看网上也有一些人是同样的问题,都是这本书,也没个解法,瞬间对这本书失去了信心,还是回归大众化的XML配置方式了。

然后干脆直接从Eclipse换到Intelij IDEA了,感觉后面应该用得更多。


IDEA要比Eclipse智能很多,也更让人眼花缭乱,虽然智能,但是直接建的工程也没能直接跑成功。。。。

建立一个工程,选择Spring MVC



发现确实智能,web.xml和分发器和spring上下文的xml都帮我们建好了,web.xml内容都填好了

这里需要改一下web.xml的内容,

<servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>	//这个地方改成/,默认接收一切请求
    </servlet-mapping>
其他不用改,在有index.jsp的情况下直接在Tomcat下运行即可

然后运行我就遇到了错误,它说找不到Spring的什么ContextLoaderListener的Class,你不是创项目的时候都帮我下载好了么,现在报什么错?!

搞了一整天才发现这么改:File——Project Structure——Artifact里

看到中间部分一左一右分别是<output root>和Springmvc6,然后左边的这部分WEB-INF的lib里面是没有东西的,但我们项目路径下也确实有所有的Spring的lib,

这时候我已经修改完了,再我没改的时候,最下面会报一个错,并有fix的可以按,意思就是在XXX里面找不到Spring的lib,是否从项目导入一下,fix一下,然后fix了两次,那个提示消失了。我们的左边<output root>下的lib里也多了两个Spring的库,这时候,Apply——OK——运行,就可以进入index.jsp,也没有报错了


在WEB-INF下建文件夹叫jsp,里面创建一个hello.jsp,内容如下

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>${msg}</title>
</head>
<body>
<h1>${msg}</h1>
<span>${name}</span>
</body>
</html>
在src下面建立包叫controller,里面放一个HelloController的Java类,代码如下:

@Controller
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public class HelloController {

    @RequestMapping(value = "/hello", method = RequestMethod.GET)
    public String hello(ModelMap model) {
        model.addAttribute("msg", "Spring MVC Hello World");
        model.addAttribute("name", "yuntao");
        return "hello";
    }

}
这个代码对于model的操作就是对应jsp里的msg和name,如果一点都不懂标签,可以吧JSP里的两个换成普通字符串,Java里hello除了return “hello”啥都不干,这里稍微解释一下吧,虽然我也没深入研究

@Controller说明自己是控制器,第一个RequestMapping说明整个类处理/hello的消息,加上下面hello方法前面的RequestMapping,说明处理url为/hello下的/hello,大家可能知道,我什么都不干的情况下,打开Tomcat默认的界面跳到localhost:8080,有index.jsp会进入index。加上这两个RequestMapping,也就是说我们的HelloController类的hello方法是专门处理localhost:8080/hello/hello这个请求的,然后返回了hello,意思就是返回hello.jsp给用户

当然这里为了1、能够使用@的注解,2、能够让代码去扫描我们这个类,3、能够知道返回的是jsp,4、能够知道处理的url格式。。。。。都是需要在xml里有相关配置的,你可以自己找找对应关系


在web.xml我们已经有了以下代码(因为是Intelij自动生成的,所以我这里不全贴出来,只捡一部分说)

<servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
默认会去找dispather-servlet.xml的配置文件,该文件IDEA早已帮我们建立好了,但是没有具体代码,下面是具体添加的,这个xml的名称和上面的servlet-name对应,不能随便改的:

dispather-servlet.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.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    <context:component-scan base-package="controller"/>          <!-- 对应HelloController所在的包名 -->
   

    <!-- 静态资源(js、image等)的访问 -->
    <mvc:default-servlet-handler/>

    <!-- 开启注解 -->
    <mvc:annotation-driven/>    

    <!--ViewResolver 视图解析器-->
    <!--用于支持Servlet、JSP视图解析-->
    <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/WEB-INF/jsp/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
</beans>


applicationContext.xml作为Spring的上下文,我们先不管,直接运行,这时候如果有index.jsp会进入,前提是xml没有语法错误,Tomcat也能正常运行。

但是我们把url改成localhost:8080/hello/hello就报错了,因为我们上面的Java里使用了model,jsp里使用了${name},这个需要jstl标签库支持,我直接将jstl的JAR拷贝到项目文件夹下的lib里,IDEA里立刻就能识别到,但是奇怪的是,这是JSTL库前面是没有+加号的,运行也还是同样的错误(下面已经解决了, 有了+)


File——Project Structure——Libraries——选添加。在文件夹中选中jstl,添加,然后发现jstl左边也有了+,才算真正引用进来了


然后在运行,就可以正常打开hello.jsp了



有了jsp(view),有了model(model模型),HelloController(控制器),基本的MVC也就搭建好了


—————————————————————————————————————————————————


最近换了mac,又在mac搭建同样的环境,结果又报类似的错,我就不知道这算IDEA还是Tomcat的锅。这次的错和前面的不同,而且mac下和windows下界面也有不同,所以也是鼓捣了一个小时,才搞完。

报的错:Error during artifact deployment,中间还有个错是tomcat下duplicate context path /,也不知道是啥问题,我也没干啥呀。还以为遇到什么新错误


然后看输出文件是看不出啥了,不过他下面提醒你去看tomcat的日志文件:一看就在输出旁边,还挺好的


然后这边的错就很直观了,说找不到ContextLoaderListener,但这个类lib是有了,就是tomcat没有识别,鼓捣了半天,在file——Project Structure里,下面图里的右下方,选择fix,把所有missing的都fix上,然后就成功打开了


这时候直接打开8080是可以进去index.jsp的,但是一到前面的hello.jsp,又报了jstl错误,只能在手动下载jstl,上面一张图的Libraries里导入。。。。终于,又成功了!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值