第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.第三天(实现商品添加)

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第1张图片

 

//商品分类管理

@Service
public class ItemCatServiceImpl implements ItemCatService {
    
    @Autowired
    private TbItemCatMapper itemCatMapper;
    @Override
    public List getItemCatList(long parentId) {
        //使用mybatis的逆向工程生成的mapper接口和XML文件
        //因为单表查询并且非主键字段,所以用example查询
        //1.创建查询条件
        TbItemCatExample example = new TbItemCatExample();
        Criteria criteria = example.createCriteria();
        criteria.andParentIdEqualTo(parentId);
        //2.根据条件查询
        List list = itemCatMapper.selectByExample(example);
        
        
        List 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 getItemCatList(@RequestParam(value="id",defaultValue = "0")Long parentId){
        List list = itemCatService.getItemCatList(parentId);
        return list;
    }
    
}

 一、使用Eclipse的Search功能检索

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第2张图片

 

 

 二、使用Eclipse的快捷键插入get/set方法

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第3张图片

 

 三、教学视频和淘淘商城-day03教案中代码的方法名称不一致性

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第4张图片

 

     四、图片上传服务器的搭建

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第5张图片

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第6张图片

 

      

 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的安装配置

文件夹的新建可以用GUI实现,nginx-1.16.1.tar的解压可以命令行也可以用图形化界面操作完成。

tar -zxvf nginx-1.16.1.tar.gz
cd nginx-1.16.1

把nginx-1.16.1.tar.gz复制到Downloads目录下,解压该压缩文件到默认的当前目录,点击Extract执行。

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第7张图片

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第8张图片

注意:下边将临时文件目录指定为/var/temp/nginx,需要在/var下创建temp及nginx目录

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第9张图片

cd /var
mkdir temp
cd /var/temp
mkdir nginx

参考技术博客: Linux系统下文件夹的新建与删除操作

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第10张图片

选中nginx-1.16.1文件夹,右键单击在弹出菜单上选择open in Terminal

su - 

cd /home/kangmianfeng/Downloads/nginx-1.16.1

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第11张图片

 在命令行里复制下面的nginx安装默认配置信息如下:

./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
make  install

安装成功查看安装目录 :

cd /usr/local/nginx

ls

 
  

 

 

 SecureCRT用来在Windows环境下远程登录Linux服务器的SSH连接配置

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第12张图片

 

 nginx安装成功,启动nginx,即可访问虚拟机上的nginx:

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第13张图片

本教程中的nginx安装位置

cd /usr/local/nginx/sbin/

  ./nginx

VMware运行CentOS重启虚拟机后,启动Nginx报错"/var/run/nginx/nginx.pid" failed (2: No such file or directory)解决方法

 注意:执行./nginx启动nginx,这里可以-c指定加载的nginx配置文件,如下:

./nginx -c /usr/local/nginx/conf/nginx.conf

#复制一份默认的配置文件重新命名为:taotao-nginx.conf

cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/taotao-nginx.conf

#在taotao-nginx.conf定义图片HTTP服务器的反向代理路由规则,修改文件需要root权限

#chmod 777使得所有用户可以读写和执行该文件

chmod777 /usr/local/nginx/conf/taotao-nginx.conf

      location / {
            root   /home/ftpuser/www;
            index  index.html index.htm;
        }

文件夹的访问权限不够,所以用ip或者域名访问是访问不到的

用命令进入你的站点根目录

cd /home/ftpuser/www 

然后输入指令

chmod a+w .

四种解决Nginx出现403 forbidden 报错的方法

在访问的根目录下要有index.html否则会报403错误

六、 vsftpd服务在CentOS 7中的安装、配置、使用

在VMware14虚拟机的CentOS 7系统中,安装与配置vsftpd【Linux安装ftp组件】

FileZilla Client 成功的连接到Linux主机的vsftpd服务如图所示:

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第14张图片

 

 

 七 、SELinux 全称是Security Enhanced Linux,关掉SELinux,并重启系统让其生效。

 修改/etc/selinux/config配置文件,设置SELINUX=disabled

vim /etc/selinux/config

查看SELINUX状态的命令:

sestatus

 

 八、 关闭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 #设置防火墙开机启动

如果虚拟机连不上网可以依次输入下面的命令解决:

systemctl restart network

 

systemctl stop NetworkManager

systemctl disable NetworkManager

 

systemctl start network.service

 九、PictureServiceImpl 的视频和笔记代码变量名不一致的bug

第04项目:淘淘商城(SpringMvc+Spring+Mybatis) 的学习实践总结【第三天】_第15张图片

 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

================================================

参考资料:

CentOS7 Failed to start LSB: Bring up/down解决方法

end

你可能感兴趣的