如何得到项目的地址,如:http://localhost:8080/HR

本文介绍了通过Java Servlet API中的HttpServletRequest对象获取当前项目的完整URL的两种方法。第一种方法使用了getScheme、getServerName等方法拼接得到;第二种方法直接通过getRequestURL并进行字符串截取来获得。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

方法一:

String url = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/";

方法二:

String projectUrl = request.getRequestURL().toString();
   projectUrl = projectUrl.substring(0, projectUrl.lastIndexOf("/"));

转载于:https://www.cnblogs.com/sp2012/archive/2011/12/24/2465698.html

非关系型数据库 项目实训 指导书 陕西工业职业技术学院 任务4搭建一个类似“知乎”的问答网站 4.1 了解实例最终目标 本实例使用基于Python的网络框架Flask来实现,最终结果会以网页形式呈现一个具有提问和回答问题功能的网站。 案例描述 本网站主要实现5大功能。 1.查看问题 本项目完成后,将会得到一个具有基本功能的问答网站页面。其显示效果如图4-1所示。 2.查看回答 单击问题的标题以后,可以跳转到问题与答案页面,如图4-2所示。 图4-1 问题列表页面 图4-2 问题与答案页面 3.提出问题 单击右上角的“提问”按钮,可以提出一个新的问题,如图4-3所示。 4.回答问题 在每个问题的详情和回答页面,可以回答一个问题,如图4-4所示。 5.对回答点赞 单击问题或者回答左下角的上箭头或者下箭头,可以对一个问题或者回答“点赞”或者“点踩”,如图4-5左下角所示。单击“上箭头”,赞同数加1;单击“下箭头”,赞同数减1。 注意: (1)本项目中任何人都可以“点赞”无限次或者“点踩”无限次。 (2)在项目任何人都可以提问,也可以回答任何人的问题,不需要登录。因此,所有提问者的名字都叫作“匿名用户”,所有回答者的名字也叫作“匿名用户”,并且所有人具有相同的头像。 图4-3 提出一个新的问题 图4-4 回答一个新的问题 图4-5 对回答进行点赞或者点踩 4.2 准备工作 4.2.1文件结构 项目的文件结构如图4-6所示: 图4-6 文件结构图 其中,主要文件说明如下: Pipfile与Pipfile.lock:Pipenv配置运行环境的文件,用来记录项目所需要的第三方库。 generate_answer.py与generate_question.py:用于向数据库中添加测试数据。 main.py、static、templates和util文件夹:其中是本项目网站的后台和前台相关的代码。 your_code_home文件夹:实现MongoDB数据库中对数据的操作。 4.2.2搭建项目运行环境 与任务2相似,故在此不再说明。 4.3项目开发过程 提示:每个代码文件的首行注释自己的学号+姓名 4.3.1创建代码文件 (1)在项目文件夹下创建util文件夹,在该文件夹下面创建__init__.py文件和utils.py文件,在utils.py文件中完成如下代码: (2)在项目文件夹下创建your_code_here文件夹,在该文件夹下面创建__init__.py文件和MongoUtil.py文件,在MongoUtil.py文件中完成如下代码: (3)在项目文件夹下创建main.py文件,实现如下代码: (4)在项目文件夹下创建generate_question.py文件(在第一个位置添加一个文档,该文档有自己的姓名,自己的问题信息),实现如下代码: (5)在项目文件夹下创建generate_answer.py文件(将上面设置的自己的姓名的问题,设置其对应的答案信息),实现如下代码: 注意:这里需要修改question_id字段。 4.3.2生成初始数据 打开本地的MongoDB,分别运行项目中的generate_question.py和 generate_answer.py这两个文件,在数据库中生成qa_system库,并在库中生成两个集合 question和 answer,在Navicate for MongoDB中查看,如图所示: 集合question数据如图所示: 集合answer数据如图所示: 4.3.3实现查询问题列表功能 查询问题在 MongoUtil类中对应的方法为query_question。从这个方法返回的数据中可以看出,有一个answer_number 字段,即这个问题当前有多少个回答。要实现这样的返回字段,可以使用如下办法。 用聚合操作的“$lookup”操作符可以一次性查询两个集合。假设有100个问题,只需要查询1次,就可以同时获得所有的问题,以及他们各自对应的答案。代码如下: 在Python中,返回的字段中会有一个answer_list列表,这个列表里面就是所有的答案。只需要查询一下这个列表的长度,就知道这个问题有多少个回答了。 在Navicate for MongoDB中,可以看到关联集合查询的运行效果。如图所示: 学生自己的截图如下所示: 完整的 query_question方法代码如下。 代码说明如下。  第11~16行:使用聚合操作配合“$lookup”联集合查询问题和回答。  第19行:使用 for循环展开返回的结果,每一轮循环对应了一个问题。  第24行:使用“点赞”数减去“点踩”数,计算当前问题的赞同数。  第25行:获取answer_list这个Key对应的列表的长度,即这个问题的答案数。 修改好 query_question方法,输入网址http://127.0.0.1:5000,可以看到能够正常显示问题列表。如图所示: 4.3.4实现查询回答功能 从图4-2可以看出,进入一个问题的答案列表页以后,除看到答案外,还能够看到这个问题的描述。这说明在答案列表页面,不仅要查询答案answer集合,还需要查询问题 question集合。 使用聚合查询的$lookup可以提高查询的效率,对应的代码如下所示: 其中,主要代码说明如下: 其中,主要代码说明如下。  第32~38行:首先使用“$match”筛选出目标问题,再根据目标问题对应的Objectld查询问题和相应的回答,并把回答存在名为“answer_list”的列表中。  第39行:聚合操作返回的结果是一个可迭代的对象,由于可迭代的对象的ID(Objectld)不重复,所以这里必定只有一个元素。因此把它转化为列表再取下标为“O”的元素。  第40~46行:记录问题的信息。  第47~53行:记录每一条回答的内容。  第54行:把回答的列表重新存入问题信息中。 修改好query_answer方法后重启网站。在问题列表页中单击任何一个问题,则可以正常进该问题的答案列表页面,具体如图所示: 2.测试“昵称重判”功能(用自己中文的姓名) 重新启动网站。 可以发现,验证昵称是否重复的功能已经正常。但问题是,即使输入一个全新的昵称,网站也不会进入聊天室页面,而是闪一下继续留在登录页面。 页面截图如下所示: 在Redis可视化管理软件(RedisDesktopManager)中,已有用户的信息截图如下所示: chat_room_nick_set集合中数据截图如下所示: 4.3.5实现提问与回答功能 提问对应 MongoUtil类中的方法为 insert_question,代码如下所示: 回答对应MongoUtil类中的方法为insert_answer,代码如下所示: 此时,重启页面,添加提问后,页面如图所示: 回答用自己名字设置的答案后,页面如图所示: 4.3.6实现点赞与点踩功能 为问题“点赞”或“点踩”对应 MongoUtil类中的方法为vote_for_question,为答案“点赞”和“点踩”对应的方法名为vote_for_answer。它们都使用了MongoDB的update_one方法。 1.使用“$inc”操作符实现字段自增自减 为了实现原子操作的字段自增,需要使用“$inc”操作符。这个的inc对应了英文单词increase(增加)。 使用格式为: handler.update_one(('_id':问题或答案的ObjectId},('$inc':{'vote_up':1}}) 实际上,自减就是在“$inc”的值对应的字典中把值设为负数。但由于本项目需要记录“点踩”的数量,所以把“点赞”和“点踩”分成两个字段来保存。因此无论是“点赞”还是“点踩”都是自增操作。 2.实现“点赞”和“点踩” 设计点赞和点踩的代码,实现它们的功能。 为问题“点赞”或“点踩”对应的方法为vote_for_question,具体代码如下: 为答案“点赞”和“点踩”对应的方法名为vote_for_answer,具体代码如下: 需要注意的是,传入进来的value可能是vote_up 或者vote_down,直接把它作为$inc值字典的Key就可以自动实现赞或者踩。 修改完成以后重启网站,可以看到“点赞”和“点踩”功能已经恢复正常。截图如下所示: 具体代码怎么写
最新发布
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值