• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Java > 基于Servlet实现技术问答网站系统

基于Servlet实现技术问答网站系统

作者:阿木侠 字体:[增加 减小] 来源:互联网 时间:2017-05-28

阿木侠 通过本文主要向大家介绍了servlet技术特点,servlet技术,servlet技术简介,servlet技术介绍,jsp servlet技术等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

这一篇博客将详细介绍一个基于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<Topic> 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<Topic> 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"); 
 } 
 } 
} 
</div>

主页列表显示界面代码:

<!DOCTYPE html> 
<html> 
 <head> 
  <meta charset="UTF-8"> 
  <title>首页</title> 
  <link rel="stylesheet" href="$path/styles/general.css"> 
  <link rel="stylesheet" href="$path/styles/cell.css"> 
  <link rel="stylesheet" href="$path/styles/wen.css"> 
 </head> 
 <body> 
  
  ## 登录状态栏 开始 
  <div class="login-status-container auto-height"> 
   



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 基于Servlet实现技术问答网站系统
  • 基于Servlet实现技术问答网站系统

相关文章

  • 2017-05-28Java easyui树形表格TreeGrid的实现代码
  • 2017-05-28Spring Boot集成MyBatis访问数据库的方法
  • 2017-05-28Java编程中的HashSet和BitSet详解
  • 2017-05-28Java语言实现简单FTP软件 FTP协议分析(1)
  • 2017-05-28Java Runtime类详解_动力节点Java学院整理
  • 2017-05-28Spring Boot中Redis数据库的使用实例
  • 2017-05-28Hibernate对数据库删除、查找、更新操作实例代码
  • 2017-05-28Mybatis调用MySQL存储过程的简单实现
  • 2017-05-28java中匿名内部类详解
  • 2017-05-28SpringBoot获取yml和properties配置文件的内容

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • java中添加按钮并添加响应事件的方法(推荐)
    • Spring Boot中Redis数据库的使用实例
    • spring 操作elasticsearch查询使用方法
    • SpringBoot集成mybatis实例
    • java枚举类的构造函数实例详解
    • Java线程池的几种实现方法和区别介绍实例详解
    • 浅谈spring中的default-lazy-init参数和lazy-init
    • javaweb分页原理详解
    • jvm crash的崩溃日志详细分析及注意点
    • 微信开发准备第二步 springmvc mybatis项目结构搭建

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有