JT项目-1

article/2025/9/14 17:17:05

DAY01

学习京淘的意义

1 为什么选择电商项目作为java培优部分的重要项目

· (用户量广)

· 技术难点多,高(高并发,高可用)尤其是在中国

谷歌是全球并发最高的网站

· 学习成本低(无需精通业务部分)

2 学习完京淘项目对我们的就业有什么好处

· 代替1-2年工作经验

· 技术就业范围广,就业重心多(附录1-京淘项目的技术点)

电商架构

redis缓存

搜做+爬虫

· 高薪保证

3 如何学好京淘(建议和要求)

· 认真听讲

挑错字

· 当天内容当天消化

理论和代码,根据当天的问题,第二天早上第一节课会有知识回顾+遗留

问题;

· 利用好小组,集体资源,朋友的力量

· 预习的问题

当天结束后,我会告知第二天的技术点;可以根据这些技术点自行查看一些资料,带着目的看资料:

这是什么;在哪用;

京淘简介(过一下)

2017124

10:08

电商行业特点

1 分布式

数十台服务器,甚至百台、千台、万台,包括:Nigix负载均衡集群、Tomcat集群、Redis缓存集群、RabbitMQ消息队列集群、MySQL主从、Solr全文检索集群等。

分布式集群

集群:从任务为单位的角度区分,集群属于单个实例完成单个任务,集中单例群体完成整体功能的过程

分布式:单个任务拆分成众多的子任务,单个实例完成其中之一,众多实例合作完成一个任务的过程;

2 高并发

要面对高并发用户,大流量访问。Google日均PV数35亿,日均IP访问数3亿。腾讯QQ最大在线人数4亿。淘宝2015年“双十一”,活动交易额975亿,2016年第一天交易额超过千亿,活动开始第一分钟独立访问用户达1000万。

3 高可用

系统7X24小时不间断运行。大型互联网网站宕机事件通常会成为新闻焦点。如2010年百度域名被黑客劫持导致不能访问,带来不可估量的经济损失。

4 海量数据

B KB MB GB TB PB YB EB ZB BB NB DB

存储、管理海量数据,需要使用大量服务器。facebook每周上传的照片数量近10亿,百度收录的网页数量数百亿,Google有近百万台服务器为全球用户提供服务。

京淘简介

京淘网上商城是一个综合性的B2C(Busines-to-custmer)平台,<预言>C2C类似京东商城、天猫商城。会员可以在商城浏览商品、添加商品到购物车、下订单,以及参加各种活动。商家可以入驻京淘商城,在该平台上开店出售自己的商品,并且得到京淘商城提供的可靠服务。管理员、运营人员可以在后台管理系统中管理商品、订单、会员等。客服人员可以在后台管理系统中处理用户的询问和投诉。

开发工具

Windows7/CentOS 6.5/VMworkstation10

Power Designer 15.6

Eclipse neon

JDK 1.7以上 必须。一些高级应用需要高版本支持1.8

Maven 3.5

Tomcat 7.0.59

Nginx 1.9.9

Redis 3.2.11

MySQL 5.5.27(注意5.0导入jt.sql会报错必须升级) + Amoeba 3.0.4

 

 

 

 

京淘架构

2018110

9:57

传统架构是如何开发一个项目

不分功能不分模块不分任务的全都放到一个工程完成

 

优点:结构简单,开发过程不需要考虑分布式的难题,不需要考虑jar包的

依赖管理;

缺点:高可用能力低,一旦某一个模块失效,整体失效,团队开发的配合那难度大

 

京淘如此庞大的一个电商系统能否单人独立开发完成?

一个大型项目需要众多的工程团队配合完成,或者小组,单个的人相互配合,由不同

的团队开发不同的模块

京淘中我们引入多个工程系统;分为两部分

1 业务系统(启动的这些系统):

前台系统(jt-web):访问首页;登录连接,注册连接,购物车连接,订单连接

后台系统(jt-manage):商品增删改查(web前端技术EasyUI KindEditor)

购物车系统:选择商品,数量,支付金额;

订单系统:从购物车发起的连接,生成订单,收货人信息,付款方式,商品内容

登录系统:权限管理,用户信息的获取;

2 支撑系统:

父工程:管理所有依赖的jar包(maven继承);本质就是准备好pom文件

工具工程:管理所有工程的公用工具类(maven依赖);代码

以上的每一个工程系统都是一个单独的maven工程

<问题>如何按团队分功能分模块开发呢?

一个大型项目,业务划分成多个子系统的过程就是所谓的拆分过程中的业务

纵向拆分

 

 

<同理>

每一个子业务系统当功能非常复杂,结构烦琐,也很难由同一个团队或者小组

单独开发完成,引出二级拆分(横向拆分);本质就是三层架构的拆分工作

(持久层(pojo,mapper接口,mapper.xml),业务层(service),控制层(controller))

注意:parent和common是没有横向拆分的;主要负责提供资源

每一个横向拆分出来的部分也需要单独成立一个maven工程,但是本次版本的

京淘没有做横向拆分

如果进行拆分,以下图样貌展示

 

本次京淘以包的形式代替横向拆分中的子系统

 

 

京淘的整体布局结构

多个工程,根据项目的纵向拆分,分为不同功能的不同工程系统;

 

<问题>

一个业务系统manage,内部如何组成的后台系统

controller,service,mapper,pojo

 

对于支撑子系统(parent,common);只做资源的提供

 

解释业务系统需要具体的实时开发的代码问题;

对于某一个业务系统,三层架构包括:持久层,业务层,控制层;

可以从前向后的开发(页面分析-controller-service-mapper,pojo,mapper.xml),也可以从后向前(pojo,mapper--service--controller-页面解析)

 

 

 

 

京淘开发的环境基础

2018110

11:30

maven环境基础

1 配置eclipse和maven

eclipse的属性(preferences中)

 

 

 

 

 

2 maven仓库的设置

maven下的set.xml的53

 

 

maven工程的继承

情景分析

在一个庞大的项目中,由于业务拆分给了多个工程团队开发不同的模块,每个团队有管理自己开发工程的权利;

导致一个问题,每个工程都有不同的自己依赖的jar包;如果各自为政;

例如mybatis包,jar包有不同版本,后台系统需要;登录系统;购物车系统,订单系统

版本不一致导致,当系统间需要相互调用和交互的时候,有可能会造成代码冲突的bug;这种bug很致命,也很难处理;

 

所以我们引入maven工程的继承特点来完成父类工程的创建,将所有的jar包管理交给parent

 

搭建父类maven工程和普通maven工程区别只有一个pom文件中的类型

不是jar也不是war而是pom

 

 

准备数据库的数据

资源文件:设计--jt.sql

1 创建一个叫jtdb的数据库

 

2 右键数据库将sql文件导入

 

浏览文件选中jt.sql

 

点击导入完成

 

如果导入时候出现错误,是由于数据库版本导致的问题

解决办法删除你当前的mysql,重新安装我给的版本

 

 

 

 

预习内容

2018110

11:49

 

1 pd中观察一下商品分类,商品列表,观察字段,主键,类型,和汇通比较一下

2 了解一下EASYUI

3 观察一下课程资料中的代码中

manage工程中的自工程jt-manage-web中的src文件夹下的resource文件中

的配置文件

4 观察代码中的parent里的pom文件

5 common工程中的工具类


DAY02

回顾+遗留问题

2018110

22:35

知识回顾

京淘的架构

1 大型项目根据业务和功能模块交给不同团队开发--纵向拆分

拆成2部分子系统

支撑子系统:parent和common;

业务子系统:前台后台订单等

2 每一个业务子系统在京淘的开发中也要有三层架构

mybatis:原来做类与表的对应是在xml文件中

在京淘中使用JPA注解,无需在sql语句中写表字段和类属性的对应关系

通用mapper:单表增删改查.无需写sql

controller返回给页面jsp的数据原来使用model返回一个map对象,list对象,到页面用el表达式处理

京淘中使用json和jsonp

3 二级拆分,本质就是三层开发模式的拆分;

 

maven继承

和创建普通maven工程非常类似jt-parent

pom文件引入后,所有公共依赖的jar包就存在于parent这个工程中;pom文件中的类型不能jar或者war;

 

遗留问题:

1 更换了maven库后,创建maven工程提示骨架错误,

原因就是因为maven库中的文件有损坏;或者maven库的文件版本不支持你的操作环境;

解决办法:开网,删除对应的骨架文件,重新创建;

 

2 当一个项目被拆分多个模块时,在真实企业中是如何管理的?CVS SVN;

涉及到的问题就是:软件的资源管理和版本管理;

 

常见的管理这些内容的软件:CVS(早期),SVN(用的多);GIT(软件版本管理比较强)

资源包括:静态页面css,html,img;系统对接的接口文件;开发需求书;jar包();工具类等

 

不同的开发团队下载对应的资源文件

在各自的环境中开发工程,最终将完成的任务以war包形式上传到SVN服务器上,或者setup或者update

当某一个版本的系统需要发布时,就把SVN上整合的一批war同时发布到不同的测试环境/生产环境/现场环境

 

 

创建父工程和工具工程

2018112

9:26

parent工程

maven工程的常用骨架quickstart和webapp

支撑的工程parent 和common都是使用quickstart

1 创建一个maven工程
 

 

2 选择qu

 

ickstart

3 命名

 

4 完成创建后修改3处

· java build path

· java complier

· workspaceencoding

 

回忆:

parent工程的作用是什么?

解决所有工程的jar包依赖

5 导入依赖的pom文件

资料位置:课前资料--常用配置文件--parent-pom.xml

不要一次性copy文件进行覆盖;全部copy有可能导致mvven库加载文件失败

 

在创建环境时注意的问题:

1 所有路径不能有空格和中文,编译出现%

2 validation关掉;因为当前的京淘中没有新编写的配置文件或jsp文件

3 eclipse视图模式中的2个package explorer和navigator

前者展示工程结构,后者展示资源结构

 

搭建common工程

1 maven选择quickstart

2 命名

3修改3处

4 导入准备好的common工具类资源

资源位置:课前资料--基础框架--工具类--jt-common--src文件

里面的main文件夹直接全部copy到工具类工程

main文件夹放到src下,点击yestoall

 

5 依赖父类

pom视图界面完成依赖的配置

 

 

 

 

 

 

后台工程

2018112

10:25

完成后台代码需要创建一个后台工程

 

1 创建maven工程(quickstart/webapp)

两个骨架的却别

一个是java工程

一个是web工程

在京淘中判断工程是否是web可以根据工程是否需要接收

前台请求来判断;有没有controller

例如:sso.jt.com;如果有请求地址:http://sso.jt.com/login

 

 2 修改属性(4处)

多了一个project facets

 

3 继承parent同时依赖common

 

 


 

4 发布当前创建的工程

右键工程,点击-run--maven install进行发布

有可能碰到问题是提示ERROR

你没有使用jdk可以在使用jre

解决办法:需要修改eclipse绑定的jdk环境

 

 

商品分类

2018112

10:43

开发的功能是根据什么东西来完成的?

企业中是根据严格的需求说明书来进行开发的,京淘暂时没有那么严谨;

 

完成需求一:

展示商品分类的所有数据到浏览器

前台需要后台传递json格式的数据

数据来源--数据库--商品分类表

 

查看数据库设计

资料位置:设计--pdm文件

 

分类id:

数据库id类型的三种选择

· int(int):优点,性能高;缺点,会重复

· long(bigint):优点,性能高;缺点,会重复;

· 数据存储量比int大,在同样情况下考虑量的问题时使用long

· string(varchar):在分布式环境中,多个数据库产生的问题就是,分开的数据自增int或者long会产生重复,这时使用string类型(uuid);

电商中的数据库是分布式的吗?

对于电商系统;数据库不是分布式的,而是中央集中(大量的查询已经被缓存所替代--京淘中的缓存是redis)

父类id

体现层级关系的字段

名称

状态

1 正常 2 删除(伪删除)

排序号

京淘项目中没有用

电商项目中有非常多的类似的字段

热度,销量,人气

是否父类

与分类树展现相关;如果不是父类,说明是末尾分类

创建和修改时间

商品分类根据修改时间排序

 

开发代码的过程

1 pojo

2 mapper.xml

3 mapper接口

4 service结合controller

5 controller页面分析

页面分析三元素

· 请求地址

· 请求参数

· 返回类型

 

pojo(ItemCat)

插入:序列化的意义

将内存中的对象数据在存储到磁盘或者传输时根据序列化id区分

对象同时获取对象数据

继承BasePojo

具体代码见课下资料

 

mapper.xml(itemCatMapper.xml)

使用通用mapper可以帮助完成单表增删改查

查询item-cat的所有数据,属于单表查询,所以无需编写sql

语句,ItemCatMapper.xml留作框架扩展

copy一个文件和文件目录结果过来;

资料位置:课前资料--基础框架--managewebresource--resources--

mybatis中的mapper.xml

 

 

mapper接口文件(ItemCatMapper)

需要继承通用mapper的使用,自定义SysMapper来

继承通用mapper的功能供后续mapper接口使用

通用mapper不支持批量删除,自定义SysMapper继承通用mapper后支持批量删除

 

创建一个mapper接口类,继承SysMapper即可

 

业务层(ItemCatService)

和以往的习惯不一样在于没有接口,直接实现类;

业务逻辑是什么?

查寻当前tb_item_cat中的所有数据;

List<ItemCat>

需要继承一个父类的Service叫BaseService

自动注入了SysMapper同时封装了一些方法的调用

例如queryAll

引入BaseService

资料位置:课前资料--基础框架--BaseService,将其拷贝到

common的service包中供后续众多service继承使用

 

控制层(ItemCatController)

没有页面分析,自定义访问路径,不是从网页发起的访问请求地址

/item/cat

 

存在的问题:

1 通用mapper怎么知道isParent对应表格字段是

is_parent

2 还缺少三大框架的配置文件;

3 没有运行tomcat插件;

4 缺少静态资源;css,js等

5 缺少web.xml

 

解决第一个问题

不在xml文件里写对应关系,利用JPA注解

java提供的一套持久层注解,利用这套注解,持久层框架

就可以直接读取其中对应的属性名称与表中字段关联;

@Table(name="表名"):把类和表对应

@Id:在主键属性上添加,对应表中的主键字段

@GeneratedValue(strategy=GenerationType.IDENTITY):对应自增字段

@Column(name="parent_id"):把剩下的属性一一与表中字段对应

 

解决第二个问题

SSM(SPRING+SPRINGMVC+MYBATIS)

MYBATIS

资料位置:课前资料--基础框架--配置文件--managewebresources--mybatis

 

查看一下当中的配置信息

<settings>

<!-- 开启驼峰自动映射 -->驼峰映射规则就是代替

JPAColumn注解的使用,这就是为什么column可以

省略

<setting name="mapUnderscoreToCamelCase" value="true" />

<!-- 二级缓存的总开关 -->后期缓存有第三方技术redis

代替数据库二级缓存

<setting name="cacheEnabled" value="false" />

</settings>

 

<plugins>

<!-- 分页插件:com.github.pagehelper为PageHelper类所在包名 -->//讲分页时候再说

<plugin interceptor="com.github.pagehelper.PageHelper">

<!-- 方言 -->

<property name="dialect" value="mysql" />

<!-- 该参数默认为false -->

<!-- 设置为true时,使用RowBounds分页会进行count查询,查询数据总条数 -->

<property name="rowBoundsWithCount" value="true" />

</plugin>

 

<!-- 通用Mapper插件 -->//基于拦截器来实现,就是在查询时拦截查询语句,将sql进行整理拼接等操作

<plugin interceptor="com.github.abel533.mapperhelper.MapperInterceptor">

<!--主键自增回写方法,默认值MYSQL,详细说明请看文档 -->

<property name="IDENTITY" value="MYSQL" />

<!--通用Mapper接口,多个通用接口用逗号隔开 -->

<property name="mappers"

//包名与sysmapper不一致,需要修改

value="com.jt.common.mapper.SysMapper" />

</plugin>

</plugins>

 

Spring配置文件

资料位置:课前资料--基础框架--配置文件--resources-spring

applicationContext.xml

 

将文件拷贝到对应的目录中

查看当前的文件内容

<!-- 使用spring自带的占位符替换功能,可以实现注解方式获取属性文件中的配置值 -->

//写代码过程中如果有字符串出现,为了解耦进行属性替换

//Property,this.getclass.getclassloader.getresource.getpath

//最后调用prop.getProperty进行解耦

<bean

class="com.jt.common.spring.exetend.ExtendedPropertyPlaceholderConfigurer">

<!-- 允许JVM参数覆盖 -->//不同jvm实力的参数覆盖;

<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />

<!-- 忽略没有找到的资源文件 -->

<property name="ignoreResourceNotFound" value="true" />

<!-- 配置资源文件 -->

<property name="locations">

<list>

<value>classpath:jdbc.properties</value>

<value>classpath:env.properties</value>

//以下三个配置文件可以删除,暂时用不到

<value>classpath:redis.properties</value>

<value>classpath:httpclient.properties</value>

<value>classpath:rabbitmq.properties</value>

</list>

</property>

</bean>

 

<!-- 扫描包 -->

<context:component-scan base-package="com.jt" />

 

<!-- 配置连接池 -->

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">

<!-- 数据库驱动 -->

<property name="driverClass" value="${jdbc.driver}" />

<!-- 相应驱动的jdbcUrl -->

<property name="jdbcUrl" value="${jdbc.url}" />

<!-- 数据库的用户名 -->

<property name="username" value="${jdbc.username}" />

<!-- 数据库的密码 -->

<property name="password" value="${jdbc.password}" />

<!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->

<property name="idleConnectionTestPeriod" value="60" />

<!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->

<property name="idleMaxAge" value="30" />

<!-- 每个分区最大的连接数 -->

<property name="maxConnectionsPerPartition" value="150" />

<!-- 每个分区最小的连接数 -->

<property name="minConnectionsPerPartition" value="5" />

</bean>

 

需要将jdbc.properties和env.properties导入

资料位置:课前资料--基础框架--resources中找到

配置文件,copy到工程中的resources下

 

 

spring的实务管理文件

applicationContext-transaction.xml

资料位置:课前资料--基础框架--resources,copy到工程的spring文件夹下

 

查看内容

<bean id="transactionManager"

class="org.springframework.jdbc.datasource.DataSourceTransactionManager">//必须和applciationContext中的连接池配置id一致

<property name="dataSource" ref="dataSource" />

</bean>

 

<!-- 定义事务策略 -->

<tx:advice id="txAdvice" transaction-manager="transactionManager">

<tx:attributes>

<!--定义查询方法都是只读的 -->

<tx:method name="query*" read-only="true" />

<tx:method name="find*" read-only="true" />

<tx:method name="get*" read-only="true" />

<!-- 主库执行操作,事务传播行为定义为默认行为 -->

<tx:method name="save*" propagation="REQUIRED" />

<tx:method name="update*" propagation="REQUIRED" />

<tx:method name="delete*" propagation="REQUIRED" />

<!--其他方法使用默认事务策略 -->//

增删改查 insert--sava,delete,update

注意在service业务层的方法名称,新增不能使用insert

<tx:method name="*" />

</tx:attributes>

</tx:advice>

 

<aop:config>

<!-- 定义切面,所有的service的所有方法 -->

<aop:pointcut id="txPointcut" expression="execution(* com.jt.manage.service.*.*(..))" />

<!-- 应用事务策略到Service切面 -->

<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointcut"/>//扫描的包名称要根据不同的工程修改

</aop:config>

 

applicationContext-mybatis.xml与mybatis整合文件

copy到spring目录下

查看内容

<!-- 构造SqlSessionFactory -->

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">

<!-- 定义数据源 -->

<property name="dataSource" ref="dataSource"/>

<!-- mybatis-config.xml -->

<property name="configLocation" value="classpath:mybatis/mybatis-config.xml"/>

<!-- 别名包 -->

//省略返回值的全路径名称

<property name="typeAliasesPackage" value="com.jt.manage.pojo"/>

<!-- mapper.xml -->

//扫描mapper的xml文件

<property name="mapperLocations" value="classpath:mybatis/mappers/*.xml"/>

</bean>

 

<!-- 定义Mapper接口扫描器 -->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<!-- 扫描mapper包 -->

<property name="basePackage" value="com.jt.manage.mapper"/>

</bean>

 

springmvc的框架配置文件

<!-- MVC注解驱动 -->

<mvc:annotation-driven/>

 

<!-- 配置扫描器,使得@Controller注解生效 -->

<context:component-scan base-package="com.jt.manage.controller" />

 

<!-- 定义视图解析器 -->

//返回index,最终根据试图解析器访问的具体资源

/WEB-INF/views/index.jsp

<!-- prefix="/WEB-INF/jsp/", suffix=".jsp", viewname="test" -> "/WEB-INF/jsp/test.jsp" -->

<bean

class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<!-- 前缀 -->

<property name="prefix" value="/WEB-INF/views/" />

<!-- 后缀 -->

<property name="suffix" value=".jsp" />

</bean>

 

<!-- 处理静态资源被“/”所拦截的问题 -->

//拦截器配置标签,manage暂时用不到

<mvc:default-servlet-handler />

 

<!-- 定义文件上传解析器 -->

//新增商品时的图片上传类

<bean id="multipartResolver"

class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<!-- 设定默认编码 -->

<property name="defaultEncoding" value="UTF-8"></property>

<!-- 设定文件上传的最大值10MB,10*1024*1024 -->

<property name="maxUploadSize" value="10485760"></property>

</bean>

 

三大框架整合完毕

启动maven工程需要

解决第三个问题

解决tomcat插件问题

manage工程的pom文件里引入tomcat的插件文本

 

配置configuration的运行或者debug

 

添加其他所有工程文件到source中

 

代码修改之后,需要将manage工程重新发布

 

解决第四个问题

资料位置:课前资料--基础框架--静态资源--后台系统

将所有资料copy到manage工程的src下的main下webapp中,覆盖所有

 

 

另外如果想打印启动的日志详情,可以在工程文件中的src--main--resources添加日志properties

 

重新发布,执行maven工程,在浏览器中输入访问地址,查看返回数据

利用responseBody注解将返回对象转化成json字符串

从前台浏览器查看到一片字符串,是否是json,可以调用json查看软件

 

 

后台的页面访问

2018112

15:43

动态页面跳转分析

后台页面包括首页,新增商品,修改商品的页面;

想做页面的访问工作,就是利用springmvc做视图的跳转拼接

访问index.jsp 实际资源位置/WEB-INF/views/index.jsp

访问item-add.jsp; 实际资源位置/WEB-INF/views/item-add.jsp

 

页面跳转的逻辑

做一个controller

做一个方法负责跳转到index

返回值String “index”;

 

做另外一个方法负责跳转到item-add

返回值String “item-add”;

 

以上的习惯性的方法有缺陷,页面越多,代码越多,但是逻辑都一样

所以需要一种方法能够动态的跳转页面

获取不同的参数来判断跳转页面,

http://localhost:8081/page/index 访问首页

http://localhost:8081/page/item-add 访问新增商品页面

以上两个请求地址,有相似路径page之前的都一直,只有最后的一个拼接不一样,可以作为参数传递给controller,只要把参数作为返回值,就可以形成动态的访问效果

 

这个参数要怎么传递,怎么接受呢?

RestFul的传参引入过来

springmvc对restful支持,可以按照参数的逻辑进行接受,传递给controller 需要调用注解

@PathVariable

 

代码的编写逻辑

只需要一个controller

一个方法

 

 

 

 

 

 

当天问题

2018112

9:48

 

在导入pom文件内容时,如果出现问题,在problem中查看对应的报错内容,根据报错提示解决

有可能在problem中看到update project的提示

可以在show view中把problem选出来

 

 

 

 

这个问题是因为eclipse插件与maven的兼容

 

在创建完common并且继承了parent之后,还是有错误提示

需要你删除override注解

原因complier版本不一样

 

骨架问题

artifact missing

artifact相关问题,查看maven库是否修改;

找对提示的artifact删除,联网重新下载

 

在展示商品分类所有数据中出现如下异常

org.springframework.beans.factory.CannotLoadBeanClassException: Error loading class [com.jt.manage.service.ItemCatService] for bean with name 'itemCatService' defined in file [C:\developertools\eclipsenew\workspace\jt-manage\target\classes\com\jt\manage\service\ItemCatService.class]: problem with class file or dependent class; nested exception is java.lang.NoClassDefFoundError: com/jt/common/service/BaseService

 

根据提示,BaseService无法加载,原因是common添加了BaseService后没有

重新发布,加载失败,需要重新发布common工程

 

访问路径http://localhost:8081/item/cat

 

无法访问,但是根据断点测试发现,可以进入controller并且查询到的list正确,但是springmvc却自动拼接前缀后缀,导致响应无效

 

原因在于不处理的controller返回值,都会经过一个Spring**Converter

对所有的默认返回都拼接试图解析器的前后缀

自定义返回值时使用其他的converter

解决:在controller对应的方法中利用注解来完成

@ResponseBody

 



http://chatgpt.dhexx.cn/article/6MPJFbek.shtml

相关文章

JWT --- 入门学习

不知道为什么,不用springboot test测试或者启动类启动,会报这个错误,找不到类路径 1.常见的认证机制 basic auth &#xff1a; 每次请求都会携带用户的username&#xff0c;password&#xff0c;易被黑客拦截。 Cookie auth : 我们请求服务器&#xff0c;创建一个session对象,…

Jetty

本文介绍一个使用Jetty开发的Web的小例子。 Jetty是一个开源的servlet容器&#xff0c;它为基于Java的web容器&#xff08;例如JSP和servlet&#xff09;提供运行环境。可以把它理解为和Tomcat一样&#xff0c;不过Jetty更小更轻量级。如果想更深入学习Jetty推荐看&#xff1a…

JWT入门详解

目录 一、JWT简介 1.什么是JWT&#xff1f; 2.为什么要使用JWT&#xff1f; 二、JWT的工作原理 三、JWT的组成 1.Header&#xff08;头部&#xff09; 2.Payload(载荷) Reserved claims(保留) Public claims&#xff08;公有&#xff09; Private claims(私有) 3.s…

Ubuntu系统搭建后端Websocket服务器--基于Apache Tomcat

目录 一、概述二、基本安装2.1 Java安装2.2 Apache Tomcat安装2.3 Eclipse EE安装 三、正式部署3.1 创建一个简单java web项目3.2 服务端部署3.3 运行3.4 局域网连接Websocket 一、概述 本文针对Ubuntu系统&#xff08;Win10下的虚拟机&#xff09;进行详述&#xff0c;本文测…

部署Nginx+Tomcat+Php-fpm+mariadb主主

要求 1、前端1台Nginx&#xff0c;均衡后端2台php-fpm&#xff0c;均衡后端2台Tomcat&#xff0c;2台MYSQL采用主主架构&#xff0c;用户通过域名访问前端Nginx 域名v1.jd.com v2.jd.com访问到Discuz和Jforum不同的网站。 2、将第一道题目的部署步骤和架构图画出来。架构图上要…

【JavaWeb】WEB开发概述以及Tomcat

&#x1f50e;这里是【JavaWeb】&#xff0c;关注我学习JavaWeb不迷路 &#x1f44d;如果对你有帮助&#xff0c;给博主一个免费的点赞以示鼓励 欢迎各位&#x1f50e;点赞&#x1f44d;评论收藏⭐️ &#x1f440;专栏介绍 【JavaWeb】 目前主要更新JavaWeb&#xff0c;一起…

tomcat环境搭和管理及实现jsp通过tomcat连接mysql

25.1 什么是Tomcat 官方网站&#xff1a;http:#tomcat.apache.org/ Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持…

Tomcat的Https设置及Http自动跳转Https (Linux环境下)

1.场景还原 近期项目中要对信息传输过程中进行安全加密&#xff0c;那么第一时间浮现笔者脑海的当然是https,接下来笔者将介绍如何在web服务器Tomcat中配置Https及Http自动跳转Https 2.Https相关介绍 Https是由NetScape公司设计的一个基于Http的加密传输协议&#xff0c;可以这…

六、Tomcat集群

TOMCAT集群 目录 TOMCAT集群 1 1 集群 1 1.1 什么是集群 1 1.2 集群的特性 1 1.3 集群的分类 1 1.4 TOMCAT集群配置的优缺点 2 1.5 APACHETOMCAT 2 1.6 环境说明 2 2 软件安装 3 2.1 安装说明 3 2.2 JDK安装 3 2.3 APACHE安装 4 2.4 TOMCAT安装 4 3 集群配置 6 3.1 APACHEMOD_J…

Mycat环境搭建和管理及实现jsp通过tomcat连接mysql

一、什么是tomcat 官方网站&#xff1a;http://tomcat.apache.org/ Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持…

Liunx下Tomcat中配置SSL协议(http转https)+域名配置SSL证书

问题描述 为什么http转https?什么情况下需要用到http转https?https优点!!!https缺点!!!废话不多说了上代码,阿里的产品为例(tomcat配置ssl). 准备材料:获取到证书点击上图的帮助可查看自带的配置文档个人感觉挺详细的 配置域名SSL证书对应上图进行选择配置就ok 接下来我们就配…

Tomcat通过自带的Cluster方式实现Session会话共享

一般来说,在多个tomcat集群业务中,session会话共享是必须的需求,不然前端nginx转发过来的请求不知道之前请求在哪台tomcat节点上&#xff0c;从而就找不到session以至于最终导致请求失败。要实现tomcat session共享有多种方案,今天介绍下使用tomcat自带的cluster方式&#xff0…

redhat 7.9 部署war包(二)之 环境安装 jdk,tomcat等

tomcat服务器环境搭建 redhat 7.9系统中搭建tomcat8.5.88服务器端在redhat中安装tomcat8一.传输文件到虚拟机中二.设置系统环境变量 JAVA_HOME三.启动tomcat8 部署war包 redhat 7.9系统中搭建tomcat8.5.88服务器端 本篇文章介绍&#xff0c;如何在redhat7.9环境下安装java web…

tomcat看源码

一.环境搭建 1.官网下载tomcat9 2.idea打开 新建pom文件 <!-- pom.xml --> <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-inst…

centos 6.2 mysql和tomcat的配置_基于CentOS 6.8平台的Tomcat+MySQL+JDK环境搭建

部署环境 Server&#xff1a;CentOS 6.8 x86_64 Tomcat&#xff1a;9.0.0.M9 MySQL&#xff1a;5.7.14 JDK&#xff1a;8u102 部署准备 使用浏览器访问Apache Tomcat官网 http://tomcat.apache.org/ 下载目前最新9版本 9.0.0.M9版本tar.gz安装包 下载Apache Commons Daemon&…

Windows下配置Tomcat集群

为什么要用Tomcat集群 可以提高整体web服务器性能&#xff0c;将动态页面交给tomcat处理&#xff0c;将静态文件交给apache处理&#xff0c;可以大大提高服务器的静态文件处理性能。 可以实现web服务器的负载均衡&#xff0c;服务器可采用集群的方式来响应客户端请求。Apache的…

tomcat连接mysql及JDBC详解

一、Tomcat简介 1、Tomcat简介 Tomcat 是 Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的 Jakarta 项目中的一个核心项目&#xff0c;由 Apache、Sun 和其他一些公司及个人共同开发而成。由于有了 Sun 的参与和支持&#xff0c;最新的 Servlet 和JS…

tomcat配置url跳转_web和tomcat的区别

在Web2.0的浪潮中&#xff0c;各种页面技术和框架不断涌现&#xff0c;为服务器端的基础架构提出了更高的稳定性和可扩展性的要求。近年来&#xff0c;作为开源中间件的全球领导者&#xff0c;JBoss在J2EE应用服务器领域已成为发展最为迅速的应用服务器。在市场占有率和服务满意…

Windows下安装配置Tomcat

Windows下安装配置Tomcat 下载 到官网下载目标Tomcat版本&#xff1a;https://tomcat.apache.org/ 下载完成后&#xff0c;进入目标目录下 解压到安装目录 配置 配置环境变量&#xff1a; 变量名为&#xff1a;CATALINA_HOME 变量值为&#xff1a;D:\software\tapache-t…

Linux系统安装配置tomcat详细教程

准备工作 在Xshell控制台依次安装&#xff1a; Linux服务器和window互传文件工具 yum install lrzsz解压命令 yum install unzip安装jdk1.8 yum install -y java-1.8.0-openjdk-devel.x86_64安装 下载tomcat的压缩文件&#xff0c;我以apache-tomcat-8.5.87.zip为例。 将…