第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】
淘淘商城(SpringMVC+Spring+Mybatis) 是传智播客在2015年9月份录制的,几年过去了。由于视频里课上老师敲的代码和项目笔记有些细节上存在出入,只有根据日志报错信息作出适当的调整变更才能跑通项目。为了方便广大自学Java同仁的共同进步,我将持续更新这个网络实战项目练习的内容,着重指出符合当下开发环境下的内容勘误修订。
https://pan.baidu.com/s/1bptYGAb#list/path=%2F&parentPath=%2Fsharelink389619878-229862621083040
第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第二天】
第04项目:淘淘商城(SpringMVC+Spring+Mybatis) 的学习实践总结【第三天】
03.第三天(实现商品添加)
//商品分类管理 @Service public class ItemCatServiceImpl implements ItemCatService { @Autowired private TbItemCatMapper itemCatMapper; @Override public List<EUTreeNode> getItemCatList(long parentId) { //使用mybatis的逆向工程生成的mapper接口和XML文件 //因为单表查询并且非主键字段,所以用example查询 //1.创建查询条件 TbItemCatExample example = new TbItemCatExample(); Criteria criteria = example.createCriteria(); criteria.andParentIdEqualTo(parentId); //2.根据条件查询 List<TbItemCat> list = itemCatMapper.selectByExample(example); List<EUTreeNode> resultList = new ArrayList<>(); //把列表转换成treeNodeist for (TbItemCat tbItemCat : list) { EUTreeNode node = new EUTreeNode(); node.setId(tbItemCat.getId()); node.setText(tbItemCat.getName()); node.setState(tbItemCat.getIsParent()?"closed":"open"); resultList.add(node); } //返回最终结果 return resultList; } }
/** * 商品分类管理controller * */ @Controller @RequestMapping("/item/cat") public class ItemCatController { @Autowired private ItemCatService itemCatService; @RequestMapping("/list") @ResponseBody //此行底下的private和public都可以,不影响功能实现 public List<EUTreeNode> getItemCatList(@RequestParam(value="id",defaultValue = "0")Long parentId){ List<EUTreeNode> list = itemCatService.getItemCatList(parentId); return list; } }
一、使用Eclipse的Search功能检索
二、使用Eclipse的快捷键插入get/set方法
三、教学视频和淘淘商城-day03教案中代码的方法名称不一致性
四、图片上传服务器的搭建
Windows10操作系统下安装并使用VMware-workstation-full-15.5.0加载安装CentOS7后检查是否已安装GCC、PCRE、Zlib等实现nginx的运行环境
yum install gcc-c++安装gcc编译器
大部分Linux发行版的默认账户是普通用户,而更改系统文件或者执行某些命令,需要root身份才能进行,这就需要从当前用户切换到root用户,Linux中切换用户的命令是su -
nginx的http模块使用pcre来解析正则表达式
yum install -y pcre pcre-devel
zlib库提供了很多种压缩和解压缩的方式,nginx使用zlib对http包的内容进行gzip
yum install -y zlib zlib-devel
nginx不仅支持http协议,还支持https(即在ssl协议上传输http),所以需要在linux安装openssl库。
yum install -y openssl openssl-devel
五、Linux系统下的基本操作与Nginx的安装配置
CentOS文件夹的新建可以借助GUI实现,nginx-1.16.1.tar的解压也可以用图形化界面操作完成。
把nginx-1.16.1.tar.gz复制到Downloads目录下,解压该压缩文件到默认目录,点击Extract执行。
注意:下边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录
cd /var mkdir temp cd /var/temp mkdir nginx
参考技术博客: Linux系统下文件夹的新建与删除操作
选中nginx-1.16.1文件夹,右键单击在弹出菜单上选择open in Terminal
cd /home/kangmianfeng/Downloads/nginx-1.16.1
在命令行里复制下面的默认配置信息按Enter执行。
./configure \ --prefix=/usr/local/nginx \ --pid-path=/var/run/nginx/nginx.pid \ --lock-path=/var/lock/nginx.lock \ --error-log-path=/var/log/nginx/error.log \ --http-log-path=/var/log/nginx/access.log \ --with-http_gzip_static_module \ --http-client-body-temp-path=/var/temp/nginx/client \ --http-proxy-temp-path=/var/temp/nginx/proxy \ --http-fastcgi-temp-path=/var/temp/nginx/fastcgi \ --http-uwsgi-temp-path=/var/temp/nginx/uwsgi \ --http-scgi-temp-path=/var/temp/nginx/scgi编译安装
make install安装成功查看安装目录 :
cd /var/temp/nginx
ls
SecureCRT用来在Windows环境下远程登录Linux服务器的SSH连接配置
nginx安装成功,启动nginx,即可访问虚拟机上的nginx:
本教程中的Nginx安装位置
cd /usr/local/nginx/sbin/
./nginx
VMware运行CentOS重启虚拟机后,启动Nginx报错"/var/run/nginx/nginx.pid" failed (2: No such file or directory)解决方法
六、 vsftpd服务在CentOS 7中的安装、配置、使用
在VMware14虚拟机的CentOS 7系统中,安装与配置vsftpd【Linux安装ftp组件】
FileZilla Client 成功的连接到Linux主机的vsftpd服务如图所示:
七 、SELinux 全称是Security Enhanced Linux,关掉SELinux,并重启系统让其生效。
修改/etc/selinux/config配置文件,设置SELINUX=disabled
如果不想重启系统,使用命令:setenforce 0
八、 关闭CentOS 7的默认防火墙或者切换到iptables防火墙
先进行Linux防火墙设置
CentOS7默认使用的是firewall作为防火墙,这里改为iptables防火墙
1、关闭firewall:
systemctl stop firewalld.service #停止firewall
systemctl disable firewalld.service #禁止firewall开机启动
2、安装iptables防火墙
yum install iptables-services #安装
3、修改文件配置允许80端口
vi /etc/sysconfig/iptables #编辑防火墙配置文件
按i进入文本编辑 在原文档中找到
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
在该行下面添加
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
:wq! #保存退出
systemctl restart iptables.service #最后重启防火墙使配置生效
systemctl enable iptables.service #设置防火墙开机启动
九、PictureServiceImpl 的视频和笔记代码变量名不一致的bug
1 // /taotao-common/src/main/java/com/taotao/common/pojo/PictureResult.java 2 3 /** 4 * 上传图片的返回结果pojo 5 */ 6 7 public class PictureResult { 8 9 private int error; 10 private String url; 11 private String message; 12 13 private PictureResult(int error, String url, String message) { 14 this.error = error; 15 this.url = url; 16 this.message = message; 17 } 18 19 //成功时调用的方法 20 public static PictureResult ok(String url) { 21 return new PictureResult(0, url, null); 22 } 23 //失败时调用的方法 24 public static PictureResult error(String message) { 25 return new PictureResult(1, null, message); 26 } 27 28 public int getError() { 29 return error; 30 } 31 public void setError(int error) { 32 this.error = error; 33 } 34 public String getUrl() { 35 return url; 36 } 37 public void setUrl(String url) { 38 this.url = url; 39 } 40 public String getMessage() { 41 return message; 42 } 43 public void setMessage(String message) { 44 this.message = message; 45 } 46 47 48 }1 // /taotao-manager-service/src/main/java/com/taotao/service/impl/PictureServiceImpl.java 2 3 @Service 4 public class PictureServiceImpl implements PictureService { 5 6 @Value("${FTP_ADDRESS}") 7 private String FTP_ADDRESS; 8 @Value("${FTP_PORT}") 9 private Integer FTP_PORT; 10 @Value("${FTP_USER_NAME}") 11 private String FTP_USER_NAME; 12 @Value("${FTP_PASSWORD}") 13 private String FTP_PASSWORD; 14 @Value("${FTP_BASE_PATH}") 15 private String FTP_BASE_PATH; 16 @Value("${IMAGE_BASE_URL}") 17 private String IMAGE_BASE_URL; 18 19 20 21 @Override 22 public PictureResult uploadPicture(MultipartFile uploadFile) { 23 24 //判断上传图片是否为空 25 if (null == uploadFile || uploadFile.isEmpty()) { 26 return PictureResult.error("上传图片为空"); 27 } 28 29 //取文件扩展名 30 String originalFilename = uploadFile.getOriginalFilename(); 31 String ext = originalFilename.substring(originalFilename.lastIndexOf(".")); 32 33 //生成新文件名可以是时间+随机数生成 34 //取原始文件名 35 String oldName = uploadFile.getOriginalFilename(); 36 //生成新文件名 37 String newName = IDUtils.genImageName(); 38 newName = newName + oldName.substring(oldName.lastIndexOf(".")); 39 //图片上传到FTP服务器 40 //文件在服务器的存放路径,应该使用日期分隔的目录结构 41 DateTime dateTime = new DateTime(); 42 String filePath = dateTime.toString("/yyyy/MM/dd"); 43 44 45 try { 46 47 FtpUtil.uploadFile(FTP_ADDRESS, FTP_PORT, FTP_USER_NAME, FTP_PASSWORD, FTP_BASE_PATH, filePath,newName, uploadFile.getInputStream()); 48 } catch (Exception e) { 49 e.printStackTrace(); 50 51 52 } 53 54 //返回结果,生成一个可以访问到图片的url返回 55 return PictureResult.ok (IMAGE_BASE_URL+ filePath +"/"+ newName); 56 57 } 58 59 60 }end
================================================
参考资料:
end
原文地址:https://www.cnblogs.com/MarlonKang/p/11372961.html
- OpenCV3.2集成Android Studio2.2开发配置
- laravel中使用gulp打包发布前端部分
- Spring的编程式事务和声明式事务
- Java过滤器Filter的使用详解
- 基于积分图的二值图像膨胀算法实现
- Java监听器Listener的使用详解
- 图像各向异性滤波
- Python爬虫实战-抓取《盗墓笔记》所有章节及链接
- JSP 和 Servlet 的工作原理和生命周期
- Python OpenCV像素操作
- 别人在抢红包,而程序员在研究微信红包的算法实现
- C++模板类与Qt信号槽混用
- Python3.6+OpenCV3.3开发环境搭建
- 谷歌开源的大数据处理项目 Apache Beam
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则
- 用CSS实现各种特殊效果
- 二分查找算法
- 一分钟学Python| Python的运算符 (上)
- JS开发必须知道的41个技巧【持续更新】
- PermissionX重磅更新,支持自定义权限提醒对话框
- 给Swagger换了个新皮肤,瞬间高大上了!
- 学习 | egg.js 中间件和插件
- Django template层之json报文遍历总结
- 015.Nginx重定向
- 明了 | MongoDB 外键的基本使用
- 优雅 | koa处理异常
- iOS开发之Context Menus
- 快速解释如何使用pandas的inplace参数
- bam格式转bigWig