vscode 搭建SSM项目环境

简介

  • 这是一个简单的SSM(Spring+SpringMVC+Mybatis)的Demo
  • 本项目使用的是vscode进行编写
  • 推荐插件
    • Tomcat for Java (adashen.vscode-tomcat)
    • Java Code Generators (sohibe.java-generate-setters-getters)
    • Java Dependency Viewer (vscjava.vscode-java-dependency )
    • Java Extension Pack (vscjava.vscode-java-pack )
    • Language Support for Java™ by Red Hat (redhat.java )
    • Lombok Annotations Support for VS Code
    • Maven for Java (vscjava.vscode-maven)

创建Maven项目

  • 选择maven-archetype-webapp项目
  • 其他创建的选择创建webapp目录
  • 需要的依赖及版本
 <spring.version>5.2.2.RELEASE</spring.version>
<servlet.version>3.1.0</servlet.version>
<jsp.version>2.3.1</jsp.version>
<jstl.version>1.2</jstl.version>
<mysql.version>8.0.13</mysql.version>
<mybatis.version>3.4.6</mybatis.version>
<mybatis-spring.version>1.3.2</mybatis-spring.version>
<druid.version>1.1.12</druid.version>
<common.version>6.0.0</common.version> 
<fastjson.version>1.2.70</fastjson.version>

web.xml配置

  • SpringMVC核心拦截器配置
 <servlet>
    <servlet-name>mvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <!-- 配置文件 -->
        <param-name>contextConfigLocation</param-name>
        <!-- 默认为 /WEN-INF/XXX-servlet.xml (XXX 为 配置的servlet-name) -->
        <param-value>classpath:springmvc.xml</param-value>
    </init-param>
    <!-- 在tomcat服务器启动的时候就就加载 -->
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>mvc</servlet-name>
    <!-- 
        /*和/ 都是拦截所有请求 
        其中/* 还会拦截到*.jsp 
        / 不会拦截到*.jsp 会拦截.html
        原因查看 servlet匹配
     -->
    <url-pattern>/</url-pattern>
</servlet-mapping>
  • 为了能够在tomcat启动的时候可以自动加载Spring的配置文件加上一个监听器
<context-param>
    <param-name>contextConfigLocation</param-name>
    <!-- spring配置文件位置 -->
    <param-value>classpath:applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  • 解决中文乱码问题,加上SpringMVC提供的关于编码的过滤器
    <filter>
        <filter-name>charsetFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>forceRequestEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>forceResponseEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>charsetFilter</filter-name>
        <!-- 对所有的请求的路径进行拦截 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

springmvc.xml配置

  • 开启注解驱动,能使用springmvc提供的注解, 使用fastjson来转换@ResponseBody的内容
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 使用fastjson -->
  <mvc:annotation-driven>
        <mvc:message-converters register-defaults="true">
            <!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->
            <bean id="fastJsonHttpMessageConverter" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
                <property name="supportedMediaTypes">
                    <list>
                        <value>application/json;charset=UTF-8</value>
                    </list>
                </property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
  • 在web.xml配置了"/" 这个会对静态资源进行拦截,但在SpringMVC的HandlerMapping里面是没有静态资源处理的,所以会报404错误,这时候应该将静态资源交给其他默认的WEB 应用服务器默认的 Servlet 处理
<mvc:default-servlet-handler></mvc:default-servlet-handler>
  • 扫描controller所在的包 ,
  <context:component-scan base-package="com.antrain.ssm.controller" />
  • 配置jsp视图解析器, 在SpringMVC默认返回的是ModelAndView
    在返回字符串的时候会认为是视图名,SpringMVC也提供了简化,会对拿到的视图名进行拼接
    prefix+视图名+suffix
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/pages/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

applicationContext.xml配置

  • SpringMVC的核心Servlet启动时会创建一个IOC容器,但在项目经常需要多个IOC容器,在多个 Spring IOC 容器之间可以设置为父子关系,以实现良好的解耦。

  • 在 Spring MVC配置文件(springmvc.xml)中引用业务层的 Bean,即扫描controller所在的包 ,配置SpringMVC相关的配置

  • 在使用ContextLoaderListener时也会创建一个IOC容器, 读取自己的配置文件applicationContext.xml 里面一般配置配置数据源, 整合其他框架, 事务 以及把dao层和service层加入到改容器中

  • 在使用Mysql8连接的时候,注意时区问题 serverTimezone=Asia/Shanghai

  • 对于Mybatis 混合使用注解和配置

<context:component-scan base-package="com.antrain.ssm.service"></context:component-scan>
<!-- 配置连接池 -->
    <bean id="datasource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
        <property name="url" value="jdbc:mysql://127.0.0.1:3306/test?useUnicode=false&amp;characterEncoding=utf8&amp;serverTimezone=Asia/Shanghai">></property>
        <property name="username" value="root"></property>
        <property name="password" value="654321"></property>
        <property name="minIdle" value="8"></property>
        <property name="maxActive" value="20"></property>
    </bean>

        <!-- sqlSessionFactory -->
   <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据库连接池 -->
        <property name="dataSource" ref="datasource"></property>
        <!-- 扫描e实体类包 使用别名 -->
        <property name="typeAliasesPackage" value="com.antrain.ssm.pojo"></property>
        <!-- 扫描sql配置文件:mapper需要的xml文件 -->
		<property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>
      <!-- mapper的代理 放到springioc容器中 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 注入sqlSessionFactory -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
        <!-- 给出需要扫描mapper接口包 -->
        <property name="basePackage" value="com.antrain.ssm.mapper"></property>
    </bean>
  • Spring MVC WEB 层容器可作为 “业务层” Spring 容器的子容器:即 WEB 层容器可以引用业务层容器的 Bean,
  • 而业务层容器却访问不到 WEB 层容器的 Bean

vscode进行调试

  • 安装Tomcat for Java下载后tomcat 加入vscode中
    acMUYV.png

  • 同时Tomcat for Java 也提供了许多支持,比如我把端口号修改为 8089

acM6T1.png

  • 将项目进行打包,ctrl+shift+p 输入 maven 后选择 Maven: Execute commands, 再选择package执行打包命令后
    项目新增了 target 找到war包右击选择 Run on Tomcat Server 直接在tomcat中执行

ac1FQU.png

  • 选择 Open in Browser 后快速选择项目

acQmnJ.png

acQmnJ.png

servlet匹配

  • servlet中的url-pattern写法

    • 以”/’开头和以”/*”结尾的是用来做路径映射的。
    • 以前缀”*.”开头的是用来做扩展映射的。
    • “/” 是用来定义default servlet映射的。
    • 精确写法
  • servlet匹配优先级如下

    • 精确路径匹配
    • 最长路径匹配
    • 扩展匹配
    • default servlet: web.xml中如果某个Servlet的映射路径仅仅为一个正斜杠(/),则这个Servlet就成为当前Web应用程序的缺省Servlet。
  • 项目的web.xml都继承于tomcat的conf/web.xml其中包含的配置

    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
    </servlet>
    <!-- The mapping for the default servlet -->
    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <servlet>
        <servlet-name>jsp</servlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
    </servlet>

    <!-- The mappings for the JSP servlet -->
    <servlet-mapping>
        <servlet-name>jsp</servlet-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspx</url-pattern>
    </servlet-mapping>

     <!-- 默认session会话保存30min  -->
    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
  • 对有.jsp应该交给tomcat来处理
  • 注意: Filter的处理顺序和filter-mapping在web.xml中定义的顺序相同,因为filter的集合是一个链,所以只会有处理的顺序不同,而不会出现只选择一个filter

@Autowire和@Resource

  • @Autowire

    • @Autowired是由Spring提供
    • @Autowire默认按照类型(by-type)装配,默认情况下要求依赖对象必须存在。
    • 如果允许依赖对象为null,需设置required属性为false
    • 如果使用按照名称(by-name)装配,需结合@Qualifier注解使用
  • @Resource

    • @Resource是由javax.annotation.Resource提供,即J2EE提供,需要JDK1.6及以上。
    • @Resource默认按照名称(by-name)装配,名称可以通过name属性指定。
    • 当按照名称(by-name)装配未匹配时,按照类型(by-type)装配。(当显示指定name属性后 则无效)
  • @Resource装配顺序

    • 如果同时指定name和type属性,则找到唯一匹配的bean装配,未找到则抛异常;
    • 如果指定name属性,则按照名称(by-name)装配,未找到则抛异常;
    • 如果指定type属性,则按照类型(by-type)装配,未找到或者找到多个则抛异常;
    • 既未指定name属性,又未指定type属性,则按照名称(by-name)装配;如果未找到,则按照类型(by-type)装配。
  • 推荐使用@Resource, 复习JDK规范

题外话

  • 感觉现在vscode做的挺好,插件市场也非常丰富,在插件的帮助下功能也挺完善的,操作也方便,占内存也不大
  • 偶尔还是能遇到一些bug
  • markdown中的图片是使用是路过图床
  • 把外链地址直接复制到csdn 可能会遇到 转存失败 单独把图片地址粘贴几次可以解决问题

参考资料

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值