web应用开发竞赛

一、插件介绍

1.dataTable插件

简述
DataTables 是一款 jQuery 表格插件。它是一个高度灵活的工具,可以将任何HTML表格添加高级的交互功能。带有分页功能搜索功能 可提高做题速度也是比赛提供的一个插件,其他页面就行复制在做修改。

引入
<!-- DataTables -->
<link rel="stylesheet" href="/static/css/dataTables.bootstrap.min.css">
<!-- DataTables -->
<script src="/static/js/jquery.dataTables.min.js"></script>
<script src="/static/js/dataTables.bootstrap.min.js"></script>

DataTables的一些基础属性配置
$(document).ready(function() {
    
    
$('#example').dataTable( {
    
    
"oLanguage": {
    
    
"sLengthMenu": "每页显示 _MENU_ 条记录",
"sZeroRecords": "抱歉, 没有找到",
"sInfo": "从 _START_ 到 _END_ /共 _TOTAL_ 条数据",
"sInfoEmpty": "没有数据",
"sInfoFiltered": "(从 _MAX_ 条数据中检索)",
"oPaginate": {
    
    
"sFirst": "首页",
"sPrevious": "前一页",
"sNext": "后一页",
"sLast": "尾页"
},
"sZeroRecords": "没有检索到数据",
"sProcessing": "<img src='./loading.gif' />"
}
} );
} );
 var oTable;
    var header = $("meta[name='_csrf_header']").attr("content");
    var token = $("meta[name='_csrf']").attr("content");
    var contextPath = '${pageContext.request.contextPath}';
    //显示所有表格
    $(function() {
    
    
        $('.date').datepicker();
        $(document).ajaxSend(function(e, xhr, options) {
    
    
            xhr.setRequestHeader(header, token);
        });
        productCategoryListData();
    });

function productCategoryListData() {
    
    
        if (typeof oTable == 'undefined') {
    
    
            // dataTable load
            oTable = $('#productCategoryList')
                .dataTable(
                    {
    
    
                        'bPaginate' : true, // 翻页功能
                        'sServerMethod' : 'POST', // 提交方式
                        'bServerSide' : true,
                        'bProcessing' : true,
                        'bFilter' : false,
                        "bSort" : false,
                        'sAjaxSource' : contextPath + '/admin/product' +
                            'CategorynfoDataTable',//后端请求接口,返回数据是对象不是数组
                        "fnServerParams" : function(aoData) {
    
     // 查询条件
                            aoData.push({
    
    
                                "name" : "name",
                                "value" : $('[name=name]').val().trim()
                            },{
    
    
                                "name" : "description",
                                "value" : $('[name=description]').val().trim()
                            });
                            //列的定义
                        },aoColumns : [{
    
    
                            'mData' : 'id',
                            'sTitle' : '<input type="checkbox" id="checkedAll" name="checkedAll" οnclick="checkedAll()">',
                            'sWidth' : '2%',
                            'mRender' : function(data){
    
    
                                var sRendor = '<input type="checkbox" name="ids" value="'+ data +'">';
                                return sRendor;
                            }
                        },{
    
    
                            'sTitle' : '幻灯片',
                            'sWidth' : '30%',
                            'mData' : 'name'
                        },{
    
    
                            'sTitle' : '描述',
                            'sWidth' : '35%',
                            'mData' : 'description'
                        },{
    
    
                            'sTitle' : '缩略图',
                            'sWidth' : '10%',
                            'mData' :  function(data,
                                                type, full) {
    
    
                                var returnValue = '<img src="${pageContext.request.contextPath}'+data+'" style="width:300px;height:150px">';
                                return returnValue;
                            }
                        },{
    
    
                            'sTitle' : '更新者',
                            'sWidth' : '10%',
                            'mData' : 'updateUserName'
                        },{
    
    
                            'sTitle' : '操作',
                            'mData' : 'id',
                            'sWidth' : '9%',
                            'mRender' : function(data) {
    
    
                                var returnValue = '<button id="update" class="btn btn-default btn-sm" οnclick="editProductCategory('+data+')"><i class="fa fa-pencil"></i>编辑</button>&nbsp&nbsp'
                                    + '<button id="update" class="btn btn-default btn-sm" οnclick="delProductCategory('+data+')"><i class="fa fa-pencil"></i>删除</button>';
                                return returnValue;
                            }
                        }]
                    });
        } else {
    
    
            var oSettings = oTable.fnSettings();
            oSettings._iDisplayLength = parseInt($(
                '[name=productCategoryList_length] option:selected').val());
            $('.dataTables_length select').val(
                $('[name=productCategoryList_length] option:selected').val());
            oSettings._iDisplayStart = 0;
            oTable.fnDraw();
        }
    }

在这里插入图片描述

2.ueditor富文本编辑器

使用
<div class="form-group col-lg-12">
	<label>内容</label>
		<script id="container" type="text/plain"></script>
			<!-- 配置文件 -->
			<script type="text/javascript" src="${pageContext.request.contextPath}/resources/admin/js/ueditor/ueditor.config.js"></script>
			<!-- 编辑器源码文件 -->
			<script type="text/javascript" src="${pageContext.request.contextPath}/resources/admin/js/ueditor/ueditor.all.js"></script>
			<!-- 实例化编辑器 -->
			<script type="text/javascript">
		        var ue = UE.getEditor('container',{
    
    autoWidth: true});
		        console.log(ue)
		        ue.ready(function() {
    
    
		        	//将数据保存到本地
		        	 ue.setContent($("#content").val());
		        });
	   </script>
</div>
ueditor.config.js中做出如下配置:

在这里插入图片描述

实现上传图片的功能(上传附件、文件等同理)

大部分的需求,还是要上传图片或者附件的,甚至视频、其他文件,这里只以上传图片为例,第一是因为这个场景最常见,第二是因为其他的场景跟这个是一样的,只不过做不同的配置,让服务器端不同的处理方法去执行业务即可。

首先我们继续编写UEController.java,增加一个上传图片的处理方法:
/**
     * 上传图片
     * @param file 上传的图片
     * @param request 请求体
     * @return Map类型的响应结果
     */
    @ResponseBody
    @RequestMapping(value = "/images", method = RequestMethod.POST)
    public Map<String, Object> images(@RequestParam(value = "imageFile", required = false) MultipartFile file, HttpServletRequest request) {
    
    
        Map<String, Object> params = new HashMap<String, Object>();
        if (file == null) {
    
    
            System.out.println("文件为空,方法结束");
            return null;
        }
        try {
    
    
            //为了简便,这里上传到桌面上的static文件夹
            String basePath = "C:\\Users\\Administrator\\Desktop\\static";
            
            String ext = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1).toLowerCase();
            String fileName = String.valueOf(System.currentTimeMillis()).concat("_").concat(String.valueOf(Math.random() * 1000) + 1000).concat(".").concat(ext);
            StringBuilder sb = new StringBuilder();
            //拼接保存路径
            sb.append(basePath).append("\\").append(fileName);
 
            String visitUrl = "http://localhost/ue/upload/" + fileName;
            File f = new File(sb.toString());
            if (!f.exists()) {
    
    
                f.getParentFile().mkdirs();
            }
            OutputStream out = new FileOutputStream(f);
            FileCopyUtils.copy(file.getInputStream(), out);
            params.put("state", "SUCCESS");
            params.put("url", visitUrl);
            params.put("size", file.getSize());
            params.put("original", fileName);
            params.put("type", file.getContentType());
            params.put("filename", file.getOriginalFilename());
        } catch (Exception e) {
    
    
            params.put("state", "ERROR");
            e.printStackTrace();
        }
        return params;
    }

ueditor.config.js,做出如下配置:
注意:这里有坑,网上有说直接配置在config.json的,有说两个都要配置的,但博主亲测之后,发现只需要在ueditor.config.js配置即可,config.json可以说压根儿就没什么卵用(当然不能删除),官方文档说是config.json的优先级较低,但是我ueditor.config.js不配置,应该读取config.json啊?实际上配置config.json并不会有效。

在这里插入图片描述

$(function(){
    
    
        //富文本编辑器
        UE.getEditor('editor');
 
        UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
        UE.Editor.prototype.getActionUrl = function(action){
    
    
            if(action == 'action-image'){
    
    
                return 'http://localhost/ueditor/images';
            }else{
    
    
                return this._bkGetActionUrl.call(this,action);
            }
        }
    });

我们的文件夹写在了tomcat服务器外部,这也是我们经常做的做法,否则服务器目录会愈发臃肿,所以我们需要做一下虚拟路径的映射,在tomcat的server.xml中配置:

在这里插入图片描述

保存到数据库
function saveArticle(){
    
    
	var saveVo={
    
    };
		saveVo.title=$("#title").val();
		saveVo.category=$("#categoryId").val();
		saveVo.content=ue.getContent();
		$.ajax({
    
    
	        type: "POST",
	        url: "${pageContext.request.contextPath}/"+ur,
	        data: JSON.stringify(saveVo),
	        contentType:"application/json;charset=utf-8",
	        dataType: "json",
	        success: function(data){
    
    
	        	showcommon(data);
	                 }
	    });	
}

3.qrcode 二维码插件

第一步:vue-cli下载插件
cnpm install --save qrcodejs2
第二步:组件中引入插件
<template>
  <div>
    <div id="qrcode"></div> <!-- 创建一个div,并设置id为qrcode -->
  </div>
</template>
   
<script>
import QRCode from 'qrcodejs2'  // 引入qrcode
export default {
    
    
  name : 'test',
  mounted () {
    
    
    this.qrcode();
  },
  methods: {
    
    
    qrcode() {
    
    
      let qrcode = new QRCode('qrcode', {
    
    
        width: 132,  
        height: 132,
        text: 'https://127.0.0.1:id商品的id', // 二维码地址访问地址
      })
    },
  }
}
</script>

四、前端打包发布

1、对当前vue项目进行打包的命令如下:npm run build

在这里插入图片描述

2、打包完成,会输出Build complete并且在vue项目中会生成一个名字为dist的打包文件。如下图:

在这里插入图片描述
在这里插入图片描述

3、修改dist 文件夹为项目名称: 比赛规定名称(本例中xxx为vue_demotest),将 xxx(本例中xxx为vue_demotest) 拷贝到运行的 tomcat 的 webapps 目录下,如下图:

在这里插入图片描述

访问该地址即可(比赛规定了端口号和IP地址)http://localhost:8080/xxx(本例中xxx为vue_demotest)

在这里插入图片描述

五、IDE 项目打包

1.首先选中项目名称,再点点击右上角的Projiect Structure,或者使用快捷键Ctrl+Alt+Shift+S

在这里插入图片描述

2.选中Artifacts,再点击右上方的+按钮,选中JAR下拉菜单点第二栏

在这里插入图片描述

3,在弹出的窗口中填写你的项目,项目启动类,复制依赖包等

在这里插入图片描述

然后一路点击ok,返回代码编辑后,左边的项目目录会出现一个名为:META-INF的文件夹,里面的文件,就是你的项目依赖的第三方包的路径

在这里插入图片描述
5. 选中项目,点击菜单栏的Build,在下拉菜单中选择Build Artficts… 然后在打开的工具栏中选择Build,编译器会自动开打包
在这里插入图片描述
在这里插入图片描述

,编译完成后,可再项目目录中看到classes -> artifaces 下有一个以你的项目名开始的 XXX_jar,打开后里面会有很多的.jar文件,其中有个是你的项目名的jar,表明打包已经完成,接下就是去启动它。

在这里插入图片描述

7.我们打开电脑的文件管理,找到你的项目所在盘符和路径,如图

在这里插入图片描述

8. 打开cmd窗口,切换路径到你的项目文件路劲下,我的是在D:\Java\intelworkspace\Photographys\classes\artifacts\photographys_jar

在这里插入图片描述

9.路径切换成功后使用 java -jar 你的项目名.jar,即可运行,当出现以下输出字符时,恭喜你的项目通过jar方式启动成功了!!!!!!!

在这里插入图片描述

在application.yml设置端口和访问路径

在这里插入图片描述

在这里插入图片描述

IDE 打war包

打开Project Structure窗口,可以点击工具栏中间那个按钮,也可以直接快捷键Shift+Ctrl+Alt+S 然后依次点击图中的选项

在这里插入图片描述

点击下图红色箭头所指+图标,选择Directory Content,添加你的WebRoot目录,然后点击OK

在这里插入图片描述

在主界面选择Build – Build Artifacts,找到刚才需要打包的项目名点击build

在这里插入图片描述

将war改成题目要求的文件名,拷贝到运行的 tomcat 的 webapps重新启动tomcat即可

在这里插入图片描述

2。使用maven Springboot中IDE支持两种打包方式,即jar包和war包

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.windows下搭建git gitStack https://blog.csdn.net/weixin_47174945/article/details/121850668

4. Java学习路线图(内含大纲+视频)从基础到工程师的开发工程师的学习路线https://blog.csdn.net/weixin_47174945/article/details/121144042

猜你喜欢

转载自blog.csdn.net/weixin_47174945/article/details/121845342