尝试用kotlin做一个app(六)

还是关于JSP后台管理系统的,有几个问题要解决一下

使用虚拟路径访问本地图片

之前在kindeditor编辑框插入图片时,是把图片文件转换为base64编码的形式;还有一种方法是使用虚拟地址。另外图片在数据库中存储的时候,应该是存储图片的虚拟地址(当然也可以是图片的二进制流数据)。

可以参考

idea设置tomcat虚拟路径的两种方法

配置好了之后,就得把图片的路径上传到数据库中,更新表t_hp_new的thumb字段

后台登录状态验证

这里先不做,因为程序还在调试,每次进入要登录也是很麻烦了。

为客户端创建网络请求API

客户端首页要加载新闻标题和缩略图,貌似可以直接从数据库中读取,另外也可以访问服务端创建的网络请求API。我不知道别人是怎么做的,但是这里可以随便尝试一下。

·新建一个web project

·建一个Servlet别名是api

·Servlet里添加代码

public class ClientApiServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object newsCount=req.getParameter("news");

        resp.setContentType("text/html;charset=utf-8");
        ArrayList<New> newsList=new T_NewImpl().queryForHpPages(1,Integer.parseInt(newsCount.toString()));

        JSONArray jsonArray=new JSONArray();
        newsList.forEach(
                x->jsonArray.add(JSONObject.fromObject(x))
        );
//        jsonArray.forEach(
//                x->System.out.println(x)
//        );
        for(Object i :jsonArray){

            JSONObject jsonObject=JSONObject.fromObject(i);
            System.out.println(jsonObject.getString("title"));
        }
        resp.getWriter().println(jsonArray);

    }
}

在浏览器中输入

http://localhost:8087/工程名/api?news=5

获得返回

[{"id":34,"title":"test","author":"admin","pubDate":"2020-02-28 04:39:42.0","origin":"admin","href":"admin","thumb":"\"null\""},{"id":35,"title":"第二篇","author":"说点什么好呢","pubDate":"2020-02-28 04:44:08.0","origin":"说点什么好呢","href":"说点什么吧","thumb":"\"null\""},{"id":36,"title":"3","author":"2","pubDate":"2020-02-28 05:50:08.0","origin":"3","href":"4","thumb":"/thumb/20200228055008.jpg"},{"id":37,"title":"说点什么好呢","author":"说点什么好呢","pubDate":"2020-02-28 06:38:51.0","origin":"说点什么好呢","href":"说点什么好呢","thumb":"/thumb/20200228063851.png"},{"id":38,"title":"haha","author":"dd","pubDate":"2020-02-28 18:24:45.0","origin":"ee","href":"dd","thumb":"/thumb/20200228182444.png"}]

应该就可以了

客户端通过okhttp请求数据

把web工程项目移到tomcat的webapps目录下。在这里,图片上传保存的路径应该改成工程目录的上一层目录。应该是两个工程独立的,都要访问thumb目录。只要在保存的时候加上../。

然后在客户端的新闻列表RecyclerView的Adapter中,用okttp请求服务器的数据。

还是不知道别人是怎么做的。但我注意到别的网站有个cgi-bin的目录,那之后需要了解一下cgi这个概念。我暂时把目录改成clientapi,okhttp就直接请求http://本地电脑局域网地址/clientapi/api?news=5

这里有个问题是用Gson解析json的时候,[]被认作列表,所以如果是多条新闻数据,应该使用jsonObject.put("list":jsonArray)的形式。之前返回数据给easyui的datagrid,也是这样做的

另外pubdate是个datetime对象(Timestamp类型),可以getTime()之后响应给浏览器

更规范的做法是,加一些别的信息,比如状态码之类的,表示请求成功或失败,比如

{"code":0,"ts":1580987499140,"mv_list":{"code":0,"data":{ "list": [ { "comme...

//New been类中,重写toString

    @Override
    public String toString() {
//        Long date=0L;
//        if(pubdate!=null){
//            date=pubdate.getTime();
//        }
//        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
//        String dateString=sdf.format(date);
        return "{" +
                "id=" + id +
                ", title=‘" + title + ‘\‘‘ +
                ", author=‘" + author + ‘\‘‘ +
                ", pubdate=‘" + pubdate.getTime() + ‘\‘‘ +
                ", origin=‘" + origin + ‘\‘‘ +
                ", href=‘" + href + ‘\‘‘ +
                ", content=‘" + content + ‘\‘‘ +
                ", thumb=‘" + thumb + ‘\‘‘ +
                ‘}‘;
    }

Servlet中

@Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Object newsCount=req.getParameter("news");

        resp.setContentType("text/html;charset=utf-8");
        ArrayList<New> newsList=new T_NewImpl().queryForHpPages(1,Integer.parseInt(newsCount.toString()));

        JSONArray jsonArray=new JSONArray();
        for(New i:newsList){
            JSONObject jsonObject=JSONObject.fromObject(i.toString());
            jsonArray.add(jsonObject);
        }

        JSONObject result=new JSONObject();
        result.put("result",jsonArray);
        resp.getWriter().println(result);

    }

关于客户端使用okhttp为RecyclerView加载数据,之前做过了gson解析json

这里涉及线程或协程,还需要多了解一点

有个问题也是纠结了我很久,之前上传图片的时候,在后台把流数据转换成utf-8防止中文乱码,结果图片就上传不完整了。而如果图片不完整,在本地电脑会显示缺角什么的,但是用Picasso或者Glide就加载不出来了,比如提示

class com.bumptech.glide.load.engine.GlideException: Failed to load resource
There were 4 causes:
java.io.IOException(java.lang.RuntimeException: setDataSource failed: status = 0x80000000)

后来就只把非图片二进制流的部分转成utf-8

另外,还有个坑。我在写后台的时候,设置图片的虚拟地址,把idea目录下的真实地址,映射成 /thumb。那关掉idea之后,http://localhost/thumb,访问的还是idea目录下的。既然项目已经拷贝到tomcat目录下,那就不要虚拟地址了。

效果:

前三张图片没显示,是因为上传的图片不完整。最后一条还是乱码了,说明还是没有处理好。代码结构也很乱了,有时间会重写一遍

原文地址:https://www.cnblogs.com/vocus/p/12375600.html

时间: 2024-10-08 21:43:19

尝试用kotlin做一个app(六)的相关文章

尝试用kotlin做一个app(十六)

继续优化一下可折叠的toolbar.目前的效果是这样 这里有几个问题: 1.我这里是设置了一下状态栏的颜色,但是要设置状态栏透明.设置状态栏透明之后,其实是actionbar会与状态栏重合,而toolbar并不会.所以要在activity中设置setSupportActionBar(Toolbar),让toolbar act as actionbar 2.toolbar和状态栏重合问题,按照之前的方法应该设置toolbar具有一个与状态栏高度的paddingTop,但是这里有个更简单的方法,即在

尝试用kotlin做一个app(八)

点击新闻列表进入详情页 使用WebView 1.准备工作 现在没有办法把整个网站前端都做出来,就先做一个新闻页面吧.新闻页面也要连接数据库,要使用之前写后台的JDBC类,所以我想可以在原来项目中增加一个“子项目”.那就要调整一下原来项目的结构. 调整后的项目结构是这样的 以下是遇到的问题和解决方法 idea项目重命名 如果出现错误javax.management.InstanceNotFoundException: Catalina:type=Server,查看artifacts下的是否还保留了

尝试用kotlin做一个app(五)

JSP后台管理系统 开发工具是IntelliJ IDEA+tomcat+mysql5.6.19+mysql-connector-java-5.1.48.jar+easyui+kindeditor 之前也有记录一些Servlet基础(java,idea) 这篇我只把一些重要的记录一下 easyui官方文档 kindeditor官方文档 easyui很简单,而且中文文档介绍得很详细,对照文档做就好了 kindeditor问题比较多,这里记录一下 准备工作 mysql数据库test中建立t_hp_ne

尝试用kotlin做一个app(十一)

为新闻列表页加载数据库数据,并为条目添加点击事件,点击进入新闻详情页 又转战后台了 java文章,kotlin文章还有其他文章是用一个表,还是分别建不同的表呢,我想还是建一个表吧,为表增加一个分类的字段就行了.文章一共有10个类别,分别是: 新建两个表.一个是文章表,一个是用户表.两个表包含的字段信息如下 数据库表也是有命名规范的,但是我这暂时不用处理很复杂的表,所以命名直白点就好.文章应该有作者,又要通过文章的作者查询到作者的头像,所以应该有一次联合查询. create table artic

尝试用kotlin做一个app(三)

新闻列表 添加新闻列表可以使用RecyclerView.但是有个问题,RecyclerView只会在内部滚动,不会带动整个屏幕滚动.所以在原根布局外层添加androidx.core.widget.NestedScrollView,并且在原先根局部,添加android:descendantFocusability,解决进入页面跳入页面底部的问题. ·添加RecyclerView <androidx.recyclerview.widget.RecyclerView android:id="@+

做一个App究竟要花多少钱?

作为互联网从业者,被外行的朋友们问及最多的问题是: “做一个网站需要多少钱?”或者“做一个APP需要多少钱?”. 作为做过完整网站项目和APP的人,今天从产品经理的角度,一起来算一下中小型APP从无到有需要做哪些工作,以及为达成使命,需要付出多少金钱代价. 以下内容的前提是: 深圳.移动互联网方向.包含研发一个新产品过程中一些常见的工作,并非十全十美. 首先假设在做APP之前我们已经有了一个成熟的团队(这是非常幸运的前提,很多产品研发进度极其缓慢的原因之一就是在过程中不断在招人),团队的结构以架

做一个 App 前需要考虑的几件事

做一个 App 前需要考虑的几件事 来源:limboy的博客 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 App 有了一定规模后,再感慨当初为什么没有多留点心. 完善的日志系统 以 iOS 为例,有时图方便,就直接用 NSLog 了,甚至线上都一直开着.一方面会影响性能,尤其是输出比较频繁的时候,另一方面也容易泄露敏感信息,所以一般做法是在 Release 模式下禁用 NSLog,比如在 pch 文件中,通过

做一个App前需要考虑的几件事

本文转载于文章原文链接,版本归原作者所有! 随着工具链的完善,语言的升级以及各种优质教程的涌现,做一个 App 的成本也越来越低了.尽管如此,有些事情最好前期就做起来,避免当 App 有了一定规模后,再感慨当初为什么没有多留点心. 此处由标哥的技术博客站长点评: 看完本篇文章之后,也让我想起了不少以前做过的蠢事,做过很多重复的工作.之前在项目中使用过cocoalumberjack,个人感觉是很不错的日志管理框架.当然,不一定要求使用它,也在另一家公司里,原来的人将NSLog重定义了,改写了输出,

如何利用php+android+新浪sae服务器做一个app下载应用

功能简介:提供一个app下载的平台,类似于appstore,上面有很多app可供下载 实现基本思路:利用android,在手机桌面建立一个图标,点击该图标不是打开app应用,而是跳转到一个web页面,这个web页面是部署在新浪sae服务器上面的,apk资源也是存放到新浪sae服                     务器上,本例子使用的web变成语言主要是利用smarty模板php编写的 首先是android页面,就一个简单的url跳转,把跳转到activity换成跳转到web页面,代码如下