基于SSH框架的小型论坛项目  

  一、项目入门  传送门

  二、框架整合  传送门

  三、用户模块  传送门

  四、页面显示  传送门

  五、帖子模块  传送门

  六、点赞模块  传送门

  七、辅助模块  传送门

帖子表与回复表

    编写帖子模块
添加帖子
查看帖子
查看帖子
页面的改变
-用户
-文本
内容去掉br标签
用户头像
分页
引入资源
分析
pageSize
currentPage
totalCount
totalPage 所需要的参数:
*起始索引 pageSize(自己定义的)
currentPage
totalCount select count(*) from paste
总页数 = 总条数/每页显示条数 + 1 Math.ceil() 2.3 3
4 10 3 3.333 3 3
4 12 3 4 3.00001 4 select * from paste limit ?,?
第一个问号:起始索引
页数 页面大小 起始索引
1 2 0
2 2 2
3 2 4 n 2 (第一个数-1)* 第二个数
第二个问号:查询多少数据(pageSize)
通过页面分析:
currentPage
尾页:总页数
编码 回复帖子
1)进入帖子
点击标题进入detail.jsp 2)回复帖子

帖子模块

  关系分析图

  数据库中贴子表的创建

    create table paste(
id varchar(50)primary key,
title varchar(1000) not null,
content varchar(3000) not null,
offer int not null,
ansnum int default 0,
createtime varchar(100) not null,
glanceover int default 0,
solve int default 0,
isdelete int default 0, answerid varchar(50),
userid varchar(50) )

  回复表

    create table answer(
id varchar(50) primary key,
userid varchar(50) not null,
pasteid varchar(50) not null,
content varchar(3000) not null,
anstime varchar(100) not null,
agree int default 0,
solve int default 0 )

添加帖子

  add.jsp中添加帖子表单路径

<form action="${pageContext.request.contextPath}/PasteAction_addPaste">

  使用模型驱动,创建一个PasteAction.class

public class PasteAction extends ActionSupport implements ModelDriven<Paste>

  创建封装PasteAction.class(Web层)、PasteService.class(Service层)、PasteDao.class(Dao层)数据

package com.Gary.web;

import java.text.SimpleDateFormat;
import java.util.Date; import com.Gary.domain.Paste;
import com.Gary.domain.User;
import com.Gary.service.PasteService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class PasteAction extends ActionSupport implements ModelDriven<Paste> { public Paste paste = new Paste();
private PasteService pasteService; public String addPaste() throws Exception {
User user = (User)ActionContext.getContext().getSession().get("user"); if(user==null)
{
ActionContext.getContext().put("error", "只有登陆之后才可以发帖子!!");
return "error";
} //private Integer ansnum;
paste.setAnsnum(0);
//private String createtime;
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String createtime = format.format(date);
paste.setCreatetime(createtime);
//private Integer glanceover;
paste.setGlanceover(0);
//是否结帖 0未结 1结束
//private Integer solve;
paste.setSolve(0);
//private Integer isdelete;
paste.setIsdelete(0);
//private User user; paste.setUser(user); pasteService.addPaste(paste); //重定向到主页
return "toIndex";
} public PasteService getPasteService() {
return pasteService;
} public void setPasteService(PasteService pasteService) {
this.pasteService = pasteService;
} @Override
public Paste getModel() {
// TODO Auto-generated method stub
return paste;
} }

PasteAction.class

package com.Gary.service;

import com.Gary.dao.PasteDao;
import com.Gary.domain.Paste; public class PasteService { private PasteDao pasteDao; public PasteDao getPasteDao() {
return pasteDao;
} public void setPasteDao(PasteDao pasteDao) {
this.pasteDao = pasteDao;
} public void addPaste(Paste paste) { pasteDao.addPaste(paste); } }

PasteService.class

package com.Gary.dao;

import org.hibernate.Session;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Paste; public class PasteDao extends HibernateDaoSupport{ public void addPaste(Paste paste) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
session.save(paste);
} }

PasteDao.class

  添加帖子属性

    private String id;
private String title;
private String content;
private Integer offer;
private Integer ansnum;
private String createtime;
private Integer glanceover;
//是否结帖
private Integer solve;
private Integer delete;
package com.Gary.domain;

public class Paste {

    private String id;
private String title;
private String content;
private Integer offer;
private Integer ansnum;
private String createtime;
private Integer glanceover;
//是否结帖
private Integer solve;
private Integer delete; public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Integer getOffer() {
return offer;
}
public void setOffer(Integer offer) {
this.offer = offer;
}
public Integer getAnsnum() {
return ansnum;
}
public void setAnsnum(Integer ansnum) {
this.ansnum = ansnum;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Integer getGlanceover() {
return glanceover;
}
public void setGlanceover(Integer glanceover) {
this.glanceover = glanceover;
}
public Integer getSolve() {
return solve;
}
public void setSolve(Integer solve) {
this.solve = solve;
}
public Integer getDelete() {
return delete;
}
public void setDelete(Integer delete) {
this.delete = delete;
} }

Paste.java

  回复帖属性

public class PasteService {

    private PasteDao pasteDao;

    public PasteDao getPasteDao() {
return pasteDao;
} public void setPasteDao(PasteDao pasteDao) {
this.pasteDao = pasteDao;
} public void addPaste(Paste paste) { pasteDao.addPaste(paste); } }

  配置一对多属性

  Paste中配置用户帖子

  private User user;

    public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}

  User.class中代表该用户发表的所有帖子

  private Set<Paste> pasteSet = new HashSet<Paste>();

    public Set<Paste> getPasteSet() {
return pasteSet;
} public void setPasteSet(Set<Paste> pasteSet) {
this.pasteSet = pasteSet;
}

  User.hbm.xml中配置外键

        <set name="pasteSet">
<!-- 外键列名 -->
<key column="userid"></key>
<one-to-many class="Paste"/>
</set>

  Paste.hbx.xml中配置一对多的关系

<many-to-one name="user" class="User" column="userid" insert="true"></many-to-one>

  配置applicationContext.xml

<!-- 配置Action -->
<bean name="userAction" class="com.Gary.web.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean name="pasteAction" class="com.Gary.web.PasteAction" scope="prototype">
<property name="pasteService" ref="userService"></property>
</bean> <!-- 配置Service -->
<bean name="userService" class="com.Gary.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<bean name="pasteService" class="com.Gary.service.PasteService">
<property name="pasteDao" ref="pasteDao"></property>
</bean> <!-- 配置Dao -->
<bean name="userDao" class="com.Gary.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean name="pasteDao" class="com.Gary.dao.PasteDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>

  登陆成功后,测试发帖功能

package com.Gary.dao;

import org.hibernate.Session;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Paste; public class PasteDao extends HibernateDaoSupport{ public void addPaste(Paste paste) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
session.save(paste);
} }

PasteDao.java

package com.Gary.domain;

public class Paste {

    private String id;
private String title;
private String content;
private Integer offer;
private Integer ansnum;
private String createtime;
private Integer glanceover;
//是否结帖
private Integer solve;
private Integer isdelete; private User user; public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Integer getOffer() {
return offer;
}
public void setOffer(Integer offer) {
this.offer = offer;
}
public Integer getAnsnum() {
return ansnum;
}
public void setAnsnum(Integer ansnum) {
this.ansnum = ansnum;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Integer getGlanceover() {
return glanceover;
}
public void setGlanceover(Integer glanceover) {
this.glanceover = glanceover;
}
public Integer getSolve() {
return solve;
}
public void setSolve(Integer solve) {
this.solve = solve;
}
public Integer getIsdelete() {
return isdelete;
}
public void setIsdelete(Integer isdelete) {
this.isdelete = isdelete;
} }

Paste.java

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package = "com.Gary.domain">
<class name="Paste" table="paste">
<id name="id">
<generator class="uuid"></generator>
</id> <!--private String title;
private String content;
private Integer offer;
private Integer ansnum;
private String createtime;
private Integer glanceover;
//是否结帖
private Integer solve;
private Integer isdelete;--> <property name="title" column="title"></property>
<property name="content" column="content"></property>
<property name="offer" column="offer"></property>
<property name="ansnum" column="ansnum"></property>
<property name="createtime" column="createtime"></property>
<property name="glanceover" column="glanceover"></property>
<property name="solve" column="solve"></property>
<property name="isdelete" column="isdelete"></property> <many-to-one name="user" class="User" column="userid" insert="true"></many-to-one> </class>
</hibernate-mapping>

Paste.hbm.xml

package com.Gary.service;

import com.Gary.dao.PasteDao;
import com.Gary.domain.Paste; public class PasteService { private PasteDao pasteDao; public PasteDao getPasteDao() {
return pasteDao;
} public void setPasteDao(PasteDao pasteDao) {
this.pasteDao = pasteDao;
} public void addPaste(Paste paste) { pasteDao.addPaste(paste); } }

PasteService.java

package com.Gary.web;

import java.text.SimpleDateFormat;
import java.util.Date; import com.Gary.domain.Paste;
import com.Gary.domain.User;
import com.Gary.service.PasteService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class PasteAction extends ActionSupport implements ModelDriven<Paste> { public Paste paste = new Paste();
private PasteService pasteService; public String addPaste() throws Exception {
User user = (User)ActionContext.getContext().getSession().get("user"); if(user==null)
{
ActionContext.getContext().put("error", "只有登陆之后才可以发帖子!!");
return "error";
} //private Integer ansnum;
paste.setAnsnum(0);
//private String createtime;
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String createtime = format.format(date);
paste.setCreatetime(createtime);
//private Integer glanceover;
paste.setGlanceover(0);
//是否结帖 0未结 1结束
//private Integer solve;
paste.setSolve(0);
//private Integer isdelete;
paste.setIsdelete(0);
//private User user; paste.setUser(user); pasteService.addPaste(paste); //重定向到主页
return "toIndex";
} public PasteService getPasteService() {
return pasteService;
} public void setPasteService(PasteService pasteService) {
this.pasteService = pasteService;
} @Override
public Paste getModel() {
// TODO Auto-generated method stub
return paste;
} }

PasteAction.java

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置数据源 -->
<bean name="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysqL:///garyssh_forum"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean> <!-- 配置sessionFactory -->
<bean name="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sqp">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property> <property name="mappingDirectoryLocations"
value="classpath:com/Gary/domain"></property> </bean> <!-- 配置事务的核心管理器 -->
<bean name="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- 通知 -->
<tx:advice id="advice"
transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" />
</tx:attributes>
</tx:advice> <!-- 织入 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut
expression="execution(* com.Gary.service.*.*(..))" id="pc" />
<!-- 配置切面 切入点+通知 -->
<aop:advisor advice-ref="advice" pointcut-ref="pc" />
</aop:config> <!-- 配置Action -->
<bean name="userAction" class="com.Gary.web.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean name="pasteAction" class="com.Gary.web.PasteAction" scope="prototype">
<property name="pasteService" ref="pasteService"></property>
</bean>
<!-- 配置Service -->
<bean name="userService" class="com.Gary.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<bean name="pasteService" class="com.Gary.service.PasteService">
<property name="pasteDao" ref="pasteDao"></property>
</bean>
<!-- 配置Dao -->
<bean name="userDao" class="com.Gary.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean name="pasteDao" class="com.Gary.dao.PasteDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> </beans>

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!--开启动态方法调用 -->
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <!-- 告诉struts不用自己创建Action,Spring来帮你创建 -->
<constant name="struts.objectFactory" value="spring"></constant>
<package name="Gary_SSHForum" namespace="/" extends="struts-default">
<!-- 允许全部方法 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="UserAction_*" class="com.Gary.web.UserAction" method="{1}">
<result name="toLogin" type="redirect">/login.jsp</result>
<result name="login">/login.jsp</result>
<result name="toIndex" type="redirect">/index.jsp</result>
<result name="error">/login.jsp</result>
<result name="toRegisterSuccess" type="redirect">/registerSuccess.jsp</result>
</action> <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
<result name="toIndex" type="redirect">/index.jsp</result>
<result name="error">/login.jsp</result>
</action> </package> </struts>

struts.xml

  完善发帖

  对用户登陆进行判断

      <!--描述:未登录的样子-->
<s:if test="#session.user!=null">
<a class="avatar" href=""> <img src="res/images/avatar/11.jpg"> <cite><s:property value="#session.user.username" /></cite>
</a>
<div class="nav">
<a href=""> <i class="iconfont icon-tuichu" style="top: 0; font-size: 22px;"></i> 退出
</a>
</div>
</s:if>
<!--描述:未登录的样子-->
<s:if test="#session.user==null">
<a class="iconfont icon-touxiang layui-hide-xs" style="margin-top: 4px; display: inline-block;"> </a>
<div class="nav" style="font-size: 14px; color: white; margin-top: -5px; margin-left: 1px;" />
<a href="login.jsp" target="_parent">登录</a>
<a href="register.jsp" target="_parent">注册</a>
</s:if>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="res/layui/css/layui.css">
<link rel="stylesheet" href="res/css/global.css">
<link rel="stylesheet" type="text/css" href="css/index.css">
<script src="res/layui/layui.js"></script>
<style>
</style>
</head>
<body>
<div class="dvhead">
<div class="dvlogo">
<a href="index.jsp" target="_parent" fount-size="34px">论坛</a>
</div>+
<div class="dvsearch">Cynical丶Gary</div>
<div class="nav-user" style="top: 0px; right: 100px;"> <!--描述:未登录的样子-->
<s:if test="#session.user!=null">
<a class="avatar" href=""> <img src="res/images/avatar/11.jpg"> <cite><s:property value="#session.user.username" /></cite>
</a>
<div class="nav">
<a href=""> <i class="iconfont icon-tuichu" style="top: 0; font-size: 22px;"></i> 退出
</a>
</div>
</s:if>
<!--描述:未登录的样子-->
<s:if test="#session.user==null">
<a class="iconfont icon-touxiang layui-hide-xs" style="margin-top: 4px; display: inline-block;"> </a>
<div class="nav" style="font-size: 14px; color: white; margin-top: -5px; margin-left: 1px;" />
<a href="login.jsp" target="_parent">登录</a>
<a href="register.jsp" target="_parent">注册</a>
</s:if>
</div>
</div>
</body>
</html>

head.jsp

查询帖子

  分析查询帖子所有功能

  查询帖子所有信息,用一个List<>泛型去接收

  Web层创建一个GetDataAction.java去Service中查询数据

public class GetDataAction extends ActionSupport{

    private PasteService pasteService;

    public String getAllPaste() throws Exception {

        List<Paste> pasteList = pasteService.findAllPaste();

        ActionContext.getContext().put("pasteList", pasteList);

        return "index";
} public PasteService getPasteService() {
return pasteService;
} public void setPasteService(PasteService pasteService) {
this.pasteService = pasteService;
} }

  Service层中创建PasteService.java在Dao层查询数据库

public class PasteService {

    private PasteDao pasteDao;

    public PasteDao getPasteDao() {
return pasteDao;
} public List<Paste> findAllPaste() { return pasteDao.findAllPaste(); } public void setPasteDao(PasteDao pasteDao) {
this.pasteDao = pasteDao;
} public void addPaste(Paste paste) { pasteDao.addPaste(paste); } }

  Dao层创建PasteDao.java在使用HQL在数据库中查询数据

public class PasteDao extends HibernateDaoSupport{

    public void addPaste(Paste paste) {

        Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
session.save(paste);
} //HQL
public List<Paste> findAllPaste() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //书写SQL语句
String hql = "form com.Gary.domain.Paste";
Query query = session.createQuery(hql); List<Paste> list = query.list(); return list;
} }

  

package com.Gary.web;

import java.util.List;

import com.Gary.domain.Paste;
import com.Gary.service.PasteService;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class GetDataAction extends ActionSupport{ private PasteService pasteService; public String getAllPaste() throws Exception { List<Paste> pasteList = pasteService.findAllPaste(); ActionContext.getContext().put("pasteList", pasteList); return "index";
} public PasteService getPasteService() {
return pasteService;
} public void setPasteService(PasteService pasteService) {
this.pasteService = pasteService;
} }

GetDataAction.java

package com.Gary.service;

import java.util.List;

import com.Gary.dao.PasteDao;
import com.Gary.domain.Paste; public class PasteService { private PasteDao pasteDao; public PasteDao getPasteDao() {
return pasteDao;
} public List<Paste> findAllPaste() { return pasteDao.findAllPaste(); } public void setPasteDao(PasteDao pasteDao) {
this.pasteDao = pasteDao;
} public void addPaste(Paste paste) { pasteDao.addPaste(paste); } }

PasteService.java

package com.Gary.dao;

import java.util.List;

import org.hibernate.Session;
import org.hibernate.query.Query;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Paste; public class PasteDao extends HibernateDaoSupport{ public void addPaste(Paste paste) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
session.save(paste);
} //HQL
public List<Paste> findAllPaste() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //书写SQL语句
String hql = "form com.Gary.domain.Paste";
Query query = session.createQuery(hql); List<Paste> list = query.list(); return list;
} }

PasteDao.java

  配置struts.xml

    <action name="GetDataAction_*" class="com.Gary.web.GetDataAction" method="{1}">
<result name="index">/index.jsp</result>
</action>

  配置application.xml

    <!-- 配置Action -->
<bean name="userAction" class="com.Gary.web.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean name="pasteAction" class="com.Gary.web.PasteAction" scope="prototype">
<property name="pasteService" ref="pasteService"></property>
</bean>
<bean name="getDataAction" class="com.Gary.web.GetDataAction" scope="prototype">
<property name="pasteService" ref="pasteService"></property>
</bean>

  测试发帖,动态编译获得数据库中的帖子数据

<div class="tab">
<s:iterator value="pasteList" var="paste">
<div class="dvques">
<div class="quesCount">
<div class="count">8</div>
<div class="ques">
<s:property value="#paste.ansnum" />
</div>
</div>
<div class="quesContent">
<div class="quesTitle">
<s:property value="#paste.offer" />
<image src="data:images/bean.jpg" class="bean"> <span class="spanques"><s:property value="#paste.title" /></span>
</div>
<div class="qContent"><s:property value="#paste.content"/></div>
<div class="tags">
<span class="tag">excel</span><span class="tag">程序</span>
</div>
<div class="quesUser">
<image src="data:images/0.gif" class="imguser" />
<div class="userName">
<s:property value="#paste.user.username"/>
<div class="liulan">浏览(<s:property value="#paste.createtime"/>) <s:property value="#paste.user.username"/></div>
</div> </div>
</div>
</div>
</s:iterator> </div>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/index.css">
</head>
<div class="dvhead">
<div class="dvlogo">
<a href="index.html">你问我答</a>
</div>
<div class="dvsearch">10秒钟注册账号,找到你的同学</div>
<div class="dvreg">
已有账号,立即&nbsp;<a href="login.html">登录</a>
</div>
</div>
<div class="dvContent">
<div class="dvquesleft"> <div class="dvqstitle">
<image class="imgbean" src="data:images/bean.jpg"> <span class="qsTitle">问答</span> <span class="back"><ab href="">《《返回上一页</a></span>
</div>
<div class="dvtabhead">
<div class="tabheads tabcurrent">全部问题</div>
<div class="tabheads">我的问题</div>
<div class="tabheads">关注问题</div>
<div class="tabheads">问题标签</div>
</div>
<div class="tabContent">
<div class="dvtags">
<a class="curenttag">待解决</a><span class="line"></span><a>高分</a><span class="line"></span><a>新回答</a><span class="line"></span><a>已解决</a>
</div>
<div class="tab">
<s:iterator value="pasteList" var="paste">
<div class="dvques">
<div class="quesCount">
<div class="count">8</div>
<div class="ques">
<s:property value="#paste.ansnum" />
</div>
</div>
<div class="quesContent">
<div class="quesTitle">
<s:property value="#paste.offer" />
<image src="data:images/bean.jpg" class="bean"> <span class="spanques"><s:property value="#paste.title" /></span>
</div>
<div class="qContent"><s:property value="#paste.content"/></div>
<div class="tags">
<span class="tag">excel</span><span class="tag">程序</span>
</div>
<div class="quesUser">
<image src="data:images/0.gif" class="imguser" />
<div class="userName">
<s:property value="#paste.user.username"/>
<div class="liulan">浏览(<s:property value="#paste.createtime"/>) <s:property value="#paste.user.username"/></div>
</div> </div>
</div>
</div>
</s:iterator> </div>
<div class="tab hidden">2</div>
<div class="tab hidden">3</div>
<div class="tab hidden">4</div>
</div>
</div>
<div class="dvquesright">
<div>
<buton class="btnques" onclick="location.href='add.html'">提个问题</buton>
</div>
<div class="dvorder">
<div class="orderTitle">专家排行榜</div>
<div class="users">
<image class="userface" src="data:images/0.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/1.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/2.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/3.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/4.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/5.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/6.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div> </div> </div> </div>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function() { $(".tabheads").click(
function() {
$(".tabheads").removeClass("tabcurrent")
.eq($(this).index()).addClass("tabcurrent");
$(".tab").hide().eq($(this).index()).show();
});
});
</script>
<body>
</body>
</html>

index.jsp

  修改帖子内容样式

    <div class="quesContent" style="width:px;height:px;overflow:hidden;white-space:normal;text-overflow:ellipsis;">                

  修改帖子头像位置样式

<div class="quesUser" style="margin-top:28px;margin-right:20px">

  

  设置人物头像

  在用户注册时String register()方法中随机设置用户头像

  UserAction.java

    public String register() throws Exception {
// TODO Auto-generated method stub //没有的数据手动封装
user.setState(0);
user.setCode(UUID.randomUUID().toString());
Random r = new Random();
user.setImage("/images/"+r.nextInt(21)+".gif");
user.setLevel(1);
user.setCoin(1000); //是否添加成功
userService.addUser(user); MailUtils.sendMail(user.getEmail(), "请激活", "恭喜您注册成功,请点击下面的链接激活!! <a href='http://localhost:8080/Gary_SSHForum/UserAction_active?userCode="+user.getCode()+"'>点击这里</a>"); return "toRegisterSuccess"; }

  提问区动态设置提问者头像(index.jsp)

                        <div class="quesContent" style="width:px;height:px;overflow:hidden;white-space:normal;text-overflow:ellipsis;">
<div class="quesTitle">
<s:property value="#paste.offer" />
<image src="data:images/bean.jpg" class="bean"> <span class="spanques"><s:property value="#paste.title" /></span>
</div>
<div class="qContent"><s:property value="#paste.content"/></div>
<div class="tags">
<span class="tag">excel</span><span class="tag">程序</span>
</div>
<div class="quesUser" style="margin-top:28px;margin-right:20px">
<image src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" class="imguser" /> <div class="userName">
<s:property value="#paste.user.username"/>
<div class="liulan">浏览(<s:property value="#paste.createtime"/>) <s:property value="#paste.user.username"/></div>
</div>
</div>

  设置登陆时登录者头像(head.jsp)

<!--描述:登录的样子-->
<s:if test="#session.user!=null">
<a class="avatar" href="">
<img src="${pageContext.request.contextPath }/<s:property value="#session.user.image"/>"> <cite>
<s:property value="#session.user.username" />
</cite>
</a>
</div>
</s:if>

  分页Div

<div style="text-align: center">
<div class="laypage-main"><span class="laypage-curr">1</span><a href="/jie/page/2/">2</a><a href="/jie/page/3/">3</a><a href="/jie/page/4/">4</a><a href="/jie/page/5/">5</a><span>…</span><a href="/jie/page/148/" class="laypage-last" title="尾页">尾页</a><a href="/jie/page/2/" class="laypage-next">下一页</a></div>
</div>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/index.css">
</head> <body style="margin: -2px">
<iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe>
<div class="dvContent">
<div class="dvquesleft"> <div class="dvqstitle">
<image class="imgbean" src="data:images/bean.jpg"> <span class="qsTitle">问答</span> <span class="back"><ab href="">《《返回上一页</a></span>
</div>
<div class="dvtabhead">
<div class="tabheads tabcurrent">全部问题</div>
<div class="tabheads">我的问题</div>
<div class="tabheads">关注问题</div>
<div class="tabheads">问题标签</div>
</div>
<div class="tabContent">
<div class="dvtags">
<a class="curenttag">待解决</a><span class="line"></span><a>高分</a><span class="line"></span><a>新回答</a><span class="line"></span><a>已解决</a>
</div>
<div class="tab">
<s:iterator value="pasteList" var="paste">
<div class="dvques">
<div class="quesCount">
<div class="count">8</div>
<div class="ques">
<s:property value="#paste.ansnum" />
</div>
</div>
<div class="quesContent" style="width: px; height: px; overflow: hidden; white-space: normal; text-overflow: ellipsis;">
<div class="quesTitle">
<s:property value="#paste.offer" />
<image src="data:images/bean.jpg" class="bean"> <span class="spanques"><s:property value="#paste.title" /></span>
</div>
<div class="qContent">
<s:property value="#paste.content" />
</div>
<div class="tags">
<span class="tag">excel</span><span class="tag">程序</span>
</div>
<div class="quesUser" style="margin-top: 28px; margin-right: 20px">
<image src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" class="imguser" /> <div class="userName">
<s:property value="#paste.user.username" />
<div class="liulan">
浏览(
<s:property value="#paste.createtime" />
)
<s:property value="#paste.user.username" />
</div>
</div>
</div>
</div>
</div>
</s:iterator>
<div style="text-align: center">
<div class="laypage-main">
<span class="laypage-curr">1</span><a href="/jie/page/2/">2</a><a href="/jie/page/3/">3</a><a href="/jie/page/4/">4</a><a href="/jie/page/5/">5</a><span>…</span><a href="/jie/page/148/" class="laypage-last" title="尾页">尾页</a><a href="/jie/page/2/" class="laypage-next">下一页</a>
</div>
</div> </div>
<div class="tab hidden">2</div>
<div class="tab hidden">3</div>
<div class="tab hidden">4</div>
</div>
</div>
<div class="dvquesright">
<div>
<buton class="btnques" onclick="location.href='add.jsp'">提个问题</buton>
</div>
<div class="dvorder">
<div class="orderTitle">专家排行榜</div>
<div class="users">
<image class="userface" src="data:images/0.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/1.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/2.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/3.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/4.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/5.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/6.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div> </div> </div> </div>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function() { $(".tabheads").click(
function() {
$(".tabheads").removeClass("tabcurrent").eq(
$(this).index()).addClass("tabcurrent");
$(".tab").hide().eq($(this).index()).show();
});
});
</script> </body>
</html>

index.jsp

  分析四个参数

    pageSize

    currentPage

    totalCount

    totalPage

  书写PageBean.java

  PageBean需要的属性

    //页面大小
private Integer pageSize;
//当前页
private Integer currentPage;
//总条数
private Integer totalCount;
//总页数
private Integer totalPage; //每一页显示的数据
private List list;

  书写PageBean构造方法

    public PageBean(Integer currentPage,Integer totalCount,Integer pageSize)
{
this.currentPage = currentPage;
this.totalCount = totalCount;
this.pageSize=pageSize; //安全校验
if(currentPage==null)
{
this.currentPage=1;
}
if(this.pageSize==null)
{
this.pageSize=8;
} //计算totalPage
this.totalPage=(int)Math.ceil(1.0*this.totalCount/this.pageSize); //安全校验
if(this.currentPage>this.totalPage)
{
this.currentPage=this.totalPage;
}
if(this.currentPage<1)
{
this.currentPage=1;
} }

  书写PageBean得到起始索引的方法

    public Integer getStart()
{
return (this.currentPage-1)*this.pageSize;
}

  分析PageBean

  帖子Web层

public String getData() throws Exception {

        PageBean pastePageBean = pasteService.getPastePageBean(currentPage);

        ActionContext.getContext().put("pastePageBean", pastePageBean);

        return "index";
}

   帖子Service层

    public PageBean getPastePageBean(Integer currentPage) {

        Integer totalCount = pasteDao.findAllPasteNum();
PageBean pageBean = new PageBean(currentPage,totalCount,8);
List<Paste> list = pasteDao.getPastePageList(pageBean.getStart(),pageBean.getPageSize());
pageBean.setList(list); return pageBean;
}

  获得数据库中帖子Dao层

    //查找所有帖子的数量
public Integer findAllPasteNum() {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select count(*) from paste";
NativeQuery query = session.createSQLQuery(sql);
BigInteger result = (BigInteger)query.uniqueResult(); return result.intValue();
} //分页
public List<Paste> getPastePageList(Integer start, Integer pageSize) {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select * from paste limit ?,?";
NativeQuery query = session.createSQLQuery(sql);
query.addEntity(Paste.class);
query.setParameter(1, start);
query.setParameter(2, pageSize);
List list = query.list(); return list;
}

package com.Gary.utils;

import java.util.List;

public class PageBean {

//     pageSize
// currentPage
// totalCount
// totalPage //页面大小
private Integer pageSize;
//当前页
private Integer currentPage;
//总条数
private Integer totalCount;
//总页数
private Integer totalPage; //每一页显示的数据
private List list; public PageBean(Integer currentPage,Integer totalCount,Integer pageSize)
{
this.currentPage = currentPage;
this.totalCount = totalCount;
this.pageSize = pageSize; //安全校验
if(this.currentPage == null)
{
this.currentPage = 1;
}
if(this.pageSize == null)
{
this.pageSize = 8;
} //计算totalPage
this.totalPage = (int) Math.ceil(1.0 * this.totalCount/this.pageSize);//所有的條數之和除以每頁顯示的條數向上取整 //安全校验
if(this.currentPage > this.totalPage)
{
this.currentPage = this.totalPage;
}
if(this.currentPage < 1)
{
this.currentPage = 1;
}
} //获得起始索引
public Integer getStart()
{
return (this.currentPage-1)*this.pageSize;//(第一個數-1)*第二個數
} public Integer getPageSize() {
return pageSize;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
} public Integer getCurrentPage() {
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
} public Integer getTotalCount() {
return totalCount;
} public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
} public Integer getTotalPage() {
return totalPage;
} public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
} public List getList() {
return list;
} public void setList(List list) {
this.list = list;
} }

PageBean.class

package com.Gary.web;

import java.util.List;

import com.Gary.domain.Paste;
import com.Gary.service.PasteService;
import com.Gary.utils.PageBean;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class GetDataAction extends ActionSupport{ private PasteService pasteService;
private Integer currentPage; public String getData() throws Exception { PageBean pastePageBean = pasteService.getPastePageBean(currentPage); ActionContext.getContext().put("pastePageBean", pastePageBean); return "index";
} public PasteService getPasteService() {
return pasteService;
} public void setPasteService(PasteService pasteService) {
this.pasteService = pasteService;
} public Integer getCurrentPage() {
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
}

GetDataAction.class

package com.Gary.service;

import java.util.List;

import com.Gary.dao.PasteDao;
import com.Gary.domain.Paste;
import com.Gary.utils.PageBean; public class PasteService { private PasteDao pasteDao; public PageBean getPastePageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum();
PageBean pageBean = new PageBean(currentPage,totalCount,8);
List<Paste> list = pasteDao.getPastePageList(pageBean.getStart(),pageBean.getPageSize());
pageBean.setList(list); return pageBean;
} public PasteDao getPasteDao() {
return pasteDao;
} public List<Paste> findAllPaste() { return pasteDao.findAllPaste(); } public void setPasteDao(PasteDao pasteDao) {
this.pasteDao = pasteDao;
} public void addPaste(Paste paste) { pasteDao.addPaste(paste); } }

PasteService.class

package com.Gary.dao;

import java.math.BigInteger;
import java.util.List; import org.hibernate.Session;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Paste; public class PasteDao extends HibernateDaoSupport{ public void addPaste(Paste paste) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
session.save(paste);
} //HQL
public List<Paste> findAllPaste() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //书写SQL语句
String hql = "from com.Gary.domain.Paste";
Query query = session.createQuery(hql); List<Paste> list = query.list(); return list;
} //查找所有帖子的数量
public Integer findAllPasteNum() {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select count(*) from paste";
NativeQuery query = session.createSQLQuery(sql);
BigInteger result = (BigInteger)query.uniqueResult(); return result.intValue();
} //分页
public List<Paste> getPastePageList(Integer start, Integer pageSize) {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select * from paste limit ?,?";
NativeQuery query = session.createSQLQuery(sql);
query.addEntity(Paste.class);
query.setParameter(1, start);
query.setParameter(2, pageSize);
List list = query.list(); return list;
} }

PasteDao.class

  修改分页Div

                    <div style="text-align: center">
<div class="laypage-main">
<a href="/jie/page/148/" class="laypage-last" title="尾页">首页</a>
<a href="/jie/page/2/" class="laypage-next">上一页</a>
<span class="laypage-curr">1</span>
<a href="/jie/page/2/">2</a>
<a href="/jie/page/3/">3</a>
<a href="/jie/page/4/">4</a>
<a href="/jie/page/5/">5</a>
<span>…</span>
<a href="/jie/page/148/" class="laypage-last" title="尾页">尾页</a>
<a href="/jie/page/2/" class="laypage-next">下一页</a>
</div>
</div>

    

  动态实现上一页,下一页跳转

<div style="text-align: center">
<div class="laypage-main">
<a href="/jie/page/148/" class="laypage-last" title="首页">首页</a>
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage - 1"/>" class="laypage-next">上一页</a>
<span class="laypage-curr">1</span>
<a href="/jie/page/2/">2</a>
<a href="/jie/page/3/">3</a>
<a href="/jie/page/4/">4</a>
<a href="/jie/page/5/">5</a>
<span>…</span>
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage + 1"/>" class="laypage-next">下一页</a>
<a href="/jie/page/148/" class="laypage-last" title="尾页">尾页</a>
</div>
</div>

  实现分页菜单栏

<div style="text-align: center">
<div class="laypage-main">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=1" class="laypage-last" title="首页">首页</a>
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage - 1"/>" class="laypage-next">上一页</a>
<s:if test="#pastePageBean.currentPage-3>0">
<span>…</span>
</s:if>
<s:if test="#pastePageBean.currentPage - 2>0">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage - 2"/>"><s:property value="#pastePageBean.currentPage-2"/></a>
</s:if>
<s:if test="#pastePageBean.currentPage - 1>0">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage - 1"/>"><s:property value="#pastePageBean.currentPage-1"/></a>
</s:if>
<!-- 当前页 -->
<span class="laypage-curr"> <s:property value="#pastePageBean.currentPage"/> </span> <s:if test="#pastePageBean.currentPage <#pastePageBean.totalPage">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage + 1"/>"><s:property value="#pastePageBean.currentPage+1"/></a>
</s:if>
<s:if test="#pastePageBean.currentPage + 1<#pastePageBean.totalPage">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage + 2"/>"><s:property value="#pastePageBean.currentPage+2"/></a>
</s:if>
<s:if test="#pastePageBean.currentPage + 2<#pastePageBean.totalPage">
<span>…</span>
</s:if>
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage + 1"/>" class="laypage-next">下一页</a>
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.totalPage"/>" class="laypage-last" title="尾页">尾页</a>
</div>
</div>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/index.css">
</head> <body style="margin: -2px">
<iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe>
<div class="dvContent">
<div class="dvquesleft"> <div class="dvqstitle">
<image class="imgbean" src="data:images/bean.jpg"> <span class="qsTitle">问答</span> <span class="back"><ab href="">《《返回上一页</a></span>
</div>
<div class="dvtabhead">
<div class="tabheads tabcurrent">全部问题</div>
<div class="tabheads">我的问题</div>
<div class="tabheads">关注问题</div>
<div class="tabheads">问题标签</div>
</div>
<div class="tabContent">
<div class="dvtags">
<a class="curenttag">待解决</a><span class="line"></span><a>高分</a><span class="line"></span><a>新回答</a><span class="line"></span><a>已解决</a>
</div>
<div class="tab">
<s:iterator value="#pastePageBean.list" var="paste">
<div class="dvques">
<div class="quesCount">
<div class="count">8</div>
<div class="ques">
<s:property value="#paste.ansnum" />
</div>
</div>
<div class="quesContent" style="width: px; height: px; overflow: hidden; white-space: normal; text-overflow: ellipsis;">
<div class="quesTitle">
<s:property value="#paste.offer" />
<image src="data:images/bean.jpg" class="bean"> <span class="spanques"><s:property value="#paste.title" /></span>
</div>
<div class="qContent">
<s:property value="#paste.content" />
</div>
<div class="tags">
<span class="tag">excel</span><span class="tag">程序</span>
</div>
<div class="quesUser" style="margin-top: 28px; margin-right: 20px">
<image src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" class="imguser" /> <div class="userName">
<s:property value="#paste.user.username" />
<div class="liulan">
浏览(
<s:property value="#paste.createtime" />
)
<s:property value="#paste.user.username" />
</div>
</div>
</div>
</div>
</div>
</s:iterator>
<div style="text-align: center">
<div class="laypage-main">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=1" class="laypage-last" title="首页">首页</a>
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage - 1"/>" class="laypage-next">上一页</a>
<s:if test="#pastePageBean.currentPage-3>0">
<span>…</span>
</s:if>
<s:if test="#pastePageBean.currentPage - 2>0">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage - 2"/>"><s:property value="#pastePageBean.currentPage-2"/></a>
</s:if>
<s:if test="#pastePageBean.currentPage - 1>0">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage - 1"/>"><s:property value="#pastePageBean.currentPage-1"/></a>
</s:if>
<!-- 当前页 -->
<span class="laypage-curr"> <s:property value="#pastePageBean.currentPage"/> </span> <s:if test="#pastePageBean.currentPage <#pastePageBean.totalPage">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage + 1"/>"><s:property value="#pastePageBean.currentPage+1"/></a>
</s:if>
<s:if test="#pastePageBean.currentPage + 1<#pastePageBean.totalPage">
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage + 2"/>"><s:property value="#pastePageBean.currentPage+2"/></a>
</s:if>
<s:if test="#pastePageBean.currentPage + 2<#pastePageBean.totalPage">
<span>…</span>
</s:if>
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage + 1"/>" class="laypage-next">下一页</a>
<a href="${pageContext.request.contextPath}/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.totalPage"/>" class="laypage-last" title="尾页">尾页</a>
</div>
</div> </div>
<div class="tab hidden">2</div>
<div class="tab hidden">3</div>
<div class="tab hidden">4</div>
</div>
</div>
<div class="dvquesright">
<div>
<buton class="btnques" onclick="location.href='add.jsp'">提个问题</buton>
</div>
<div class="dvorder">
<div class="orderTitle">专家排行榜</div>
<div class="users">
<image class="userface" src="data:images/0.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/1.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/2.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/3.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/4.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/5.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div>
<div class="users">
<image class="userface" src="data:images/6.gif" />
<div class="dvuser">
<div class="userTitle">陈有龙</div>
<div class="userdeital">大牛6级 豆:14006</div>
</div>
</div> </div> </div> </div>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function() { $(".tabheads").click(
function() {
$(".tabheads").removeClass("tabcurrent").eq(
$(this).index()).addClass("tabcurrent");
$(".tab").hide().eq($(this).index()).show();
});
});
</script> </body>
</html>

index.jsp

  分析最近热议模块

  将数据传递给前端

  最近热帖Web层

    public String getData() throws Exception {

        //得到帖子
PageBean pastePageBean = pasteService.getPastePageBean(currentPage);
ActionContext.getContext().put("pastePageBean", pastePageBean); //得到最近热帖
PageBean glanceoverPagebean = pasteService.getGlanceoverPageBean(currentPage);
ActionContext.getContext().put("glanceoverPagebean", glanceoverPagebean); return "index";
}

  最近热帖Service层

    public PageBean getGlanceoverPageBean(Integer currentPage) {

         Integer totalCount = pasteDao.findAllPasteNum();
PageBean glanceoverPageBean = new PageBean(currentPage,totalCount,8);
List<Paste> list = pasteDao.getGlanceoverPageList();
glanceoverPageBean.setList(list); return glanceoverPageBean;
} public PageBean getPastePageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum();
PageBean pageBean = new PageBean(currentPage,totalCount,8);
List<Paste> list = pasteDao.getPastePageList(pageBean.getStart(),pageBean.getPageSize());
pageBean.setList(list); return pageBean;
}

  

  最近热帖Dao层

    //最近热议
public List<Paste> getGlanceoverPageList() {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select * from paste order by offer desc limit 0,8";
NativeQuery query = session.createSQLQuery(sql);
query.addEntity(Paste.class);
List list = query.list(); return null;
}

  动态获得数据库中热帖数据

<dt class="fly-panel-title">最近热帖</dt>
<s:iterator value="#glanceoverPageBean.list" var="paste">
<dd>
<a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>">
<s:property value="#paste.title" />
</a>
<span>
<i class="iconfont"></i>
<s:property value="#paste.glanceover" />
</span>
</dd>
</s:iterator>

  分析最近热议模块

  书写最近热议后端代码

  最近热议Web层

    public String getData() throws Exception {

        //得到帖子
PageBean pastePageBean = pasteService.getPastePageBean(currentPage);
ActionContext.getContext().put("pastePageBean", pastePageBean); //得到最近热帖
PageBean glanceoverPageBean = pasteService.getGlanceoverPageBean(currentPage);
ActionContext.getContext().put("glanceoverPageBean", glanceoverPageBean); //得到最近热议
PageBean ansnumPageBean = pasteService.getAnsnumPageBean(currentPage);
ActionContext.getContext().put("ansnumPageBean", ansnumPageBean); return "index";
}

   最近热议Service层

    public PageBean getAnsnumPageBean(Integer currentPage) {
//获得所有的帖子数目
Integer totalCount = pasteDao.findAllPasteNum();
//创建PageBean
PageBean ansnumPageBean = new PageBean(currentPage, totalCount, 8);
//得到List
List<Paste> list = pasteDao.getAnsnumPageList();
//封装List
ansnumPageBean.setList(list);
return ansnumPageBean;
}

  Dao层获得数据库中的数据

    public List<Paste> getAnsnumPageList() {
//得到与当前线程绑定的session
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
//书写sql
String sql = "select * from paste order by ansnum desc limit 0,8";
//获得query
NativeQuery query = session.createSQLQuery(sql);
//将结果集封装为Paste对象
query.addEntity(Paste.class);
//获得sql的执行结果(结果为list)
List list = query.list();
return list;
}

  编写最近热议前端

<dl class="fly-panel fly-list-one">
<dt class="fly-panel-title">近期热议</dt>
<s:iterator value="#ansnumPageBean.list" var="paste">
<dd>
<a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>">
<s:property value="#paste.title" />
</a>
<span>
<i class="iconfont"></i>
<s:property value="#paste.ansnum" />
</span>
</dd>
</s:iterator>
</dl>

  

  查询专家排行榜

  编写专家排行榜

  专家排行榜Web层

private UserService userService;

public String getData() throws Exception {

        //得到帖子
PageBean pastePageBean = pasteService.getPastePageBean(currentPage);
ActionContext.getContext().put("pastePageBean", pastePageBean); //得到最近热帖
PageBean glanceoverPageBean = pasteService.getGlanceoverPageBean(currentPage);
ActionContext.getContext().put("glanceoverPageBean", glanceoverPageBean); //得到最近热议
PageBean ansnumPageBean = pasteService.getAnsnumPageBean(currentPage);
ActionContext.getContext().put("ansnumPageBean", ansnumPageBean); //得到专家排行
PageBean userPageBean = userService.getUserPageBean(currentPage);
ActionContext.getContext().put("userPageBean", userPageBean); return "index";
}

  专家排行榜Service层

    public PageBean getUserPageBean(Integer currentPage) {
Integer totalCount = userDao.findAllUserNum();
PageBean userPageBean = new PageBean(currentPage, totalCount, 8);
List<User> list = userDao.getUserPageBean();
userPageBean.setList(list); return userPageBean;
}

  专家排行榜Dao层

    public Integer findAllUserNum() {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select count(*) from user";
NativeQuery query = session.createSQLQuery(sql);
BigInteger result = (BigInteger) query.uniqueResult();
return result.intValue();
} public List<User> getUserPageBean() {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select * from user order by concat(coin,level) desc limit 0,8";
NativeQuery query = session.createSQLQuery(sql);
query.addEntity(User.class);
List list = query.list();
return list;
}

  专家排行榜前端

<div class="orderTitle">专家排行榜</div>

                <s:iterator value="#userPageBean.list" var="user">
<div class="users"> <image class="userface" src="${pageContext.request.contextPath }/<s:property value="#user.image"/>" />
<div class="dvuser">
<div class="userTitle">
<s:property value="#user.username" />
</div>
<div class="userdeital">
大牛
<s:property value="#user.level" />
级 豆:
<s:property value="#user.coin" />
</div>
</div>
</div>
</s:iterator>

  修改web.xml,实现发布自动跳转到获得数据库中的数据

    <display-name>Gary_SSHForum</display-name>
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

  创建一个default.jsp实现函数页面跳转

<body>
<% response.sendRedirect(request.getContextPath()+"/GetDataAction_getData"); %>
</body>

  修改分页标签样式格式

<div style="text-align: center">
<div class="laypage-main"> <a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage-1"/>" class="laypage-next">上一页</a>
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=1" class="laypage-last" title="尾页">首页</a>
<s:if test="#pastePageBean.currentPage-3>0">
<span>…</span>
</s:if>
<s:if test="#pastePageBean.currentPage-2>0">
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage-2"/>">
<s:property value="#pastePageBean.currentPage-2" />
</a>
</s:if>
<s:if test="#pastePageBean.currentPage-1>0">
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage-1"/>">
<s:property value="#pastePageBean.currentPage-1" />
</a>
</s:if> <!-- 当前页 -->
<span class="laypage-curr">
<s:property value="#pastePageBean.currentPage" />
</span> <s:if test="#pastePageBean.currentPage<#pastePageBean.totalPage">
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage+1"/>">
<s:property value="#pastePageBean.currentPage+1" />
</a>
</s:if>
<s:if test="#pastePageBean.currentPage+1<#pastePageBean.totalPage">
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage+2"/>">
<s:property value="#pastePageBean.currentPage+2" />
</a>
</s:if>
<s:if test="#pastePageBean.currentPage+2<#pastePageBean.totalPage">
<span>…</span>
</s:if>
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.totalPage"/>" class="laypage-last" title="尾页">尾页</a> <a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage+1"/>" class="laypage-next">下一页</a>
</div>
</div>

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>Gary_SSHForum</display-name>
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <!-- 让spring随着Web项目的启动而启动 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 读取配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param> <!-- 扩大session的范围 -->
<filter>
<filter-name>openSession</filter-name>
<filter-class>org.springframework.orm.hibernate5.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>openSession</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 让struts启动 -->
<filter>
<filter-name>struts</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!--开启动态方法调用 -->
<constant name="struts.devMode" value="true"></constant>
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant> <!-- 告诉struts不用自己创建Action,Spring来帮你创建 -->
<constant name="struts.objectFactory" value="spring"></constant>
<package name="Gary_SSHForum" namespace="/" extends="struts-default">
<!-- 允许全部方法 -->
<global-allowed-methods>regex:.*</global-allowed-methods>
<action name="UserAction_*" class="com.Gary.web.UserAction" method="{1}">
<result name="toLogin" type="redirect">/login.jsp</result>
<result name="login">/login.jsp</result>
<result name="toIndex" type="redirect">/index.jsp</result>
<result name="error">/login.jsp</result>
<result name="toRegisterSuccess" type="redirect">/registerSuccess.jsp</result>
</action> <action name="PasteAction_*" class="com.Gary.web.PasteAction" method="{1}">
<result name="toIndex" type="redirect">/index.jsp</result>
<result name="error">/login.jsp</result>
</action> <action name="GetDataAction_*" class="com.Gary.web.GetDataAction" method="{1}">
<result name="index" >/index.jsp</result>
</action> </package> </struts>

struts.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 配置数据源 -->
<bean name="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="jdbcUrl" value="jdbc:mysqL:///garyssh_forum"></property>
<property name="driverClass" value="com.mysql.jdbc.Driver"></property>
<property name="user" value="root"></property>
<property name="password" value="123456"></property>
</bean> <!-- 配置sessionFactory -->
<bean name="sessionFactory"
class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.show_sqp">true</prop>
<prop key="hibernate.format_sql">true</prop>
</props>
</property> <property name="mappingDirectoryLocations"
value="classpath:com/Gary/domain"></property> </bean> <!-- 配置事务的核心管理器 -->
<bean name="transactionManager"
class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> <!-- 通知 -->
<tx:advice id="advice"
transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" />
</tx:attributes>
</tx:advice> <!-- 织入 -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut
expression="execution(* com.Gary.service.*.*(..))" id="pc" />
<!-- 配置切面 切入点+通知 -->
<aop:advisor advice-ref="advice" pointcut-ref="pc" />
</aop:config> <!-- 配置Action -->
<bean name="userAction" class="com.Gary.web.UserAction" scope="prototype">
<property name="userService" ref="userService"></property>
</bean>
<bean name="pasteAction" class="com.Gary.web.PasteAction" scope="prototype">
<property name="pasteService" ref="pasteService"></property>
</bean>
<bean name="getDataAction" class="com.Gary.web.GetDataAction" scope="prototype">
<property name="pasteService" ref="pasteService"></property>
<property name="userService" ref="userService"></property>
</bean> <!-- 配置Service -->
<bean name="userService" class="com.Gary.service.UserService">
<property name="userDao" ref="userDao"></property>
</bean>
<bean name="pasteService" class="com.Gary.service.PasteService">
<property name="pasteDao" ref="pasteDao"></property>
</bean> <!-- 配置Dao -->
<bean name="userDao" class="com.Gary.dao.UserDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean name="pasteDao" class="com.Gary.dao.PasteDao">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean> </beans>

applicationContext.xml

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/index.css">
<link rel="stylesheet" href="res/css/global.css">
</head> <body style="margin: -2px">
<iframe src="head.jsp" scrolling="no" width="100%" height="110px"></iframe>
<div class="dvContent">
<div class="dvquesleft"> <div class="dvqstitle">
<image class="imgbean" src="data:images/bean.jpg"> <span class="qsTitle">问答</span> <span class="back">
<ab href="">《《返回上一页</a>
</span>
</div>
<div class="dvtabhead">
<div class="tabheads tabcurrent">全部问题</div>
<div class="tabheads">我的问题</div>
<div class="tabheads">关注问题</div>
<div class="tabheads">问题标签</div>
</div>
<div class="tabContent">
<div class="dvtags">
<a class="curenttag">待解决</a>
<span class="line"></span>
<a>高分</a>
<span class="line"></span>
<a>新回答</a>
<span class="line"></span>
<a>已解决</a>
</div>
<div class="tab">
<s:iterator value="#pastePageBean.list" var="paste">
<div class="dvques">
<div class="quesCount">
<div class="count">
<s:property value="#paste.ansnum" />
</div>
<div class="ques">回答数</div>
</div>
<div class="quesContent">
<div class="quesTitle">
<s:property value="#paste.offer" />
<image src="data:images/bean.jpg" class="bean"> <span class="spanques"> <a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>">
<s:property value="#paste.title" />
</a>
</span>
</div>
<div class="qContent" style="width: 630px; height: 34px; overflow: hidden; white-space: normal; text-overflow: ellipsis;">
<p>
<s:property value="#paste.content" />
</p>
</div>
<div class="tags">
<span class="tag">excel</span>
<span class="tag">程序</span>
</div>
<div class="quesUser" style="margin-top: 20px; margin-right: 20px">
<image src="${pageContext.request.contextPath }/<s:property value="#paste.user.image"/>" class="imguser" /> <div class="userName">
<s:property value="#paste.user.username" />
<div class="liulan">
浏览(
<s:property value="#paste.glanceover" />
)
<s:property value="#paste.createtime" />
</div>
</div> </div>
</div>
</div>
</s:iterator>
<div style="text-align: center">
<div class="laypage-main"> <a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage-1"/>" class="laypage-next">上一页</a>
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=1" class="laypage-last" title="尾页">首页</a>
<s:if test="#pastePageBean.currentPage-3>0">
<span>…</span>
</s:if>
<s:if test="#pastePageBean.currentPage-2>0">
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage-2"/>">
<s:property value="#pastePageBean.currentPage-2" />
</a>
</s:if>
<s:if test="#pastePageBean.currentPage-1>0">
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage-1"/>">
<s:property value="#pastePageBean.currentPage-1" />
</a>
</s:if> <!-- 当前页 -->
<span class="laypage-curr">
<s:property value="#pastePageBean.currentPage" />
</span> <s:if test="#pastePageBean.currentPage<#pastePageBean.totalPage">
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage+1"/>">
<s:property value="#pastePageBean.currentPage+1" />
</a>
</s:if>
<s:if test="#pastePageBean.currentPage+1<#pastePageBean.totalPage">
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage+2"/>">
<s:property value="#pastePageBean.currentPage+2" />
</a>
</s:if>
<s:if test="#pastePageBean.currentPage+2<#pastePageBean.totalPage">
<span>…</span>
</s:if>
<a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.totalPage"/>" class="laypage-last" title="尾页">尾页</a> <a href="${pageContext.request.contextPath }/GetDataAction_getData?currentPage=<s:property value="#pastePageBean.currentPage+1"/>" class="laypage-next">下一页</a>
</div>
</div>
</div>
<div class="tab hidden">2</div>
<div class="tab hidden">3</div>
<div class="tab hidden">4</div>
</div>
</div>
<div class="dvquesright">
<div>
<buton class="btnques" onclick="location.href='add.jsp'">提个问题</buton>
</div> <div class="dvorder"> <dl class="fly-panel fly-list-one">
<dt class="fly-panel-title">最近热帖</dt>
<s:iterator value="#glanceoverPageBean.list" var="paste">
<dd>
<a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>">
<s:property value="#paste.title" />
</a>
<span>
<i class="iconfont"></i>
<s:property value="#paste.glanceover" />
</span>
</dd>
</s:iterator>
</dl> <dl class="fly-panel fly-list-one">
<dt class="fly-panel-title">近期热议</dt>
<s:iterator value="#ansnumPageBean.list" var="paste">
<dd>
<a href="${pageContext.request.contextPath }/PasteAction_getDetail?pasteid=<s:property value="#paste.id"/>">
<s:property value="#paste.title" />
</a>
<span>
<i class="iconfont"></i>
<s:property value="#paste.ansnum" />
</span>
</dd>
</s:iterator>
</dl> <div class="orderTitle">专家排行榜</div> <s:iterator value="#userPageBean.list" var="user">
<div class="users"> <image class="userface" src="${pageContext.request.contextPath }/<s:property value="#user.image"/>" />
<div class="dvuser">
<div class="userTitle">
<s:property value="#user.username" />
</div>
<div class="userdeital">
大牛
<s:property value="#user.level" />
级 豆:
<s:property value="#user.coin" />
</div>
</div>
</div>
</s:iterator> </div> </div> </div>
<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
$(function() { $(".tabheads").click(
function() {
$(".tabheads").removeClass("tabcurrent").eq(
$(this).index()).addClass("tabcurrent");
$(".tab").hide().eq($(this).index()).show();
});
});
</script> </body>
</html>

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<% response.sendRedirect(request.getContextPath()+"/GetDataAction_getData"); %>
</body>
</html>

default.jso

package com.Gary.utils;

import java.util.List;

public class PageBean {

//     pageSize
// currentPage
// totalCount
// totalPage //页面大小
private Integer pageSize;
//当前页
private Integer currentPage;
//总条数
private Integer totalCount;
//总页数
private Integer totalPage; //每一页显示的数据
private List list; public PageBean(Integer currentPage,Integer totalCount,Integer pageSize)
{
this.currentPage = currentPage;
this.totalCount = totalCount;
this.pageSize = pageSize; //安全校验
if(this.currentPage == null)
{
this.currentPage = 1;
}
if(this.pageSize == null)
{
this.pageSize = 8;
} //计算totalPage
this.totalPage = (int) Math.ceil(1.0 * this.totalCount/this.pageSize);//所有的條數之和除以每頁顯示的條數向上取整 //安全校验
if(this.currentPage > this.totalPage)
{
this.currentPage = this.totalPage;
}
if(this.currentPage < 1)
{
this.currentPage = 1;
}
} //获得起始索引
public Integer getStart()
{
return (this.currentPage-1)*this.pageSize;//(第一個數-1)*第二個數
} public Integer getPageSize() {
return pageSize;
} public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
} public Integer getCurrentPage() {
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
} public Integer getTotalCount() {
return totalCount;
} public void setTotalCount(Integer totalCount) {
this.totalCount = totalCount;
} public Integer getTotalPage() {
return totalPage;
} public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
} public List getList() {
return list;
} public void setList(List list) {
this.list = list;
} }

PageBean.class

package com.Gary.web;

import java.util.List;

import com.Gary.domain.Paste;
import com.Gary.service.PasteService;
import com.Gary.service.UserService;
import com.Gary.utils.PageBean;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport; public class GetDataAction extends ActionSupport{ private PasteService pasteService;
private UserService userService;
public UserService getUserService() {
return userService;
} public void setUserService(UserService userService) {
this.userService = userService;
} private Integer currentPage; public String getData() throws Exception { //得到帖子
PageBean pastePageBean = pasteService.getPastePageBean(currentPage);
ActionContext.getContext().put("pastePageBean", pastePageBean); //得到最近热帖
PageBean glanceoverPageBean = pasteService.getGlanceoverPageBean(currentPage);
ActionContext.getContext().put("glanceoverPageBean", glanceoverPageBean); //得到最近热议
PageBean ansnumPageBean = pasteService.getAnsnumPageBean(currentPage);
ActionContext.getContext().put("ansnumPageBean", ansnumPageBean); //得到专家排行
PageBean userPageBean = userService.getUserPageBean(currentPage);
ActionContext.getContext().put("userPageBean", userPageBean); return "index";
} public PasteService getPasteService() {
return pasteService;
} public void setPasteService(PasteService pasteService) {
this.pasteService = pasteService;
} public Integer getCurrentPage() {
return currentPage;
} public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
}

GetDataAction.class

package com.Gary.service;

import java.util.List;

import com.Gary.dao.PasteDao;
import com.Gary.domain.Paste;
import com.Gary.utils.PageBean; public class PasteService { private PasteDao pasteDao; public PageBean getGlanceoverPageBean(Integer currentPage) {
Integer totalCount = pasteDao.findAllPasteNum();
PageBean glanceoverPageBean = new PageBean(currentPage, totalCount, 8);
List<Paste> list = pasteDao.getGlanceoverPageList();
glanceoverPageBean.setList(list); return glanceoverPageBean;
} public PageBean getPastePageBean(Integer currentPage) { Integer totalCount = pasteDao.findAllPasteNum();
PageBean pageBean = new PageBean(currentPage,totalCount,8);
List<Paste> list = pasteDao.getPastePageList(pageBean.getStart(),pageBean.getPageSize());
pageBean.setList(list); return pageBean;
} public PasteDao getPasteDao() {
return pasteDao;
} public List<Paste> findAllPaste() { return pasteDao.findAllPaste(); } public void setPasteDao(PasteDao pasteDao) {
this.pasteDao = pasteDao;
} public void addPaste(Paste paste) { pasteDao.addPaste(paste); } public PageBean getAnsnumPageBean(Integer currentPage) {
//获得所有的帖子数目
Integer totalCount = pasteDao.findAllPasteNum();
//创建PageBean
PageBean ansnumPageBean = new PageBean(currentPage, totalCount, 8);
//得到List
List<Paste> list = pasteDao.getAnsnumPageList();
//封装List
ansnumPageBean.setList(list);
return ansnumPageBean;
} }

PasteService.class

package com.Gary.service;

import java.math.BigInteger;
import java.util.List; import com.Gary.dao.UserDao;
import com.Gary.domain.User;
import com.Gary.utils.PageBean; public class UserService { private UserDao userDao; public PageBean getUserPageBean(Integer currentPage) {
Integer totalCount = userDao.findAllUserNum();
PageBean userPageBean = new PageBean(currentPage, totalCount, 8);
List<User> list = userDao.getUserPageBean();
userPageBean.setList(list); return userPageBean;
} public User findUserByUsernameReturnUser(User user) { return userDao.findUserByUsernameReturnUser(user);
} public int checkUser(User user) {
User temp = userDao.findUserByUsernameReturnUser(user);
//用户名不存在
if(temp==null)
{
return 1;
}
//判断密码是否相同
if(temp.getPassword().equals(user.getPassword()))
{
if(temp.getState()==1)
{
//登陆成功
return 0;
}else {
//没有激活
return 3;
}
}else {
//密码错误
return 2;
} } public UserDao getUserDao() {
return userDao;
} public void activeUser(String userCode) {
// TODO Auto-generated method stub
userDao.activeUser(userCode);
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public void addUser(User user) {
// TODO Auto-generated method stub
userDao.addUser(user);
} public boolean findUserByUsername(String username) {
// TODO Auto-generated method stub
Long count = userDao.findUserByUsernameReturnNum(username);
if(count==0)
return true;
else
return false;
} }

UserService.class

package com.Gary.domain;

public class Paste {

    private String id;
private String title;
private String content;
private Integer offer;
private Integer ansnum;
private String createtime;
private Integer glanceover;
//是否结帖
private Integer solve;
private Integer isdelete; private User user; public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
} public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Integer getOffer() {
return offer;
}
public void setOffer(Integer offer) {
this.offer = offer;
}
public Integer getAnsnum() {
return ansnum;
}
public void setAnsnum(Integer ansnum) {
this.ansnum = ansnum;
}
public String getCreatetime() {
return createtime;
}
public void setCreatetime(String createtime) {
this.createtime = createtime;
}
public Integer getGlanceover() {
return glanceover;
}
public void setGlanceover(Integer glanceover) {
this.glanceover = glanceover;
}
public Integer getSolve() {
return solve;
}
public void setSolve(Integer solve) {
this.solve = solve;
}
public Integer getIsdelete() {
return isdelete;
}
public void setIsdelete(Integer isdelete) {
this.isdelete = isdelete;
} }

Paste.class

package com.Gary.dao;

import java.math.BigInteger;
import java.util.List; import org.hibernate.Session;
import org.hibernate.query.NativeQuery;
import org.hibernate.query.Query;
import org.springframework.orm.hibernate5.support.HibernateDaoSupport; import com.Gary.domain.Paste; public class PasteDao extends HibernateDaoSupport{ public void addPaste(Paste paste) { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
session.save(paste);
} //HQL
public List<Paste> findAllPaste() { Session session = getHibernateTemplate().getSessionFactory().getCurrentSession(); //书写SQL语句
String hql = "from com.Gary.domain.Paste";
Query query = session.createQuery(hql); List<Paste> list = query.list(); return list;
} //查找所有帖子的数量
public Integer findAllPasteNum() {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select count(*) from paste";
NativeQuery query = session.createSQLQuery(sql);
BigInteger result = (BigInteger)query.uniqueResult(); return result.intValue();
} //分页
public List<Paste> getPastePageList(Integer start, Integer pageSize) {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select * from paste limit ?,?";
NativeQuery query = session.createSQLQuery(sql);
query.addEntity(Paste.class);
query.setParameter(1, start);
query.setParameter(2, pageSize);
List<Paste> list = query.list(); return list;
} //最近热议
public List<Paste> getGlanceoverPageList() {
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
String sql = "select * from paste order by glanceover desc limit 0,8";
NativeQuery query = session.createSQLQuery(sql);
query.addEntity(Paste.class);
List list = query.list();
return list;
} public List<Paste> getAnsnumPageList() {
//得到与当前线程绑定的session
Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
//书写sql
String sql = "select * from paste order by ansnum desc limit 0,8";
//获得query
NativeQuery query = session.createSQLQuery(sql);
//将结果集封装为Paste对象
query.addEntity(Paste.class);
//获得sql的执行结果(结果为list)
List list = query.list();
return list;
} }

PasteDao.class

JavaWeb_(SSH论坛)_四、页面显示的更多相关文章

  1. JavaWeb_(SSH论坛)_一、项目入门

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 项目已上传至gi ...

  2. JavaWeb_(SSH论坛)_七、辅助模块

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 为避免代码冗余, ...

  3. JavaWeb_(SSH论坛)_六、点赞模块

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 联合主键 创建p ...

  4. JavaWeb_(SSH论坛)_五、帖子模块

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 回复帖子 分析回 ...

  5. JavaWeb_(SSH论坛)_三、用户模块

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 User表 id ...

  6. JavaWeb_(SSH论坛)_二、框架整合

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 导入Jar包 导 ...

  7. JavaWeb_(Mybatis框架)主配置文件介绍_四

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

  8. Django(四) 后台管理:创建管理员、注册模型类、自定义管理页面显示内容

    后台管理 第1步.本地化:设置语言.时区 修改project1/settings.py #LANGUAGE_CODE = 'en-us' LANGUAGE_CODE = 'zh-hans' #设置语言 ...

  9. 关于PHP页面显示乱码问题的解决

    关于PHP页面显示乱码问题的解决 网页乱码一直是网络编程高手都头痛的问题,我是一个PHP Web编程的初学者,学习当中也遇到了这个问题,查找了相关的资源,总结如下: 一般的中文编码:gb2312,gb ...

随机推荐

  1. [HDU517] 小奇的集合

    题目链接 显然有贪心每次选择最大的两个数来做. 于是暴力地把最大的两个数调整到非负(暴力次数不超过1e5),接下来使用矩阵乘法即可. \[ \begin{pmatrix} B'\\S'\\T' \en ...

  2. celery异步发送邮件

    利用Django框架发送邮件的详细过程,在前两天的博客中有所记录,但是单纯的那样发邮件是有非常大的问题的,这就需要celery异步发送来解决 首先我们来看一下邮件发送的过程: Django网站先发送到 ...

  3. redis 单线程的理解

    单线程模型 Redis客户端对服务端的每次调用都经历了发送命令,执行命令,返回结果三个过程.其中执行命令阶段,由于Redis是单线程来处理命令的,所有每一条到达服务端的命令不会立刻执行,所有的命令都会 ...

  4. LoadRunner之使用JSEESIONID访问网站

    LoadRunner使用笔记 JSESSIONID的含义:https://www.cnblogs.com/caiwenjing/p/8081391.html 1.使用JSESSIONID访问网站 Ac ...

  5. Charles学习(三)之使用Map local代理本地静态资源以及配置网页代理在Mac模拟器调试iOS客户端

    前言 问题一:我们在App内嵌H5开发的过程中,肯定会遇到一个问题就是我不想在chrome的控制台中调试,我想要在手机上调试,那么如何解决这个问题呢? 问题二:我们期待调试时达到的效果就是和Charl ...

  6. 简析P和NP问题的概念

    简析P和NP问题的概念 本文系作者学习笔记,内容均来源于网络,如有侵权,请联系删除 P类问题:所有能用多项式时间算法计算得到结果的问题,称为多项式问题,也就是P(polynomial). 多项式时间举 ...

  7. loj 6043「雅礼集训 2017 Day7」蛐蛐国的修墙方案

    loj 爆搜? 爆搜! 先分析一下,因为我们给出的是一个排列,然后让\(i\)给\(p_i\)连边,那么我们一定会得到若干个环,最后要使得所有点度数为1,也就是这些环有完备匹配,那么最后一定全是偶环. ...

  8. 主流浏览器内核(IE、Chrome、Firefox、Safari、Opera)

    IE浏览器,使用Trident浏览器内核,又称为IE内核.只用于Windows平台,而且并不是开源的: chrome浏览器,目前使用的是Blink浏览器内核.浏览器内核的演进过程:Chromium  ...

  9. TypeScript 和 JavaScript 的区别

    TypeScript 和 JavaScript 是目前项目开发中较为流行的两种脚本语言,我们已经熟知 TypeScript 是 JavaScript 的一个超集.JavaScript 和 TypeSc ...

  10. 从FBV到CBV一(开始)

    span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }.CodeMirror ...