IDEA+SpringMVC+Mybatis配置详细图文&报错&知识点(一)

执行环境:IDEA学生版,Tomcat7.0.94,jdk_1.8.0_144

一、SpringMVC

参考链接:https://blog.csdn.net/weixin_42222334/article/details/80362126

备注:SpringMVC的配置过程大部分与这个博主的一致,添加了一些报错和知识点(留待自己以后参考使用)。

          不知道是版本问题还是其他,没有SpringMVC选项,且不打算用SpringBoot,新建的是Maven项目,所有的目录和文件都是手动加的。

 

1.新建Maven-webapp项目

操作:File->New->Project->Maven->org.apache.maven.archetypes:maven-archetype-webapp

填写项目名,选择项目存储位置。

不用管,继续Next就行。

最终目录:

 

2.搭建MVC目录结构

a.按照如图所示目录结构新建文件夹及文件。

操作:右键->New->File/Directory(java的蓝图标和resources的小黄杠等见步骤b)

b.标记文件夹。

操作:File->Project Structure->Modules->Mark as...(选中下面的对应文件夹,点击上面mark图标标记为资源、测试、导出等,target不用,此时还没有)

 

3.配置文件

下面就是把那些空的xml配置文件都填写上去。

(1)pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--suppress ALL -->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.example</groupId>
	<artifactId>Demo</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>Demo</name>

	<properties>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<!--junit单元测试-->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>

		<!--日志-->
		<dependency>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-log4j12</artifactId>
			<version>1.7.10</version>
		</dependency>

		<!--J2EE-->
<!--我这里是因为tomcat里面有servlet-api.jar和jsp-api.jar,就不再新加这两个依赖,否则会报错-->
<!--		<dependency>-->
<!--			<groupId>javax.servlet</groupId>-->
<!--			<artifactId>javax.servlet-api</artifactId>-->
<!--			<version>3.1.0</version>-->
<!--		</dependency>-->
<!--		<dependency>-->
<!--			<groupId>javax.servlet.jsp</groupId>-->
<!--			<artifactId>jsp-api</artifactId>-->
<!--			<version>2.2</version>-->
<!--		</dependency>-->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!--mybatis相关的包-->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.2.6</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.3</version>
		</dependency>

		<!--mysql驱动包-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<!--<version>5.1.35</version>--><!--过低的版本会导致报错数据库连接不上-->
			<version>8.0.11</version>
		</dependency>

		<!--springframework-->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.2.6.RELEASE</version><!--或者${spring.version}这种格式-->
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.2.6.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.2.6.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.2.6.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.2.6.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>com.github.stefanbirkner</groupId>
			<artifactId>system-rules</artifactId>
			<version>1.16.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.9</version>
		</dependency>

		<!--其他需要的包-->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.4</version>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
	</dependencies>

	<!--配置打包文件,有需要的可以参考这个格式写-->
<!--	<build>-->
<!--		<resources>-->
<!--			&lt;!&ndash;<resource>-->
<!--				<directory>src/main/java/com/example/dao/mapper</directory>-->
<!--				<includes>-->
<!--					<include>**/*.xml</include>-->
<!--				</includes>&lt;!&ndash;excludes标签是不包括xx目录&ndash;&gt;-->
<!--				<targetPath>com/example/dao/mapper</targetPath>&lt;!&ndash;打包默认的根目录是/Demo/target/classes/&ndash;&gt;-->
<!--			</resource>&ndash;&gt;-->
<!--			<resource>-->
<!--				<directory>src/main/resources</directory>-->
<!--				<includes>-->
<!--					<include>**/*</include>-->
<!--				</includes>-->
<!--			</resource>-->
<!--			<resource>-->
<!--				<directory>src/main/webapp/WEB-INF</directory>-->
<!--				<includes>-->
<!--					<include>**/*.xml</include>-->
<!--				</includes>&lt;!&ndash;excludes标签是不包括xx目录&ndash;&gt;-->
<!--			</resource>-->
<!--		</resources>-->

<!--	</build>-->

</project>

a.pom.xml生效。

操作:左边目录pom.xml选中->右键->Maven->Reload Project (或者Ctrl+Shift+O

可以看到External Libraries里面多了相关的包

b.pom.xml相关报错

1.报错:pom.xml的xmls部分添加依赖uri飘红报错 URI is not registered.

   解决:a.点击File->Settings->Schemas and DTDs,点击下方"+"号,添加该uri即可。 

              b.鼠标点击红色字,出现小红灯,选择Fetch external resource即可。

2.报错:org.apache.jasper.JasperException: java.lang.NullPointerException

   解决:这种都可能是包冲突,maven里面pom.xml生效时自动下载的servlet-api.jar或jsp-api.jar与tomcat自带的jar包冲突,删除maven依赖的相关包即可。

3.报错:mybatis Could not get JDBC Connection 或 nested exception is java.sql.SQLException: Unknown system variable 'query_cache_size'

   解决:mysql-connector驱动版本还是过低,pom.xml里对应项版本改为8.0.11,pom.xml重新生效。

(2)web.xml

web.xml主要配置前端相关,比如默认打开页、DispatcherServlet前端总控等,该文件内部根目录为/webapp/。

<?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_3_1.xsd"
         version="3.1">

    <display-name>Archetype Created Web Application</display-name>
    <!--welcome pages-->
    <welcome-file-list>
        <welcome-file>/views/index.jsp</welcome-file><!--默认打开页-->
    </welcome-file-list>

    <!--配置springmvc DispatcherServlet-->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- init-param 前端控制器的初始化参数-->
        <init-param>
            <!--配置dispatcher.xml作为mvc的配置文件-->
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
        </init-param>
        <!--load-on-startup指定了前端控制器在服务器启动时就创建,
          它的参数越小,代表创建的优先级越高 -->
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <!--一个servlet对应一个servlet-mapping-->
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <!--
        这里指定url拦截范围
        /*:范围更大,会拦截所有请求,包括jsp文件,所以不能保证jsp页面访问正常,可能会出现404
        / : 也是拦截所有请求,但是不会拦截*.jsp,也就是不会拦截jsp文件,可以保证页面访问正常
        -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--配置applicationContext.xml-->
    <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>

</web-app>

(3)dispatcher-servlet.xml

这个文件负责整个MVC的配置,映射解析、注解驱动、ViewResolver及渲染页面前端根目录等。

<?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">
    <!--此文件负责整个mvc中的配置-->

    <!--启用spring的一些annotation注释 -->
    <context:annotation-config/>

    <!-- 配置注解驱动 可以将request参数与绑定到controller参数上,即@mapping映射 -->
    <mvc:annotation-driven/>

    <!--静态资源映射-->
    <!--本项目把静态资源放在了webapp的statics目录下,资源映射如下-->
    <mvc:resources mapping="/css/**" location="/statics/css/"/>
    <mvc:resources mapping="/js/**" location="/statics/js/"/>
    <mvc:resources mapping="/image/**" location="/statics/images/"/>
    <mvc:default-servlet-handler />
    <!--这句要加上,要不然可能会访问不到静态资源,
    这个标签相当于在dispatcherServlet处理链上串联了一个java:org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler
    静态资源处理类,每次请求过来,先经过该类判断是不是静态文件,是则自行处理,不是则交由DispatcherServlet控制器处理-->

    <!-- ViewResolver视图解析器,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了),这里设置使用的是JSP-->
    <!-- 默认的视图解析器 在上边的解析错误时使用 (默认使用html)- -->
    <bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/views/"/><!--设置JSP文件的目录位置,controller里面的url访问的根目录   prefix前缀-->
        <property name="suffix" value=".jsp"/><!--suffix后缀-->
        <property name="exposeContextBeansAsAttributes" value="true"/><!--默认会话所传contextBeans即为属性?-->
    </bean>

    <!-- 自动扫描装配,保证把base-package里的注解对应bean扫描到 -->
    <context:component-scan base-package="com.example.controller"/>
</beans>

(4)applicationContext.xml

这个文件配置非MVC组件,如需扫描成bean的xml文件(component-scan),其他需扫描的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"
       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">
    <context:component-scan base-package="com.example"/>
    <!--这个文件里是把注解解析成bean格式,bean可以由xml直接id property生成,也可以来自注解-->
    <import resource="classpath:mybatis/mybatis-config.xml" />
    <!--import进其他的xml文件-->
</beans>

4.报错:no bean named UserDao is defined

   解决:配置声明了bean的某些xml文件没有被扫描上,需要在applicationContext.xml或者其他可扫描的xml文件里配置import resource该xml文件。

             应该是WEB-INF里的web.xml是web机制(conf/context.xml)默认扫描的,然后web.xml配置了dispatcher-servlet.xml和applicationContext.xml路径,所以二者也可以被扫描到,但               是resources里面的xml虽然被打包到target里了,但未被扫描到。

---小知识点---

4.Spring Bean:

在Spring中,构成应用程序主干并由Spring LOC容器管理的对象称为bean,bean是一个由Spring LOC容器实例化、组装和管理的对象。
LOC:inversion of control控制反转,通过依赖注入的方式实现对象之间的松耦合关系。负责对象的生成和依赖的注入,对一个对象定义依赖关系而不创建它们,符合LOC的过程是 Person(Computer computer)对象依赖,而不是private computer=new Computer()或者非构造函数生成computer依赖类的实例
Spring控制类构建过程就不用new,,类的实例化、依赖的实例化、依赖的传入都由Spring Bean容器控制(控制反转)。
可以理解为bean管理类,一个bean的id就对应一个类,直接通过获取bean或者相关注解去得到对象。

bean容器,或称spring ioc容器,主要用来管理对象和依赖以及以来的注入;根据bean规范编写出来的类,并由bean容器生成的对象就是一个bean。
bean规范:所有属性为private;提供默认构造方法;提供getter和setter;实现serializable接口(序列成form)。


5.ApplicationContext:

ApplicationContext:是spring继BeanFactory之外的另一个核心接口或容器,
允许容器通过应用程序上下文环境创建、获取、管理bean。为应用程序提供配置的中央接口。
-bean调取-
ApplicationContext ctx = new ClassPathXmlApplicationContext("mybatis/mybatis-config.xml");
SqlSessionFactory factory=(SqlSessionFactory) ctx.getBean("sqlSessionFactory");

 

4.实例

(1)index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Index</title>
    <!--<link rel="stylesheet" type="text/css" href="../statics/css/index.css">-->
</head>
<body>
    <h2>views Demo success!</h2>
</body>
</html>

(2)404.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>404</title>
    <!--<link rel="stylesheet" type="text/css" href="../statics/css/index.css">-->
</head>
<body>
    <h2>404 not found!</h2>
</body>
</html>

(3)Controller/UserController.java

package com.example.controller;

import com.example.entity.User;
import com.example.service.UserService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

@Controller //controller注释代表这个类是个控制器
@RequestMapping("/user")//这里的RequestMapping注释指的是前端html的根路径
public class UserController {

    //拦截到了浏览器或其他的访问url为http://127.0.0.1:8080/Demo/user/login则调用该方法

    @RequestMapping("/login")//结合上面的/user,则html的form表单的action路径即为/user/login
    public String login() {
        if(true)
            return "index";//返回的是url,对应/views/index页面(dispatcher-servlet.xml的viewresolver设置的)
        else
            return "404";//对应/views/404页面
    }
}

更多jsp前后端传参、传对象、传list等参考https://blog.csdn.net/qq_41855420/article/details/104098542 

 

5.tomcat运行

操作:a.run->Edit Configurations->tomcat server

           b.File->settings->Plugins->搜索tomcat->勾选插件smart tomcat,installed(学生版或者社区版上面无tomcat server选项)

              run->Edit Configurations->Smart Tomcat

configuration选择tomcat目录(是总目录而不是bin),tomcat name可以随便填。

run->tomcat 7.0.94运行(对应tomcat name),idea下方会出现一个build的进度条。

浏览器url栏输入http://127.0.0.1:8080/Demo/user/login即可访问到UserController(注解为/user)的注解为/login的方法,返回/views/index.jsp页面。

---小知识点---

6.快捷操作:

ctrl+shift+alt+L 美化代码
ctrl+D 复制选中区域或者复制当行
ctrl+/ 注释掉当行或者选中区域(区域的话是一行行注释掉的)
选中+alt+enter 可以impor相关类t或得到提示小灯泡
shift+shift(两下) 弹出查找框
ctrl+shift+O pom.xml生效

User或其他实体类里某个属性右键generate可以直接生成getter、setter方法

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值