vscode 搭建SSM项目环境

vscode 搭建SSM项目环境

      • 简介
      • 创建Maven项目
      • web.xml配置
      • springmvc.xml配置
      • applicationContext.xml配置
      • vscode进行调试
      • servlet匹配
      • 题外话
      • 参考资料

简介

  • 这是一个简单的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.RELEASEspring.version>
<servlet.version>3.1.0servlet.version>
<jsp.version>2.3.1jsp.version>
<jstl.version>1.2jstl.version>
<mysql.version>8.0.13mysql.version>
<mybatis.version>3.4.6mybatis.version>
<mybatis-spring.version>1.3.2mybatis-spring.version>
<lombok.version>1.18.12lombok.version>
<druid.version>1.1.12druid.version>
<common.version>6.0.0common.version>

web.xml配置

  • SpringMVC核心拦截器配置
 <servlet>
    <servlet-name>mvcservlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
    <init-param>
        
        <param-name>contextConfigLocationparam-name>
        
        <param-value>classpath:springmvc.xmlparam-value>
    init-param>
    
    <load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
    <servlet-name>mvcservlet-name>
    
    <url-pattern>/url-pattern>
servlet-mapping>
  • 为了能够在tomcat启动的时候可以自动加载Spring的配置文件加上一个监听器
<context-param>
    <param-name>contextConfigLocationparam-name>
    
    <param-value>classpath:applicationContext.xmlparam-value>
context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
  • 解决中文乱码问题,加上SpringMVC提供的关于编码的过滤器
    <filter>
        <filter-name>charsetFilterfilter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
        <init-param>
            <param-name>forceRequestEncodingparam-name>
            <param-value>trueparam-value>
        init-param>
        <init-param>
            <param-name>forceResponseEncodingparam-name>
            <param-value>trueparam-value>
        init-param>
        <init-param>
            <param-name>encodingparam-name>
            <param-value>UTF-8param-value>
        init-param>
    filter>
    <filter-mapping>
        <filter-name>charsetFilterfilter-name>
        
        <url-pattern>/*url-pattern>
    filter-mapping>

springmvc.xml配置

  • 开启注解驱动,能使用springmvc提供的注解
<mvc:annotation-driven>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.controller">context:component-scan>
  • 配置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层加入到改容器中

<context:component-scan base-package="com.antrain.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=true&characterEncoding=utf8">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>

    
    <bean class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="datasource">property>
        <property name="typeAliasesPackage" value="com.antrain.pojo">property>
    bean>
   
    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.neuedu.dao">property>
    bean>
  • Spring MVC WEB 层容器可作为 “业务层” Spring 容器的子容器:即 WEB 层容器可以引用业务层容器的 Bean,
  • 而业务层容器却访问不到 WEB 层容器的 Bean

vscode进行调试

  • 安装Tomcat for Java后 下载后tomcat 加入vscode中
    vscode 搭建SSM项目环境_第1张图片

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

vscode 搭建SSM项目环境_第2张图片

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

vscode 搭建SSM项目环境_第3张图片

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

vscode 搭建SSM项目环境_第4张图片

vscode 搭建SSM项目环境_第5张图片

servlet匹配

  • servlet中的url-pattern写法

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

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

    <servlet>
        <servlet-name>defaultservlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServletservlet-class>
    servlet>
    
    <servlet-mapping>
        <servlet-name>defaultservlet-name>
        <url-pattern>/url-pattern>
    servlet-mapping>

    <servlet>
        <servlet-name>jspservlet-name>
        <servlet-class>org.apache.jasper.servlet.JspServletservlet-class>
    servlet>

    
    <servlet-mapping>
        <servlet-name>jspservlet-name>
        <url-pattern>*.jspurl-pattern>
        <url-pattern>*.jspxurl-pattern>
    servlet-mapping>

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

题外话

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

参考资料

  • Servlet映射规则和Servlet的映射URL冲突时匹配原则
  • web.xml文件中缺省映射路径"/"问题以及客户端访问web资源的匹配规则

你可能感兴趣的:(vscode,SSM,vscode)