Day30项目saas-export项目

  • 时间:
  • 来源:互联网
  • 文章标签:

目录

  • Day30项目saas-export项目-系统架构简介
  • 学习目标
  • Export系统介绍
  • Saas介绍
  • 项目中使用到的技术
  • 系统架构简介
  • (一)导入数据库
  • (二)创建父项目 parent
    • parent 的 pom.xml
  • (三)创建子项目们
    • dao依赖domain
    • service依赖dao
    • web依赖service
  • (四)spring整合Mybatis
    • 检查 pom.xml
    • properties/db.properties
    • spring/applicationContext-dao.xml
    • ICompanyDao
    • ICompanyDao.xml
    • ICompanyDaoTest
  • (五)service
    • TestCompanyService
    • spring/applicationContext-tx.xml
    • 如果出现utf-8异常
    • 如果出现applicationContext异常
    • 如果出现Company找不到类异常
  • (六)spring整合springmvc
    • log4j.properties
    • web.xml
    • spring/springmvc.xml
    • CompanyController
  • (七)日期类型转换器
    • StringToDateConverter
    • spring/springmvc.xml
    • 测试CompanyController
  • 统一异常处理
    • MyExceptionResolver
    • spring/springmvc.xml
    • 测试

Day30项目saas-export项目-系统架构简介

学习目标

  • (1)理解Saas模式以及SaaS-Export项目的需求
  • (2)能够使用PD工具完成项目用例图绘制
  • (3)完成项目搭建(***)
  • (4)完成企业列表展示(**)

Export系统介绍

  • (1)export 是什么?
    出口

在这里插入图片描述

  • (2)export系统是做什么的?
    针对国际物流的进出口报关平台
  • (3)进出口报送的特点是什么?
    》》多个关联方
    国际物流的业务闭环涉及到海关、船东、港区、仓库、拖车、报关行等
    》》交易周期长
    》》支付结算体系受到限制
  • (4)进出口报送平台有什么用?
    需要通过工具来建立连接,完成信息的流转(报关业务的复杂性决定了工具的必要性)

Export服务于货代企业,通过提供SaaS工具,帮助中小企业简单便利的对国际物流全环节进行流程控

  • (5)Export项目分为哪几个模块?
    》》 1.权限模块(用户,角色,权限,部门)
    》》 2.货运模块(购销合同,货物,附件等)
    》》 3.报运模块(报关,装箱)
    》》 4.统计模块(财务)

Saas介绍

  • (1)Saas是什么?
    云服务共有三种模式,Saas是云服务模式之一
    SaaS:Software as a Service ——软件即服务
  • (2)云服务是什么?
    云服务指通过网络以按需、易扩展的方式获得所需服务。这种服务可以是IT和软件、互联网相关,也可是其他服务。它意味着计算能力也可作为一种商品通过互联网进行流通。
  • (3)云服务的分类
    IaaS:Infrastructure as a Service ——基础设施即服务
    PaaS:Platform as a Service ——平台即服务
    SaaS:Software as a Service ——软件即服务
  • (4)比如:我们需要有一个网站
    》》1 服务器硬件,网络,存储设备等 – 基础设施
    》》2 JDK,Tomcat,MySQL,Redis等Java平台环境 – 平台
    》》3 有一个软件程序 – 软件
    IaaS – 这些公司提供 服务器硬件,网络,存储设备等 – 基础设施
    PaaS - 这些公司提供基础设施+软件平台
    Saas - 这些公司基础设备+平台+软件(一条龙服务)
    简单一句话:Iaas就是卖硬件,Paas就是卖开发的运行环境,Saas就是卖软件产品
  • (5)IBM 的软件架构师 Albert Barron 曾经使用披萨作为比喻,这个问题。David Ng 进一步,让它变得更准确易懂。请设想你是一个餐饮业者,打算做披萨生意
    厨房、炉子、煤气,你使用这些 — 基础设施即服务
    将配料洒在饼皮,让别人帮你烤出来就行了 --平台即服务
    他人直接做好了披萨,到手的就是一个成品,你贴牌 --软件即服务

项目中使用到的技术

1、SSM(开发基础)
2、Apache Shiro(权限框架)
3、Apache Dubbo(分布式开发)
4、RabbitMQ (消息队列)
5、Jasper Report (PDF报表)
6、POI(Excel报表)

系统架构简介

  • (1)开发环境要求
    版本要使用老师发给我们的
    在这里插入图片描述
  • (2)项目技术架构简介
    采用当前流行的前后端编程架构:
    》》 1:后端框架采用 Spring +SpringMVC+mybatis +Dubbo
    》》 2 :前端采用AdminLTE框架的前端解决方案
  • (3)工程依赖关系预览
1603460197155

在这里插入图片描述

  • (4)maven父子项目的好处
    parent 就是 project
    子则是module
    • 父子工程对于模块的分离程度更高了
      以前:项目不断变大和复杂化,改动与编译困难
      现在:简单,改动的也只是这一个模块而已,并不会影响其他的模块
    • 父子工程使代码更清晰,提高了重用
      以前:多个模块重复引入依赖
      现在:使用父子工程,则只需要在父工程中引入了,则子工程自动继承

(一)导入数据库

  • 数据库sql文件
1603522778925
  • 导入

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1NHlh7pR-1603523531395)(C:\Users\27302\AppData\Roaming\Typora\typora-user-images\1603522816616.png)]

(二)创建父项目 parent

export_parent

  • (1)创建Project工程,不需要勾选模板
    在这里插入图片描述
  • (2)添加依赖 pom.xml
  • (3)在新建每个父子程 时,给每个父工程或者子工程,执行clean,还有install
    生成jar
    在这里插入图片描述
  • (4)规划其他工程(添加到各模块的pom.xml)

<packaging>pom</packaging>

export_parent

<packaging>jar</packaging>

export_domain
export_dao
export_system_service

<packaging>war</packaging>

export_web_manager

parent 的 pom.xml

    <!-- 定义依赖的版本号 -->
    <properties>
        <junit.version>4.12</junit.version>
        <spring.version>5.2.9.RELEASE</spring.version>
        <pagehelper.version>5.1.8</pagehelper.version>
        <servlet-api.version>2.5</servlet-api.version>
        <dubbo.version>2.8.4</dubbo.version>
        <zookeeper.version>3.4.7</zookeeper.version>
        <zkclient.version>0.1</zkclient.version>
        <mybatis.version>3.4.5</mybatis.version>
        <mybatis.spring.version>1.3.1</mybatis.spring.version>
        <mybatis.paginator.version>1.2.15</mybatis.paginator.version>
        <mysql.version>5.1.32</mysql.version>
        <druid.version>1.0.9</druid.version>
        <commons-fileupload.version>1.3.1</commons-fileupload.version>
        <jackson.version>2.9.5</jackson.version>
    </properties>
    <!-- 定义依赖 -->
    <dependencies>
        <!-- Spring -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Dubbo依赖包 -->
        <dependency>
            <groupId>javassist</groupId>
            <artifactId>javassist</artifactId>
            <version>3.11.0.GA</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.10</version>
        </dependency>

        <!--web基础包 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- Mybatis -->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>${mybatis.version}</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis.spring.version}</version>
        </dependency>
        <!-- mybatis分页插件 -->
        <dependency>
            <groupId>com.github.miemiedev</groupId>
            <artifactId>mybatis-paginator</artifactId>
            <version>${mybatis.paginator.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>${pagehelper.version}</version>
        </dependency>


        <!-- MySql -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!-- 连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>${druid.version}</version>
        </dependency>


        <!-- 文件上传组件 -->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>${commons-fileupload.version}</version>
        </dependency>

        <!-- spring整合rabbitmq -->
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>2.0.1.RELEASE</version>
        </dependency>

        <!-- xml解析器通用包:CXF WebService框架 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.3</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency>
        <dependency>
            <groupId>xml-apis</groupId>
            <artifactId>xml-apis</artifactId>
            <version>1.4.01</version>
        </dependency>

        <!--shiro-->
        <!--shiro和spring整合-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-spring</artifactId>
            <version>1.3.2</version>
        </dependency>
        <!--shiro核心包-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!--测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- jackson支持包 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>

        <!--日志包-->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    </dependencies>
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212

(三)创建子项目们

  • (1)创建子工程,不需要使用模板,最后一个web选一下,删除其他标签
  • (2)一定要选中parent 为 【export_parent】
  • (3) 每个模块创建完,第一次,要执行cleaninstall
  • (4)定义Company类 即 公司类
  • (5)通过dependencies完web依赖 service,service依赖dao,dao依赖domain
  • (6)建包,先分层再分模块
    com.vission.domain
    现在
    com.vission.domain.company
    com.vission.domain.user

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YvRrWQAn-1603523531399)(C:\Users\27302\AppData\Roaming\Typora\typora-user-images\1603523120708.png)]

dao依赖domain

   <dependencies>
        <dependency>
            <artifactId>export_domain</artifactId>
            <groupId>com.vission</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
1234567

service依赖dao

    <dependency>
            <artifactId>export_dao</artifactId>
            <groupId>com.vission</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
12345

web依赖service

     <dependency>
            <artifactId>export_system_service</artifactId>
            <groupId>com.vission</groupId>
            <version>1.0-SNAPSHOT</version>
        </dependency>

(四)spring整合Mybatis

检查 pom.xml

有没有spring与mybatis的整合包

     <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>${mybatis.spring.version}</version>
        </dependency>
12345

export_dao

  • (1)properties/db.properties
  • (2)spring/applicationContext.xml
  • (3)定义ICompanyDao
  • (4)定义ICompanyDao.xml
  • (5)测试

properties/db.properties

# key=value
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/saas-export?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456

1234567

spring/applicationContext-dao.xml

子工程,dao子工程的交给spring管理,创建一个对应的applicationContext-dao.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">

    <!--读取db.properties文件-->
    <context:property-placeholder location="classpath:properties/db.properties"></context:property-placeholder>

    <!--1.配置数据源-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="${jdbc.url}"/>
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
    </bean>

    <!--2.配置Spring整合Mybatis *** 由Spring创建SqlSessionFactory对象-->
    <!--2.1 配置SqlSessionFactoryBean-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
        <!-- com.vission.domain.company.Company  company-->
        <property name="typeAliasesPackage" value="com.vission.domain"/>
    </bean>

    <!--2.2 配置Dao接口所在包 动态代理 session.getMapper(Dao.class)-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定Dao接口所在包-->
        <property name="basePackage" value="com.vission.dao"/>
    </bean>

</beans>
123456789101112131415161718192021222324252627282930313233

ICompanyDao

public interface ICompanyDao {
    //查询所有的公司记录
    //select * from ss_company
    List<Company> findAll();
}

123456

ICompanyDao.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<!--namespace: 需要映射的Dao接口类型-->
<mapper namespace="com.vission.dao.company.ICompanyDao">

    <select id="findAll" resultType="company">
        select * from ss_company
    </select>
</mapper>

12345678910

ICompanyDaoTest

//spring的junit测试的两个注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/applicationContext-dao.xml")
public class ICompanyDaoTest {

    //可以通过@Autowrie 去 spring中获取dao的实现类对象
    @Autowired
    ICompanyDao iCompanyDao;//=new 实现类()
    @Test
    public void findAll() {
        System.out.println(iCompanyDao);
        //返回所有的企业
        List<Company> list = iCompanyDao.findAll();
        System.out.println(list);
    }
}

(五)service

  • (1)service依赖dao
  • (2)编写测试
  • (3)如何读取另一个工程的spring的配置

classpath: 加载当前maven工程的resources目录下的配置文件
classpath*: 加载当前maven工程及其依赖工程的resources目录下的配置文件
applicationContext-*.xml: 读取所有符合规则的文件

TestCompanyService

//2:添加spring的单元测试
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath*:spring/applicationContext-*.xml")  //3:创建 spring/applicationContext-tx.xml
public class TestCompanyService {
    @Autowired
    ICompanyService  service;
    @Test
    public void test01(){
        //1:编写了业务逻辑的测试
        //等号 左边是接口 右边是实现类
        //ICompanyService  service = new CompanyServiceImpl();
        List<Company> list = service.findAll();
        System.out.println(list);
    }
}

12345678910111213141516

spring/applicationContext-tx.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:tx="http://www.springframework.org/schema/tx"
       xmlns:aop="http://www.springframework.org/schema/aop"
       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/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--扫描Service实现类-->
    <context:component-scan base-package="com.vission.service"/>


    <!--Spring声明式事务(底层就是AOP): 三步曲-->

    <!--1.配置事务管理器:管理事务:DataSource.Connection.commit() rollback()方法  -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--注入数据源-->
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!--2.配置事务通知-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager" >
        <!--配置事务细节特征-->
        <tx:attributes>
            <!--查询方法,使用默认的隔离级别 及 SUPPORTS传播行为-->
            <tx:method name="find*" isolation="DEFAULT" propagation="SUPPORTS"/>
            <tx:method name="query*" isolation="DEFAULT" propagation="SUPPORTS"/>
            <tx:method name="select*" isolation="DEFAULT" propagation="SUPPORTS"/>
            <tx:method name="get*" isolation="DEFAULT" propagation="SUPPORTS"/>
            <!--增删改方法,使用默认的隔离级别 及 REQUIRED传播行为-->
            <tx:method name="*" isolation="DEFAULT" propagation="REQUIRED"/>
        </tx:attributes>
    </tx:advice>

    <!--3.配置事务切面: 切面=通知+切入点-->
    <aop:config>
        <!--配置切入点-->
        <aop:pointcut id="pt" expression="execution(* com.vission.service.*.impl.*.*(..))"/>

        <!--切面=通知+切入点-->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
    </aop:config>

</beans>


123456789101112131415161718192021222324252627282930313233343536373839404142434445

如果出现utf-8异常

去父工程的pom.xml

   <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
123

如果出现applicationContext异常

@ContextConfiguration("classpath*:spring/applicationContext-*.xml")

classpath: 加载当前maven工程的resources目录下的配置文件
classpath*: 加载当前maven工程及其依赖工程的resources目录下的配置文
applicationContext-*.xml: 读取所有符合规则的文件

如果出现Company找不到类异常

<packaging>pom</packaging>
export_parent

<packaging>jar</packaging>
export_domain
export_dao
export_system_service

<packaging>war</packaging>
export_web_manager

(六)spring整合springmvc

  • (1)log4j.properties
  • (2)web.xml
  • (3)springmvc.xml

log4j.properties

不在别的子工程中添加呢?当前 web层的数据的接收与返回,非常重要

log4j.rootLogger=debug, stdout, logfile

log4j.category.org.springframework=info
#log4j.category.org.apache=INFO

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=c:\\log\\myweb.log
log4j.appender.logfile.MaxFileSize=1KB
log4j.appender.logfile.MaxBackupIndex=5
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

12345678910111213141516

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://java.sun.com/xml/ns/javaee"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5">

<!--1.spring监听器: 读取applicationContext.xml配置文件-->
<!--修改监听器读取配置路径-->
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>classpath*:spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!--2.字符编码过滤器-->
<filter>
  <filter-name>characterEncodingFilter</filter-name>
  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  <init-param>
    <param-name>encoding</param-name>
    <param-value>utf-8</param-value>
  </init-param>
</filter>
<filter-mapping>
  <filter-name>characterEncodingFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

<!--3.springmvc前端控制器-->
<servlet>
  <servlet-name>dispatcherServlet</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring/springmvc.xml</param-value>
  </init-param>
  <!--项目启动的时候,创建DispatcherServlet-->
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>dispatcherServlet</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

</web-app>

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  • classpath*:spring/applicationContext-*.xml

spring/springmvc.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">

    <!--1.扫描Controller所在包-->
    <context:component-scan base-package="com.vission.web"/>

    <!--2.视图解析器-->
    <!-- success   查找文件 /WEB-INF/pages/success.jsp -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!--2.1 前缀-->
        <property name="prefix" value="/WEB-INF/pages/"/>
        <!--2.2 后缀-->
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--3.mvc注解驱动-->
    <!--3. 把转换器工厂放入到注解驱动,才会生效的 @RequestMapping @ResponseBody @RequestBody-->
    <mvc:annotation-driven />

</beans>

12345678910111213141516171819202122232425

CompanyController

@Controller
@RequestMapping("/company")
public class CompanyController {
    private static final Logger l = LoggerFactory.getLogger(CompanyController.class);
    @Autowired
    ICompanyService iCompanyService;

    //list.action -> list
    @RequestMapping(path="/list.do",method = RequestMethod.GET)
    public String list(Model model){
        List<Company> list = iCompanyService.findAll();
        //打印重要数据
        l.info("list  list="+list);
        model.addAttribute("list",list);
        return "company/company-list";
    }
}

(七)日期类型转换器

  • (1)springMVC默认不支持页面上的日期字符串到后台的Date的转换
    url?date=2020-02-02 方法(Date date)
  • (2)可以有两种方式
    》》配置全局日期转换器
    》》配置日期转换注解

在这里插入图片描述

StringToDateConverter

/**
 * 日期类型转换器
 * 泛型一:源类型
 * 泛型二:目录类型
 */
public class StringToDateConverter implements Converter<String,Date>{
    @Override
    public Date convert(String source) {
        Date date = null;
        try {
            date = new SimpleDateFormat("yyyy-MM-dd").parse(source);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return date;
    }
}
1234567891011121314151617

spring/springmvc.xml

  <!--配置类型转换器-->
    <!--1.创建类型转换器对象-->
    <bean id="stringToDateConverter" class="com.vission.web.converter.StringToDateConverter"/>

    <!--2.把转换器对象放入SpringMVC转换器工厂中-->
    <bean id="conversionServiceFactory" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="stringToDateConverter"/>
            </set>
        </property>
    </bean>

    <!--3. 把转换器工厂放入到注解驱动,才会生效的 @RequestMapping @ResponseBody @RequestBody-->
    <mvc:annotation-driven conversion-service="conversionServiceFactory" />
123456789101112131415

测试CompanyController

    @RequestMapping(path="/testDate.do",method = RequestMethod.GET)
    public String testDate(Date date){ //该参数接收浏览器提交的日期字符
        l.info("testDate date="+date);
        return "result";
    }
123456

统一异常处理

  • (1)在Java代码中,如何处理异常?
    try-catch
public class TestTryCatch {

    @Test
    public void test01(){
        //Ctrl+Alt+T
        try {
            int num = 0;
            System.out.println("Hello");//1
            System.out.println(1/num);//异常 -->catch
            System.out.println("World");
        } catch (Exception e) {//执行处理异常的代码
            e.printStackTrace();
        }
    }
}

12345678910111213141516
  • (2)HandlerExceptionResolver是什么?
    spring-mvc中的统一异常处理器
    如果控制器方法中有未捕获的异常抛出,可能导致程序将异常抛给用户 此时,此时可以使用统一异常处理器
  • (3)使用
    》》实现接口
    》》spring配置
    》》测试

MyExceptionResolver

//1:实现接口
public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
         //Exception e 表示由程序抛出来的异常
        //返回值 为什么是 ModelAndView?  添加数据 再将数据显示在指定页面
        ModelAndView mv = new ModelAndView();
        mv.addObject("exception",e.getMessage());//添加异常信息
        mv.setViewName("error");//指定一个显示错误的美观页面
        return mv;
    }
}

12345678910111213

spring/springmvc.xml

 <!--2 注册 -->
    <bean id="myExceptionResolver" class="com.vission.web.exceptions.MyExceptionResolver"/>
12

测试

  @RequestMapping(path="/testDate.do",method = RequestMethod.GET)
   public String testDate(Date date){ //该参数接收浏览器提交的日期字符
       l.info("testDate date="+date);
       int num = 1/0;
       return "result";
   }

本文链接http://www.taodudu.cc/news/show-1782057.html