这一篇博客将详细介绍一个基于Servlet的问答网站的实现,有详细的代码。

可能篇幅较长,以代码为主,有兴趣的童鞋看完可以尝试动手搭建一个属于自己的问答社区。

工具:Eclipse,数据库用到了MySQL,这次项目中未使用jsp,全部以Servlet注解的方式连接HTML和Servlet,JDK最好使用1.8,tomcat使用8.0。(注解方式为JDK1.5后的特性,最低要求1.5+,本项目使用JDK1.8)。

在这篇博客中可以学习到:

1,Servlet中关于注解的使用,本项目没有使用到传统的Servlet配置web.xml,全部使用注解的形式。

2,了解Font Awesome这一矢量图标库的使用,他基本提供了项目中所要使用到的所有图标,方便,快捷。

3,了解simditor这一富文本编辑器的使用,网站中直接嵌入富文本编辑器,再也不用为读取出来的文字格式不对发愁了。

4,关于项目中如何加入验证码,数据库查询之前先进行验证码验证。

5,关于MVC框架显示层——Velocity技术的使用。

先看一下大体项目图(由于主要做后台,前台可能略丑,大家可以自行找网站模板)

登录界面:

注册界面:

首页,展示了大家的提问:

解答界面,点击别人的提问后进入解答界面,使用了富文本编辑器。

我的解答界面,展示了我回答的历史:

我的提问界面,展示了我提问的所有问题:

提问界面:进入网站点击我要提问,加入当前页编辑问题:

下面介绍主要代码(代码中加入了详细注释,所以不再做说明)

主页列表Servlet:

@WebServlet( "/list.do" )

public class ListServlet extends HttpServlet {

private static final long serialVersionUID = 810339694607399128L;

@Override

protected void service( HttpServletRequest request , HttpServletResponse response )

throws ServletException, IOException {

String question=request.getParameter("quest");

System.out.println(question);

if(StringHelper.notEmpty(question)){

final String SQL = "SELECT id , title ,content, publish_time , publish_ip , user_id FROM t_topic where title =? " ;

ResultSet rs = JdbcHelper.query( SQL,question );

// 创建一个 List 对象,用来保存一批 Topic 对象

final List topics = new ArrayList<>();

try {

// 每循环一次,光标下移一行,如果该行有数据返回 true

while( rs.next() ){

Topic t = new Topic(); // 创建对象

t.setId( rs.getInt( 1 ) ); // 将 结果集 中的 该行数据 封装到 t 对象的 id 属性中

t.setTitle( rs.getString( 2 ) );

t.setContent(rs.getString(3));

t.setPublishTime( rs.getTimestamp( 4 ));

t.setPublishIp( rs.getString( 5 ) );

User u = new User(); // 创建 一个 User 对象

u.setId( rs.getInt( 6 ) ); // 将 t_topic 表中的 user_id 放入到 User 对象的 id 属性中

t.setUser( u ); // 将 User 对象 设置到 Topic 对象上

/** 将 本次循环 创建的对象(已经封装数据) 添加到 List 集合中 */

topics.add( t );

}

} catch (SQLException e) {

e.printStackTrace();

}

JdbcHelper.release( rs ); // 关闭 结果集,释放相关的资源

/**** 为每个问题寻找提问者 ***********************************/

//for( int i = 0 ; i < topics.size() ; i++ ){

for( int i = 0 , len = topics.size() ; i < len ; i++ ){

Topic t = topics.get( i ) ; // 获得 题目

User u = t.getUser(); // 获得当前题目的User对象 ( 该对象中只有 id 没有其它数据 )

// 根据 用户对象的 id 来查询 用户的信息

String querySQL = "SELECT id , username , password FROM t_user WHERE id = ? " ;

ResultSet userRs = JdbcHelper.query( querySQL , u.getId() );

try {

if( userRs.next() ) { // 如果查询到用户信息

// 注意,这里应该使用 userRs

u.setUsername( userRs.getString( 2 ) ); // 将 username 列的值设置到 用户对象的 username 属性中

u.setPassword( userRs.getString( 3 )); // 将 password 列的值设置到 用户对象的 password 属性中

}

} catch (SQLException e) {

e.printStackTrace();

}

JdbcHelper.release( userRs ); // 关闭 结果集,释放相关的资源

}

ServletContext application = request.getServletContext();

/** 将这些数据保存到 application **/

application.setAttribute( "topics" , topics );

System.out.println( "问题列表: " + topics );

// 去 list.html 页面

response.sendRedirect( request.getContextPath() + "/list.html");

}else{

/**** 查询数据库中的所有问题 ***********************************/

final String SQL = "SELECT id , title ,content ,publish_time , publish_ip , user_id FROM t_topic ORDER BY publish_time DESC" ;

ResultSet rs = JdbcHelper.query( SQL );

// 创建一个 List 对象,用来保存一批 Topic 对象

final List topics = new ArrayList<>();

try {

// 每循环一次,光标下移一行,如果该行有数据返回 true

while( rs.next() ){

Topic t = new Topic(); // 创建对象

t.setId( rs.getInt( 1 ) ); // 将 结果集 中的 该行数据 封装到 t 对象的 id 属性中

t.setTitle( rs.getString( 2 ) );

t.setContent(rs.getString(3));

t.setPublishTime( rs.getTimestamp( 4 ));

t.setPublishIp( rs.getString( 5 ) );

User u = new User(); // 创建 一个 User 对象

u.setId( rs.getInt( 6) ); // 将 t_topic 表中的 user_id 放入到 User 对象的 id 属性中

t.setUser( u ); // 将 User 对象 设置到 Topic 对象上

/** 将 本次循环 创建的对象(已经封装数据) 添加到 List 集合中 */

topics.add( t );

}

} catch (SQLException e) {

e.printStackTrace();

}

JdbcHelper.release( rs ); // 关闭 结果集,释放相关的资源

/**** 为每个问题寻找提问者 ***********************************/

//for( int i = 0 ; i < topics.size() ; i++ ){

for( int i = 0 , len = topics.size() ; i < len ; i++ ){

Topic t = topics.get( i ) ; // 获得 题目

User u = t.getUser(); // 获得当前题目的User对象 ( 该对象中只有 id 没有其它数据 )

// 根据 用户对象的 id 来查询 用户的信息

String querySQL = "SELECT id , username , password FROM t_user WHERE id = ? " ;

ResultSet userRs = JdbcHelper.query( querySQL , u.getId() );

try {

if( userRs.next() ) { // 如果查询到用户信息

// 注意,这里应该使用 userRs

u.setUsername( userRs.getString( 2 ) ); // 将 username 列的值设置到 用户对象的 username 属性中

u.setPassword( userRs.getString( 3 )); // 将 password 列的值设置到 用户对象的 password 属性中

}

} catch (SQLException e) {

e.printStackTrace();

}

JdbcHelper.release( userRs ); // 关闭 结果集,释放相关的资源

}

java web问答系统_基于Servlet实现技术问答网站系统相关推荐

  1. 基于Servlet的技术问答网站系统实现(附源码)

    这一篇博客将详细介绍一个基于Servlet的问答网站的实现,有详细的代码. 可能篇幅较长,以代码为主,有兴趣的童鞋看完可以尝试动手搭建一个属于自己的问答社区. 工具:Eclipse,数据库用到了MyS ...

  2. java web 编辑器_基于Java+web的在线Java编辑器 PDF 下载

    主要内容: 近些年,互联网技术飞速发展,越来 越多的人接触到了编程语言,同时更多的 人愿意去了解学习编程语言,但由于以往 的编程语言编译器安装复杂,且部分还需 要配置环境,所以一些想学习编程语言的 人 ...

  3. java web 拍卖系统_基于jsp的拍卖系统-JavaEE实现拍卖系统 - java项目源码

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的拍卖系统, 该项目可用各类java课程设计大作业中, 拍卖系统的系统架构分为前后台两部分, 最终实现在线上进行拍卖 ...

  4. Web页面或app等前端页面之Java Web的JSP、Servlet、Cookie、Session等技术小结

    Java Web学习,掌握JSP.Servlet.Cookie.Session等内容,使用JSTL进行数据展示完成实际应用. 2.3.1 XML基础 XML的用途.语法规则.语义约束.如何解析XML, ...

  5. javaweb课堂练习继承与重写怎么做_深入学习Java Web(一):深入了解Servlet

    本文转自与博客园一杯凉茶的博客. Servlet是一种古老的Java Web技术,在开发中除了祖传的项目,已经很少见到它的身影,但是作为Java Web的重要组成部分,Servlet还是值得深入学习的 ...

  6. c语言编写订货系统,学位论文_基于c语言的仓库订货系统的仿真.doc

    学位论文_基于c语言的仓库订货系统的仿真 本科毕业论文(设计.创作) 题目: 基于C语言的仓库订货系统的仿真 学生姓名: 学号: 所在系院: 信息与通信技术系 专业: 电子信息工程 入学时间: 201 ...

  7. java计算机毕业设计ssm基于Vue的二手商品交易网站z40n1(附源码、数据库)

    java计算机毕业设计ssm基于Vue的二手商品交易网站z40n1(附源码.数据库) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilderX(Webstor ...

  8. 【Python程序设计】基于Flask的音乐在线网站/系统/平台

    基于Flask的音乐在线网站/系统/平台 零.项目获取 一.项目简介 二.开发环境 三.项目技术 四.系统架构 五.用户流程 六.运行截图 零.项目获取 获取方式(点击下载):是云猿实战 项目经过多人 ...

  9. JAVA JSP幼儿园事务管理系统JSP早教中心网站系统 JSP幼儿园网站JSP幼儿园管理系统

    JAVA JSP幼儿园事务管理系统JSP早教中心网站系统 JSP幼儿园网站JSP幼儿园管理系统 开发语言:Java 开发工具:Myeclispe /Eclipse 数据库:MYSQL 应用服务:Tom ...

  10. java web论文_(定稿)毕业论文基于JavaWeb技术博客项目的设计论文(完整版)最新版...

    <[毕业论文]基于Java Web技术博客项目的设计论文.doc>由会员分享,可免费在线阅读全文,更多与<(定稿)毕业论文基于Java Web技术博客项目的设计论文(完整版)> ...

最新文章

  1. 腾讯联姻开心网意欲何为
  2. web服务器的文档的部分路径是如何工作的,FinderWeb - 文档中心
  3. linux设置密码过期时间
  4. WPF基础入门2 - WPF窗口类和垂直布局面板基本使用
  5. WebStorm ES6 语法支持设置
  6. USB设备被识别流程【转】
  7. js函数的内部属性---arguments,callee,caller
  8. Android开发之Base64与bitmap互转的工具类
  9. 地表最强的MySQL安装一键式安装,信不信你下完我就给你装好!附各种Mysql安装失败的解决办法(什么你安装失败了?快来看这个)
  10. Leetcode之打印链接的倒数第K个节点
  11. Datawhale-零基础入门NLP-新闻文本分类Task04
  12. 没有android:padding属性,android pading的四个值,为负值时,什么情况下,有效啊
  13. Markdown Cookbook by Eric
  14. Atitit  Persistence API持久性标准化法总结 目录 1. 持久性对于大多数企业应用程序都非常要害 1 2. 持久化api内容 2 2.1. 一种声明式地执行O-R映射的方式。 2
  15. 10 个开源压力测试工具
  16. Windows下安装 rubyinstaller
  17. sip信令跟踪工具sngrep
  18. 计算机总自动开机 如何关闭,手把手教你win10电脑关机后自动开机怎么解决
  19. 神战奇迹服务器维护,神战奇迹手游官网
  20. ubuntu16.04 配置远程桌面

热门文章

  1. HTML5技术人员掌握的内容
  2. 判断是否已经安装vc2008运行时库(转载)
  3. Python基础语法 - 第2关 条件判断与条件嵌套
  4. 有哪些好用的电商API接口?
  5. vue柱状图+折线图组合
  6. 注册什么样的公司纳税最少
  7. mc服务器信息api,mc服务器jarapi
  8. PCL学习笔记(31)——使用积分图估计法线向量
  9. 研发轿车、开放一键加电以及跳过L3,蔚来是如何思考的? | 2019上海车展...
  10. N-Gram模型预测单词