前言:

MVC架构中,功能包括DAO层,SERVICE层,ENTITY层,CONTROLLER层,UTIL层
1.其中DAO层,也就是和数据库打交道,夹在业务逻辑与数据库资源的中间
2.service层,也就是服务层,负责业务逻辑
3.controller层,控制层,负责接收数据,交给service层处理业务逻辑,service处理好数据返回给controller,由controller判断返回什么数据给用户
4.entity 实体类层,controller层有一个封装数据的地方,封装到这个实体类
5.util 公共方法

目录:


代码段:

1.MainPageService.java

(其中的jdbc解释见博客)
https://xulinjie.blog.csdn.net/article/details/80285491?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

package com.mrkj.ygl.service;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.UUID; import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;@Service
public class MainPageService {//注入Spring JdbcTemplate@ResourceJdbcTemplate jdbc;//注入时间格式化@ResourceSimpleDateFormat sdf;/*** * @param content 帖子内容* @param mainTitle 帖子标题* @param mainCreatuser 发帖人,这里我们使用用户IP作为发帖* @return*/public int saveMainContent(String content,String mainTitle,String mainCreatuser){//定义sql语句,这里的sql使用的是防注入模式,VALUES的值使用的是?占位符String sql_save_mymain = "INSERT INTO my_main "+ "(main_id,main_title,main_content,"+ "main_creatime,main_creatuser,main_commend)"+ " VALUES (?,?,?,?,?,?)";String sql_save_myinfo = "INSERT INTO my_info "+ "(main_id,info_reply,info_see,"+ "info_lastuser,info_lastime) "+ "VALUES (?,0,0,?,?)";//表id使用的是UUIDString mainId = UUID.randomUUID().toString();//时间格式化,格式要与数据库中的datatime相对应yyyy-MM-dd hh:mm:sssdf.applyPattern("yyyy-MM-dd hh:mm:ss");//获取当前时间作为创建时间String mainCreatime = sdf.format(new Date());//精华帖标记,0普通帖,1精华帖Integer mainCommend = 0;//初始化myinfo表数据,注意my_info表的id为自增长所以这里并没有设置info_id的值jdbc.update(sql_save_myinfo, mainId,mainCreatuser,mainCreatime);//执行update语句,第一个参数sql语句,后面可以写任意多的参数return jdbc.update(sql_save_mymain, mainId,mainTitle,content,mainCreatime,mainCreatuser,mainCommend);}public List<Map<String, Object> >  getMainPage(int row,int offset){//分页查找my_main左连接(left join)my_info约定好每页最多显示40条帖子String sql_select_mymain = "SELECT main.*,info.info_id,info.info_reply,info.info_see,"+ "info.info_lastuser,info.info_lastime FROM mrbbs.my_main as main "+ "left join my_info as info on main.main_id = info.main_id "+ "order by main.main_commend,main.main_creatime desc limit ?,?";//一定要认真仔细的查看空格,代码4、5行结尾有一个空格return jdbc.queryForList(sql_select_mymain,row,offset);}public Long getMainCount(){//是用count关键字,查询总条数String sql_select_mymain = "select count(main_id) as count from my_main";//执行SQL语句,返回总条数return (Long)jdbc.queryForMap(sql_select_mymain).get("count");
}public String getPage (Long count,Integer currentPage,Integer offset){//数据Long currentLong = Long.parseLong(currentPage+"");Long countPage = 0L;//这里计算总页数if(count%offset!=0){countPage = count/offset+1; }else{countPage = count/offset;}//使用StringBuffer拼接字符串StringBuffer sb = new StringBuffer();//前一页判断,判断当前页数大于1则存在前一页,否则不存在前一页if (currentPage> 1){sb.append("<span class=\"page\"> <a href=\"?page="+(currentPage-1));sb.append("\"> «</a> </span> ");}else{sb.append("<span class=\"page\"> <a href=\"?page=1");sb.append("\"> «</a> </span> ");}sb.append("<span class=\"page\" style=\"width: 50px !important;\"> ");sb.append("<a href=\"?page=1");sb.append("\"> start</a> ");sb.append("</span> ");//中间页数导航,中间最多显示5页,这里的计算有些复杂,判断了三次//第一次判断总页数减去当前页数加1大于等于5,证明向后存在5页//假设我们当前页数为2,那么我们中间导航显示为2、3、4、5、6if ((countPage-currentLong+1) >=5){for (Long i = currentLong ; i<currentPage+5;i++){sb.append("<span class=\"page\"> ");sb.append("<a href=\"?page="+i);sb.append("\"> "+i+"</a> ");sb.append("</span> ");}//第二次判断,基于上一次的判断不成立,那么证明当前页数向后不足5页//这时候判断总页数减4,判断中间导航是否能够支撑5页,假设总页数为10//当前页数为7,7向后不足5页,那么判断总页数是否够支撑5页,用总页数-4//如果够5页,那么得出一个结论是当前页数向后不够5页,总页数大于或等于5页//当前页数包含在最后5页,那么中间导航显示的就是6、7、8、9、10}else if (countPage-4 >  0){for (long i = countPage-4 ; i<= countPage;i++){sb.append("<span class=\"page\"> ");sb.append("<a href=\"?page="+i);sb.append("\"> "+i+"</a> ");sb.append("</span> ");}//经过上面两轮的判断,可以直接得出结论,总页数不足支撑5页//那么从1开始到总页数结束}else{for (long i = 1 ; i<= countPage;i++){sb.append("<span class=\"page\"> ");sb.append("<a href=\"?page="+i);sb.append("\"> "+i+"</a> ");sb.append("</span> ");}}//判断最后一页,最后一页等于总页数,这里只要判断是否存在1页,不存在最后一页设为1sb.append("<span class=\"page\" style=\"width: 40px !important;\"> ");sb.append("<a href=\"?page="+(countPage==0?1:countPage));sb.append("\"> end</a> ");sb.append("</span> ");//判断是否存在下一页,当前页数小于总页数,那么存在最后一页if (currentLong<countPage){sb.append("<span class=\"page\"> ");sb.append("<a href=\"?page="+currentLong+1);sb.append("\"> »</a> ");sb.append("</span> ");}else{sb.append("<span class=\"page\"> ");sb.append("<a href=\"?page="+currentLong);sb.append("\"> »</a> ");sb.append("</span> ");}//输出总页数sb.append("<span> ");sb.append("共"+countPage+"页");sb.append("</span> ");return sb.toString();}}

2.SecondPageService

package com.mrkj.ygl.service;import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;import javax.annotation.Resource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
//@service注解声明通知Spring该层为服务层,如果服务层不使用@Service注解声明
//导致控制层无法注入
@Service
public class SecondPageService {//注入Spring JdbcTemplate,在resource资源包下//“com.mrkj.ygl.config.RootConfig.java”文件下配置JdbcTemplate,否则无法注入@ResourceJdbcTemplate jdbc;//获取帖子详细信息包括主贴跟帖public Map<String,Object> getMainAndSeconds(String mainId,Integer start,Integer offset){//定义SQL语句,查询主贴String sql_select_mymain = "select main_id,main_title,"+ "main_content,DATE_FORMAT(main_creatime,'%Y年%m月%d日 %h点%i分%s秒') "+ "as main_creatime,main_creatuser,"+ "main_commend from my_main where main_id = ?";//定义SQL语句,查询跟帖String sql_select_mysecond = "select sec_id,main_id,"+ "sec_content,DATE_FORMAT(sec_creatime,'%Y年%m月%d日 %h点%i分%s秒') "+ "as sec_creatime,sec_creatuser,sec_sequence"+ " from my_second where main_id = ? ORDER BY sec_creatime"+ " LIMIT ?,?";//执行SQL语句,获取主贴信息Map<String, Object> mainContent = jdbc.queryForMap(sql_select_mymain,mainId);//判断主贴是否存在,如果存在查找跟帖if (mainContent != null){List<Map<String, Object> > seconds= jdbc.queryForList(sql_select_mysecond,mainId,start,offset);mainContent.put("seconds", seconds);}//返回帖子模型return mainContent;}public int saveSecondPage (String main_id,String content,String creatuser){String sql_insert_mysecond = "insert INTO my_second "+ "(sec_id,main_id,sec_content,sec_creatime,sec_creatuser,sec_sequence) "+ "VALUES (?,?,?,now(),?,'1')";return jdbc.update(sql_insert_mysecond,UUID.randomUUID().toString(),main_id,content,creatuser);}public Long getSecondCount(String mainId){//是用count关键字,查询总条数String sql_select_mymain = "select count(sec_id) as count from my_second where main_id=?";//执行SQL语句,返回总条数return (Long)jdbc.queryForMap(sql_select_mymain,mainId).get("count");}//count:数据库当中数据总条数//currentPage:当前页数//offset:每页显示多少条数护具//parm:附加参数 public String getPage (Long count,Integer currentPage,Integer offset,Map<String,String> parm){//将当前页数转换为Long类型,统一类型方便计算Long currentLong = Long.parseLong(currentPage+"");//记录总页数,初始化给定值为0L。因为是长整形所以要在数字后面加L Long countPage = 0L;//计算总页数,根据数据库数据总条数与每页显示数,计算总页数//使用求余运算,判断是否整除,如果整除,使用总条数除以每页记录数,得出总页数//如果没有整除那么证明有余数,使用总条数除以每页记录数加一得出总页数if(count%offset!=0){countPage = count/offset+1;}else{countPage = count/offset;}//将parm里的参数拼接成URL参数StringBuffer sbParm = new StringBuffer("");//判断parm是否为空,设置额外附加参数if (parm!=null){//从Map类型获取entrySet,Entry是Map的一个元素,以键值对呈现Set<Entry<String, String>>  entrySet = parm.entrySet();//迭代Set获取Entry元素,将键作为参数名,值作为参数值拼接成URL参数for (Entry<String, String>  entry : entrySet){sbParm.append("&"+entry.getKey()+"="+entry.getValue());}}StringBuffer sb = new StringBuffer();//前一页,判断当前页数是否大于1if (currentPage> 1){//大于1的话,前一页就等于当前页减1sb.append("<span class=\"page\"> <a href=\"?page="+(currentPage-1));sb.append(sbParm);sb.append("\"> «</a> </span> ");}else{//不大于1的话,证明是第一页sb.append("<span class=\"page\"> <a href=\"?page=1");//增加URL参数sb.append(sbParm);sb.append("\"> «</a> </span> ");}//第一页sb.append("<span class=\"page\" style=\"width: 50px !important;\"> ");//连接永远指向第一页sb.append("<a href=\"?page=1");//增加URL参数sb.append(sbParm);sb.append("\"> start</a> ");sb.append("</span> ");//如果总页数减去当前页数大于5,那么证明可以显示5个分页if ((countPage-currentLong+1) >=5){for (Long i = currentLong ; i<currentPage+5;i++){sb.append("<span class=\"page\"> ");sb.append("<a href=\"?page="+i);//增加URL参数sb.append(sbParm);sb.append("\"> "+i+"</a> ");sb.append("</span> ");}}//如果总页数减4大于0那么证明从总页数任然够5页else if (countPage-4 >  0){for (long i = countPage-4 ; i<= countPage;i++){//顺序迭代页面 sb.append("<span class=\"page\"> ");sb.append("<a href=\"?page="+i);//增加URL参数sb.append(sbParm);sb.append("\"> "+i+"</a> ");sb.append("</span> ");}}//否则总页数不够5页else{for (long i = 1 ; i<= countPage;i++){//顺序迭代页面sb.append("<span class=\"page\"> ");sb.append("<a href=\"?page="+i);//增加URL参数sb.append(sbParm);sb.append("\"> "+i+"</a> ");sb.append("</span> ");}}//增加最后一页sb.append("<span class=\"page\" style=\"width: 40px !important;\"> ");//这里使用了三目表达式,判断总页数是否为0,如果是0返回1否则返回总页数sb.append("<a href=\"?page="+(countPage==0?1:countPage));//增加URL参数sb.append(sbParm);sb.append("\"> end</a> ");sb.append("</span> ");//判断是否拥有下一页if (currentLong<countPage){sb.append("<span class=\"page\"> ");//如果满足条件下一页为当前页加1sb.append("<a href=\"?page="+currentLong+1);sb.append(sbParm);sb.append("\"> »</a> ");sb.append("</span> ");}else{sb.append("<span class=\"page\"> ");//为满足条件,下一页为当前页sb.append("<a href=\"?page="+currentLong);sb.append(sbParm);sb.append("\"> »</a> ");sb.append("</span> ");}sb.append("<span> ");sb.append("共"+countPage+"页");sb.append("</span> ");return sb.toString();}}

3.mainPageController

package com.mrkj.ygl.controller;import java.util.List;
import java.util.Map;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;import com.mrkj.ygl.service.MainPageService;//@Controller注解声明该类为Spring控制类,继而通过@requestMapping注解声明的路径映射
//如果不使用@Controller注解,@requestMapping注解也会失效
@Controller
public class MainPageController {// @Resource,Javax.annotation.Resource,该注解并不是Spring注解,但是Spring支持该注解注入@ResourceMainPageService mps;// 被rquestMapping注解声明的方法,会自动注入// request:该参数由Spring注入// content:该参数由前端传递过来,记录了富文本数据,参数名称要与传递过来的参数名要一致// mainTitle:该参数由前端传递过来,记录了帖子标题,参数名称要与传递过来的参数名要一致@RequestMapping(value = "/saveUeditorContent")public ModelAndView saveUeditor(HttpServletRequest request, String content, String mainTitle) {ModelAndView mav = new ModelAndView();// 获取客户端IP地址作为发帖人String mainCreatuser = request.getRemoteAddr();int result = mps.saveMainContent(content, mainTitle, mainCreatuser);// 根据result判断是否向数据库当中插入了一条数据if (result == 1) {// 如果数据插入成功,重新刷新页面数据mav.setViewName("redirect:/goMainPage");} else {// 如果数据插入失败,设置视图指向错误页面mav.setViewName("myJSP/error");}return mav;}// 初始化论坛主页面@RequestMapping("/goMainPage")public ModelAndView goMainPage(HttpServletRequest request,@RequestParam(name = "page", defaultValue = "1") Integer page,@RequestParam(name = "row", defaultValue = "40") Integer row) {ModelAndView mav = new ModelAndView("myJSP/mainPage");// 获取main 与 infoList<Map<String, Object>> mainContents = mps.getMainPage((page - 1) * row, row);mav.addObject("main", mainContents);// 获取总共多少帖子Long count = mps.getMainCount();// 获取分页方法String pageHtml = mps.getPage(count, page, row);mav.addObject("pageHtml", pageHtml);return mav;}}

4.SecondPageController

package com.mrkj.ygl.controller;import java.util.HashMap;
import java.util.Map;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;import com.mrkj.ygl.service.SecondPageService;@Controller
public class SecondPageController {//注入Service@ResourceSecondPageService sps;@RequestMapping(value="/secondPageContent")public ModelAndView goSecondPage(String mainId,@RequestParam(name="page",defaultValue="1") Integer page,@RequestParam(name="row",defaultValue="3")Integer row){ModelAndView mav = new ModelAndView("myJSP/secondPage");//根据传递过来的mainId查找my_main与my_second表Map<String, Object> mainAndSecond = sps.getMainAndSeconds(mainId,(page-1)*row, row);//将返回值传递给JSP//mav.addObject("mainAndSeconds", mainAndSecond);mav.addObject("mainAndSeconds", mainAndSecond);Long count = sps.getSecondCount(mainId);Map<String,String> parm = new HashMap<> ();parm.put("mainId", mainId);String pageHtml = sps.getPage(count, page, row,parm);mav.addObject("pageHtml", pageHtml);return mav;}//接收JSP传递过来的参数main_id与富文本content,保存至数据库my_second表中
@RequestMapping(value="/saveSecondPage")
public ModelAndView saveSecondPage(HttpServletRequest request,String mainId,String content){ModelAndView mav = new ModelAndView();String mainCreatuser = request.getRemoteAddr();int result = sps.saveSecondPage(mainId, content, mainCreatuser);if (result == 1){mav.setViewName("redirect:/secondPageContent?mainId="+mainId);}else{mav.setViewName("404");}return mav;
}}

3.jsp文件:

1.mainPage.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<%@include file="/../../../jspHead.jsp" %><!--  分页样式  --><style type="text/css"> .page{display:inline-block;           /*  内联对象  */border: 1px solid ;         /*  1像素边框  */font-size: 20px;               /*  文字大小20像素  */width: 30px;                    /*  宽度30像素  */height: 30px;             /*  高度30像素  */background-color: #1faeff;    /*  设置背景色  */text-align: center;            /*  居中对齐  */}a,a:hover{ text-decoration:none; color:#333}</style></head>
<body><table class="table table-striped"> <tr> <th width="70%"> <strong> 标题:</strong> </th> <th width="10%"> <strong> 作者</strong> </th> <th width="10%"> <strong> 回复/查看</strong> </th> <th width="10%"> <strong> 最后发表</strong> </th> </tr> <!--  choose标签相当于Java代码当中switch case语句 --> <c:choose> <%--  when标签相当于Java当中switch case语句当中的case,属性test设置条件 --%><c:when test="${not empty main }"> <!--  forEach相当于Java代码当中的循环  --><!--  属性items为要迭代元素  --><!--  属性item为迭代出来的元素  --><!--  属性varStatus为迭代状态  --><c:forEach items="${main }" var="item" varStatus="vs"> <tr> <td><!--  该a标签指向具体帖子连接,点击打开  --><a href="<%=basePath%>secondPageContent?mainId=${item.main_id}"> <img src="<%=basePath %>image/pin_1.gif"id="${item.main_id}img" /> [日月精华]&nbsp;&nbsp; <!--  获取标题  -->${item.main_title }</a> </td> <td> <!--  获取发帖人  -->${item.main_creatuser }</td> <td> <!--  获取回复人数与查看人数  -->${item.info_reply }/${item.info_see }</td> <td> <!--  获取最后发帖人  -->${item.info_lastuser }</td> </tr> </c:forEach> </c:when> </c:choose> </table> <div class="row"> <div class="col-xs-7"> </div> <div class="col-xs-5 text-nowrap"> <!--  获取分页  -->${pageHtml }</div> </div> <form action="<%=basePath %>saveUeditorContent" method="post"><!-- 加载编辑器的容器 --><!--  label标签为input表单定义标注  --><label for="biaoti"> 帖子标题:</label> <!--  input标签用于收集用户信息  --><input type="text" name="mainTitle" placeholder="最大长度80个汉字" style="width: 360px;" > <!--  button标签放置一个按钮,type属性设置为submit用于提交表单  --><button type="submit" class="btn btn-primary btn-xs text-right"> 发表帖子</button> <!--  富文本编辑器  --> <div style="padding: 0px;margin: 0px;width: 100%;height: 100%;" ><script id="container" name="content" type="text/plain"></script></div><button type="submit">保存</button></form><!-- 配置文件 --><script type="text/javascript" src="<%=basePath %>uedit/js/ueditor.config.js"></script><!-- 编辑器源码文件 --><script type="text/javascript" src="<%=basePath %>uedit/js/ueditor.all.js"></script><!-- 实例化编辑器 --><script type="text/javascript">var editor = UE.getEditor('container');</script><!-- end富文本 -->
</body>
</html>

2.secondPage.jsp

<%@page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPEhtml>
<html>
<head>
<%@include file="/../../../jspHead.jsp" %>    <!--  分页样式  --><style type="text/css"> .page{display:inline-block;           /*  内联对象  */border: 1px solid ;         /*  1像素边框  */font-size: 20px;               /*  文字大小20像素  */width: 30px;                    /*  宽度30像素  */height: 30px;             /*  高度30像素  */background-color: #1faeff;    /*  设置背景色  */text-align: center;            /*  居中对齐  */}a,a:hover{ text-decoration:none; color:#333}</style>
</head>
<body>
<!--  以下代码使用JSTL标签迭代出主帖与跟帖  -->
<div class="container-fluid" > <table class="table table-bordered"> <tr> <!--  td标签,该单元格定义了发帖人信息与身份  --><td class="tbl"> <div style="text-align: center;"> <p> 楼主</p> <a> <img alt="" src="<%=basePath %>image/ico_000.gif" /> </a> </div><!--  table标签,该表格用户展示发帖人信息  --><table class="table" style="background-color:#e5edf2; "> <tr> <td> 昵称:</td> <!--  使用EL表达式获取发帖人  --><td> ${mainAndSeconds.main_creatuser }</td> </tr> <tr> <td> 性别:</td> <td> 男</td> </tr> <tr> <td> 年龄:</td> <td> 18</td> </tr> <tr> <td> 发帖数:</td> <td> 10</td> </tr> <tr> <td> 回帖数:</td> <td> 10</td> </tr> </table> </td> <!--  td标签,该单元格定义了帖子详细内容  --><td class="tbr"> <div style="height: 65px;padding-left: 20px;padding-top: 1px;"> <h3><!--  使用EL表达式获取帖子标题  --><a style="color: #ifaeff"> ${mainAndSeconds.main_title }</a></h3> </div> <!-- 下面这是画出一条横线 --> <div style="width:98%;height:1px;margin-bottom:10px;
            padding:0px;background-color:#D5D5D5;overflow:hidden;"> </div> <p class="text-right" style="padding-right: 90px;"> <span style="padding-right: 30px;"> <!--  EL表达式获取发帖时间  --><a style="color: #78BA00;">发表于:${mainAndSeconds.main_creatime }</a> </span> <span> </span> </p> <!-- 下面这是画出一条横线 --> <div style="width:98%;height:1px;margin-bottom:10px;
                        padding:0px;background-color:#D5D5D5;overflow:hidden;"> </div> <div style="padding-top: 12px;min-height: 380px;"> <!--  EL表达式获取帖子内容  -->${mainAndSeconds.main_content }</div> <!-- 下面这是画出一条横线 --> <div style="width:98%;height:1px;margin-bottom:10px;
                       padding:0px;background-color:#D5D5D5;overflow:hidden;"> </div> <!--  上下间隙90像素  --> <div style="padding-right: 90px;"> </div> </td> </tr> <!--  choose标签相当于Java代码当中switch case语句 --><c:choose> <%--  when标签相当于Java当中switch case语句当中的case,属性test设置条件 --%><c:when test="${not empty mainAndSeconds.seconds }"> <!--  forEach相当于Java代码当中的循环  --><!--  属性items为要迭代元素  --><!--  属性item为迭代出来的元素  --><!--  属性varStatus为迭代状态  --><c:forEach   items="${mainAndSeconds.seconds}" var="item" varStatus="vs"> <tr> <td class="tbl"> <div style="text-align: center;"> <!--  利用vs获取迭代序号,vs索引从0开始  --><p> 第${vs.index+1 }楼</p> <a> <img alt="" src="<%=basePath%>image/ico_000.gif" /> </a> </div> <table class="table" style="background-color:#e5edf2; "> <tr> <td> 昵称:</td><!--  获取跟帖人  --> <td> ${item.creatuser }</td> </tr> <tr> <td> 性别:</td> <td> 男</td> </tr> <tr> <td> 年龄:</td> <td> 18</td> </tr> <tr> <td> 发帖数:</td> <td> 10</td> </tr> <tr> <td> 回帖数:</td> <td> 10</td> </tr> </table> </td> <td class="tbr"> <span style="padding-right: 30px;"> <!--  获取跟帖时间  --><a style="color: #78BA00;"> 回复于:${item.sec_creatime } </a> </span> <div style="width:98%;height:1px;margin-bottom:10px;
                                    padding:0px; background-color:#D5D5D5;overflow:hidden;"> </div> <div style="padding-top: 12px;min-height: 380px;"> <!--  获取跟帖内容  -->${item.sec_content }</div> <div style="width:98%;height:1px;margin-bottom:10px;
                                    padding:0px; background-color:#D5D5D5;overflow:hidden;"> </div> </td> </tr> </c:forEach> </c:when> </c:choose> </table> <div style="padding: 10px 5px;text-align: right;"> ${pageHtml }</div> <!-- 富文本 --> <form action="<%=basePath %>saveSecondPage" method="post"> <!--  隐藏字段,记录主帖id,发帖表跟帖时,将该字段传递之后台,将主帖与跟帖关系绑定 --><input name="mainId" type="hidden" value="${mainAndSeconds.main_id }"> <p class="text-right" style="padding-right: 90px;"> <button type="submit" class="btn btn-primary btn-xs text-right" > <span class="glyphicon glyphicon-edit" aria-hidden="true"> </span> 回复帖子</button> </p> <!-- 加载编辑器的容器 --> <script id="container" name="content" type="text/plain"> </script>
</form><!-- 配置文件 --><script type="text/javascript" src="<%=basePath %>uedit/js/ueditor.config.js"></script><!-- 编辑器源码文件 --><script type="text/javascript" src="<%=basePath %>uedit/js/ueditor.all.js"></script><!-- 实例化编辑器 --><script type="text/javascript">var editor = UE.getEditor('container');</script>
</div> </body>
</html> 

基于ssm和jsp的BBS-程序源论坛(UEditor)相关推荐

  1. 计算机毕业设计ssm家具商城hog7l系统+程序+源码+lw+远程部署

    计算机毕业设计ssm家具商城hog7l系统+程序+源码+lw+远程部署 计算机毕业设计ssm家具商城hog7l系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  2. 计算机毕业设计ssm健身房管理系统y7i9n系统+程序+源码+lw+远程部署

    计算机毕业设计ssm健身房管理系统y7i9n系统+程序+源码+lw+远程部署 计算机毕业设计ssm健身房管理系统y7i9n系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  3. 计算机毕业设计ssm工作室管理系统v186g系统+程序+源码+lw+远程部署

    计算机毕业设计ssm工作室管理系统v186g系统+程序+源码+lw+远程部署 计算机毕业设计ssm工作室管理系统v186g系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  4. 计算机毕业设计ssm陈氏商城9pd36系统+程序+源码+lw+远程部署

    计算机毕业设计ssm陈氏商城9pd36系统+程序+源码+lw+远程部署 计算机毕业设计ssm陈氏商城9pd36系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java ...

  5. 计算机毕业设计ssm图书馆管理系统063z6系统+程序+源码+lw+远程部署

    计算机毕业设计ssm图书馆管理系统063z6系统+程序+源码+lw+远程部署 计算机毕业设计ssm图书馆管理系统063z6系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  6. 计算机毕业设计ssm图书出版系统0fes8系统+程序+源码+lw+远程部署

    计算机毕业设计ssm图书出版系统0fes8系统+程序+源码+lw+远程部署 计算机毕业设计ssm图书出版系统0fes8系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  7. 计算机毕业设计ssm 课程教学过程f6oz5系统+程序+源码+lw+远程部署

    计算机毕业设计ssm 课程教学过程f6oz5系统+程序+源码+lw+远程部署 计算机毕业设计ssm 课程教学过程f6oz5系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  8. 计算机毕业设计ssm物流信息管理系统35wzn系统+程序+源码+lw+远程部署

    计算机毕业设计ssm物流信息管理系统35wzn系统+程序+源码+lw+远程部署 计算机毕业设计ssm物流信息管理系统35wzn系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开 ...

  9. 计算机毕业设计ssm缺陷管理系统d6ltf系统+程序+源码+lw+远程部署

    计算机毕业设计ssm缺陷管理系统d6ltf系统+程序+源码+lw+远程部署 计算机毕业设计ssm缺陷管理系统d6ltf系统+程序+源码+lw+远程部署 本源码技术栈: 项目架构:B/S架构 开发语言: ...

最新文章

  1. 思维导图学 Linux Shell攻略之小试牛刀篇
  2. tensorflow tf.name_scope() 命名空间(用于规定对象和操作属于哪个区域)
  3. ubuntu下txt文件编码转换、查询(gbk/ISO-8859-utf-8)
  4. 关于BigInteger的加减乘除使用
  5. SQL72 考试分数(一)
  6. Python 齿轮动力学建模及信号分析(纽马克算法)
  7. regsvr32注册Dll文件时出现0x80004005问题的解决方案
  8. em算法python包_关于EM算法原理的分析与理解(Python实现)
  9. WIN7系统配置maven环境变量
  10. 如何申请美国、加拿大、英国的电话号码
  11. echart地图上自定义图标
  12. 【动态规划 LIS】JZOJ_6310 glo
  13. 传统目标检测方法研究(一)
  14. hexo中matery主题的个性化定制
  15. cesium 粒子特效
  16. codeforces 574B 暴力+复杂度分析
  17. java计算器 控制台_java控制台实现的简单小系统,支持计算器功能,日历、乘法表算法...
  18. WPF无弹窗打印_se7en3_新浪博客
  19. 汉字简体繁体转换|GB国标码|Big5码
  20. python文本txt处理

热门文章

  1. 童话镇matlab代码,暗月马戏团首日外服高分卡组合集
  2. 图像增强库Albumentations(一)
  3. 剑指 Offer 笔记: T58 - I. 翻转单词顺序
  4. 单身,有时不一定是贵族
  5. 算法:单身男女问题的科学解决方案
  6. VC 随鼠标移动的文字。
  7. 解决virtualbox共享文件夹没有访问权限的问题
  8. html超链接自动跳转,超链接是什么(一打开网页就跳转另一个网站)
  9. floor函数 与 ceil函数
  10. 大话西游无法登陆解决