首页 > 编程语言 >Java课程设计之——Web前端设计

Java课程设计之——Web前端设计

时间:2023-01-11 00:11:22浏览次数:60  
标签:Web 课程设计 Java search tail 搜索 input inputText Bootstrap5

0、团队课程设计

1、主要使用的技术

  • HTML/CSS
  • Bootstrap5
  • javascript/jQuery/jQuery-UI
  • JSP

2、前期调查与设计

搜索引擎主要分为两个界面,主界面和搜索结果界面

主界面

搜索主界面

从图看出,主界面的组成有

  • logo
  • 搜索框
  • 搜索按钮
  • 搜索提示

采用居中设计,在输入框的正上方

搜索框&搜索按钮

整体是一个表单,搜索框可使用Bootstrap5的form-control类,搜索按钮可采用Bootstrap5的按钮样式

表单以GET请求方式请求到搜索结果界面

搜索提示

内部使用js实现,通过发送AJAX请求给后台获取对应的推荐数据,在进行展示。到时候应用jQuery发送AJAX请求和jQuery-UI中的autocompletion插件即可

搜索结果界面

顶部

搜索结果界面

底部

image-20230110230825633

分析图中的元素构成

  • logo
  • 搜索框&搜索按钮
  • 搜索结果数量
  • 选择时间的工具
  • 一块搜索结果,包含
    • 标题
    • 文章内容
    • 结果链接
  • 分页导航栏

排版分析

logo&搜索框&搜索按钮

在Bootstrap5中,可以将他们放在一个container-fluid的容器中,通过Bootstrap5的网格系统,row&col来实现响应式网页

其中表单的组成为搜索框&搜索按钮,提交GET请求给自己让自己处理

搜素结果&选择时间的工具

他们也可以放在一个container中,通过Bootstrap5的网格系统来实现响应式网页。

在该项目的设计中,我将选择时间的工具简化成一个下拉菜单,通过选择相应的选项来实现按时间范围查找功能

如图所示:

时间选择

搜索结果

首先他们也在一个container中,然后将他们放进一个div,这个div中有a、div.content、a。将对应的样式设计好后,通过jsp循环输出即可

分页导航栏

分页导航栏是动态的,而且这种东西网上肯定有人写过了,果不其然,jqPaginator就能满足我们的需求,只需要简单的创建一个无序列表就能实现,样式的话我们可以采用Bootstrap5的样式,也算可以了

3、设计思路

项目目前采用的是Bootstrap5的框架,由于此次时间有限就采取默认风格,通过学习一些简单的Bootstrap5可以稍微跳过一些CSS的学习,而且更容易创建响应式界面。

基本思路:将元素的组合划分为一个个独立的container或container-fluid,在使用Bootstrap5的样式进行调整即可

4、代码实现

经过3的分析,可以知道大致需要index.html、search.jsp这两个主要文件,和一些处理前端数据的Servlet

index.html的form表单部分

<div class="container mb-5 mt-5">
    <form action="search.jsp" method="get">
        <div class="row">
            <div class="col-lg-3"></div>
            <div class="input-group mx-auto col">
                <label for="searchInput"></label>
                <input type="search"
                       id="searchInput"
                       class="form-control search-input"
                       placeholder="Enter content"
                       name="inputText">
                <button type="submit" class="btn btn-primary">搜索一下</button>
            </div>
            <div class="col-lg-3"></div>
        </div>
    </form>
</div>

form标签中,action为请求资源路径,method为请求方式;搜索按钮的类型一定要是submit才能提交表单

search.jsp的获取搜索结果部分

<%
    /**
     * 接受表单请求, 分页请求,日期选择请求,
     * 未来将封装至servlet 返回json,通过setAttribute
     */
    request.setCharacterEncoding("utf-8");
    String inputText = request.getParameter("inputText");
    String page1 = request.getParameter("page");
    String beginDate = request.getParameter("beginDate");
    String endDate = request.getParameter("endDate");

    // 给currentPage, beginDate, endDate初始值
    if(page1 == null) {
        page1 = "1";
    }
    int currentPage = Integer.parseInt(page1);

    // 去后台搜索结果
    Search search = new EsSearch();
    List<ResultEntry> searchResult = new ArrayList<>();
    if(inputText != null) {
        if(beginDate == null && endDate == null) {
            searchResult = search.search(inputText, currentPage);
        } else if (endDate == null) {
            searchResult = search.search(inputText, currentPage, beginDate);
        }
    }
    long searchCount = search.getSearchCount();

%>

这个没啥好说的,向后台的ES请求资源

search.jsp的搜索结果输出部分

<div class="container">
    <div class="result">
        <%
            for(ResultEntry resultEntry : searchResult) {
                out.println("<div class=\"col col-lg-7 mt-3\">");
                out.println("<a class=\"address\" href="+resultEntry.getUrl()+" target=\"_blank\">"+resultEntry.getTitle()+"</a>");
                // 获取content需要输出的区间
                int front = resultEntry.getText().indexOf("<span");
                int tail = resultEntry.getText().lastIndexOf("span>");
                front -= 10; tail += 25;
                if(front < 0) {
                    front = 0;
                }
                if(tail > resultEntry.getText().length() - 1) {
                    tail = resultEntry.getText().length() - 1;
                    do {
                        if(!"\"".equals(resultEntry.getText().charAt(tail))) {
                            tail++;
                            break;
                        }
                        tail--;
                    }while (tail > 0);
                }
                String content = resultEntry.getText().substring(front, tail);
                out.println("<div class=\"content\">"+content+"</div>");
                out.println("<a href="+resultEntry.getUrl()+" style=\"font-size: small; color: gray\">"+resultEntry.getUrl()+"</a>");
                out.println("</div>");
            }
        %>
    </div>
</div>

将搜索结果放进一个循环,输出对应的样式即可

其中对content的摘要后面可优化到Servlet里,前端就不会有这么复杂的逻辑处理

SearchSuggest.java获取搜索建议

@WebServlet("/SearchSuggest")
public class SearchSuggest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        request.setCharacterEncoding("utf-8");
        String input = request.getParameter("input");
        if(input != null) {
            Search search = new EsSearch();
            List<String> searchSuggest = search.getSearchSuggest(input);
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.println(JSON.toJSONString(searchSuggest));
            out.close();
            search.close();
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
        this.doGet(request, response);
    }
}

这个就是获取请求返回对应的JSON字符串,采用了alibaba的fastjson

my-js.js中的jQuery-UI的autocompletion插件的使用

//参考实例2——https://www.runoob.com/jqueryui/api-autocomplete.html#option-source
$(function () {
    $(".search-input").autocomplete({
        source: function( request, response ) {
            var input = $(".search-input").val();
            var source = "";
            $.ajax({
                type : "get",
                url : "SearchSuggest",
                datatype : "json",
                data: {"input": input},
                async : false,
                error : function() {
                    console.error("Load recommand data failed!");
                },
                success : function(data) {
                    source = data;
                }
            });
            response(JSON.parse(decodeURI(source)));
        }
    })
})

autocompletion的回调函数中,response就是响应autocompletion的source的数据

分页跳转功能

$("#my-pagination").jqPaginator({
    totalPages: <%=searchCount/10+1%>,
    visiblePages: 10,
    currentPage: <%=currentPage%>,
    first: '<li class="first page-item"><a class="page-link" href="javascript:;">首页</a></li>',
    prev: '<li class="prev page-item"><a class="page-link" href="javascript:;">上一页</a></li>',
    next: '<li class="next page-item"><a class="page-link" href="javascript:;">下一页</a></li>',
    last: '<li class="last page-item"><a class="page-link" href="javascript:;">末页</a></li>',
    page: '<li class="page page-item"><a class="page-link" href="javascript:;">{{page}}</a></li>',
    onPageChange: function (num, type) {
        $('#my-pagination-text').html('当前第' + num + '页');
        if("change" == type) { // 换页触发的
            let inputText = getQueryVariable("inputText");
            let beginDate = getQueryVariable("beginDate");
            // console.log("search.jsp?inputText="+inputText+"&page="+num);
            if(beginDate != "") {
                window.location.href = "search.jsp?inputText="+inputText+"&page="+num+"&beginDate="+beginDate;
            } else {
                window.location.href = "search.jsp?inputText="+inputText+"&page="+num;
            }
        }
    }
});

使用插件时注意引用Bootstrap5的样式,才可以达到自己的预期效果,还要注意回调函数的两个参数

5、参考链接

w3c-从无到有

菜鸟教程你值得拥有

jQuery

标签:Web,课程设计,Java,search,tail,搜索,input,inputText,Bootstrap5
From: https://www.cnblogs.com/lrui1/p/17042114.html

相关文章

  • Java中集合函数--ArrayList和HashMap
    ArrayList集合框架:ArrayList是一个数组队列,提供了相关的添加、删除、修改、遍历等功能先初始化对象:ArrayList<String>list=newArrayList<>();添加元素使用add()方法......
  • java企业人事管理系统企业工资考勤系统
    简介Java基于ssm开发的企业人事考勤工资系统,员工可以打卡、请假。系统根据员工的打卡情况自动计算工资(全勤、请假、旷工、加班、迟到、早退等计算出最终实发工资),员工还可......
  • Java线程诊断
    1.诊断CPU占用过高[root@master~]#nohupjava-jarJvmProject.jar&//有问题的java程序[1]1627[root@master~]#nohup:ignoringinputandappendingoutputto......
  • java:年号字串-------进制转换
    题目描述小明用字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,小明用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对应 28,AZ......
  • Java课程设计之——Elasticsearch篇
    0、团队项目博客1、主要使用的技术及开发工具Elasticsearch7.17.3RESTAPIElasticsearchjavaAPIClient7.17.3Kibana7.17.3Jackson2.12.32、Elasticsearch......
  • JavaScript学习笔记—运算符
    运算符(操作符):可以用来对一个或多个操作数(值)进行运算1.算术运算符:+加法运算符-减法运算符*乘法运算符/触发运算符**幂运算%模运算算术运算时,除了字符串的加......
  • buuctf-web方向--ssrf+sql+dirscan
    [网鼎杯2018]Fakebook首先,扫描该网站利用dirsearch进行扫描获取robot.txt,从中发现源码备份/user.php.bak下载后可读取源码<?phpclassUserInfo{public$name......
  • (一)Java基础语法
    一.基础写法/*使用命令行的方式执行的时候,cmd的默认编码是GBK所以在输入中文的时候需要设置文件的编码格式为ANSI这样不会出现乱码格式*/publicclassHelloWorld/*java文件......
  • JavaScript 错误 throw、try、catch
    JavaScript错误throw、try、catchtry:语句测试代码的错误;catch:语句处理错误;throw:语句创建自定义错误;finally:语句在try和catch语句之后,无论是否有触发异常,该语句都会执行......
  • Java学习笔记9
    1.多态1.1多态​ 多态是指同一种行为具有多种不同的表现形式。前提有继承或者实现关系有方法重写(没有重写多态就没有意义)父类引用指向子类对象格式父类类型变......