SSM综合项目实战(TTSC) -- day05 搭建门户,内容管理,大广告位
2017-10-19 13:45
549 查看
一、搭建门户系统
1、创建taotao-poral工程,打包方式为war
2、添加tomcat插件
<build> <plugins> <!-- 配置tomcat7插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <configuration> <port>8083</port> <path>/</path> </configuration> </plugin> </plugins> </build>
3、加入配置文件
springmvc.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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- 读取properties资源文件 --> <!-- <context:property-placeholder location="classpath:resources/env.properties" /> --> <!-- 配置controller扫描 --> <context:component-scan base-package="com.taotao.portal.controller" /> <!-- 配置注解驱动 --> <mvc:annotation-driven /> <!-- 配置视图解析器 ,配置前缀和后缀 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 配置dubbo服务 --> <dubbo:application name="taotao-portal-web" /> <!-- 使用广播 <dubbo:registry address="multicast://224.5.6.7:1234" />--> <!-- 使用zookeeper注册中心 --> <dubbo:registry protocol="zookeeper" address="192.168.37.161:2181" /> <!-- 声明要调用的服务,timeout是设置连接超时最长时间,如果不设置,超时时间默认是3秒 --> <!-- <dubbo:reference interface="com.taotao.manager.service.TestService" id="testService" timeout="1000000" /> --> </beans>
log4j.properties
log4j.rootLogger=DEBUG,A1 log4j.logger.com.taotao = DEBUG log4j.logger.org.mybatis = DEBUG log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c]-[%p] %m%n
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <display-name>taotao-portal</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- 解决POST乱码问题 --> <filter> <filter-name>encoding</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- 配置springMVC前端控制器 --> <servlet> <servlet-name>taotao-portal</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <!-- springMVC全局配置文件 --> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <!-- springmvc随着容器的启动而启动 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>taotao-portal</servlet-name> <!-- 以.html结尾的请求进入SpringMVC,作用是用于SEO优化 --> <url-pattern>*.html</url-pattern> </servlet-mapping> </web-app>
注意:使用 *.html结尾的拦截方式是为了进行SEO搜索引擎优化,搜素引擎的算法有分数,静态页面的分数比动态(jsp、asp、php)页面要高
4、导入门户系统静态页面
注意:静态页面在本博客资源中存在5、实现访问门户首页
(1)、IndexController.javapackage com.taotao.portal.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; @Controller @RequestMapping("index") public class IndexController { /** * 访问系统首页 */ @RequestMapping(method = RequestMethod.GET) public String toIndex(){ return "index"; } }
(2)、使用SwitchHosts修改域名映射
(3)、修改nginx配置文件
(4)、重启nginx,访问门户网站效果图
二、内容管理系统准备工作
1、导入表结构
2、编写对应的pojo类
package com.taotao.manager.pojo; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Table(name = "tb_content") public class Content extends BasePojo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "category_id") private Long categoryId; private String title; @Column(name = "sub_title") private String subTitle; @Column(name = "title_desc") private String titleDesc; private String url; private String pic; private String pic2; private String content; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getCategoryId() { return categoryId; } public void setCategoryId(Long categoryId) { this.categoryId = categoryId; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getSubTitle() { return subTitle; } public void setSubTitle(String subTitle) { this.subTitle = subTitle; } public String getTitleDesc() { return titleDesc; } public void setTitleDesc(String titleDesc) { this.titleDesc = titleDesc; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getPic() { return pic; } public void setPic(String pic) { this.pic = pic; } public String getPic2() { return pic2; } public void setPic2(String pic2) { this.pic2 = pic2; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }
package com.taotao.manager.pojo; import javax.persistence.Column; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Table(name = "tb_content_category") public class ContentCategory extends BasePojo { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "parent_id") private Long parentId; private String name; private Integer status; @Column(name = "sort_order") private Integer sortOrder; @Column(name = "is_parent") private Boolean isParent; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getParentId() { return parentId; } public void setParentId(Long parentId) { this.parentId = parentId; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getStatus() { return status; } public void setStatus(Integer status) { this.status = status; } public Integer getSortOrder() { return sortOrder; } public void setSortOrder(Integer sortOrder) { this.sor 10126 tOrder = sortOrder; } public Boolean getIsParent() { return isParent; } public void setIsParent(Boolean isParent) { this.isParent = isParent; } // 扩展字段,用于EasyUI中tree结构 public String getText() { return getName(); } public String getState() { return getIsParent() ? "closed" : "open"; } }
3、编写内容对应的Mapper接口
package com.taotao.manager.mapper; import com.github.abel533.mapper.Mapper; import com.taotao.manager.pojo.Content; /** * 内容管理 * @author Administrator * */ public interface ContentMapper extends Mapper<Content> { }
package com.taotao.manager.mapper; import com.github.abel533.mapper.Mapper; import com.taotao.manager.pojo.ContentCategory; /** * 内容分类 * @author Administrator * */ public interface ContentCategoryMapper extends Mapper<ContentCategory> { }
4、编写Service层接口
package com.taotao.manager.service; import com.taotao.manager.pojo.Content; /** * 内容业务层接口 * @author Administrator * */ public interface ContentService extends BaseService<Content> { }
package com.taotao.manager.service; import com.taotao.manager.pojo.ContentCategory; /** * 内容分类业务层接口 * @author Administrator * */ public interface ContentCategoryService extends BaseService<ContentCategory> { }
5、编写业务层实现类
package com.taotao.manager.service.impl; import org.springframework.stereotype.Service; import com.taotao.manager.pojo.ContentCategory; import com.taotao.manager.service.ContentCategoryService; /** * 内容分类业务层实现类 * @author Administrator * */ @Service public class ContentCategoryServiceImpl extends BaseServiceImpl<ContentCategory> implements ContentCategoryService { }
package com.taotao.manager.service.impl; import org.springframework.stereotype.Service; import com.taotao.manager.pojo.Content; import com.taotao.manager.service.ContentService; /** * 内容业务层实现类 * @author Administrator * */ @Service public class ContentServiceImpl extends BaseServiceImpl<Content> implements ContentService{ }
6、在配置文件中声明服务
7、在taotao-manager-web中创建controller类
package com.taotao.manager.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.taotao.manager.service.ContentCategoryService; /** * 内容分类web层 * @author Administrator * */ @Controller @RequestMapping("content/category") public class ContentCategoryController { @Autowired private ContentCategoryService contentCategoryService; }
package com.taotao.manager.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.taotao.manager.service.ContentService; /** * 内容web层 * @author Administrator * */ @Controller @RequestMapping("content") public class ContentController { @Autowired private ContentService contentService; }
8、在springmvc.xml中声明服务的调用
三、实现内容分类管理
1、内容分类管理树的展示实现
(1)、前端页面分析(2)、后台Controller代码实现
/** * 根据父ID查询内容分类列表 * * @param parentId * @return */ @RequestMapping(method = RequestMethod.GET) @ResponseBody public List<ContentCategory> queryContentCategoryByParentId( @RequestParam(value = "id", defaultValue = "0") Long parentId) { List<ContentCategory> list = this.contentCategoryService.queryContentCategroyByParentId(parentId); return list; }
(3)、Service接口和实现类层代码实现
/** * 根据父ID查询内容分类列表 * @param parentId * @return */ public List<ContentCategory> queryContentCategroyByParentId(Long parentId);
/** * 根据父ID查询内容分类列表 * @param parentId * @return */ public List<ContentCategory> queryContentCategroyByParentId(Long parentId) { //封装查询条件 ContentCategory contentCategory = new ContentCategory(); contentCategory.setParentId(parentId); // 执行查询操作 List<ContentCategory> list = super.queryListByWhere(contentCategory); return list; }
2、内容分类管理树的动态管理前端代码分析
3、实现内容管理树的添加功能
(1)、Controller代码实现/** * 新增内容分类 * * @param contentCategory * @return */ @RequestMapping(value = "add", method = RequestMethod.POST) @ResponseBody public ContentCategory saveContentCategory(ContentCategory contentCategory) { // 调用服务保存内容分类 ContentCategory result = this.contentCategoryService.savenContentCategory(contentCategory); return result; }
(2)、Service层接口和实现类代码实现
/** * 新增内容分类 * @param contentCategory * @return */ public ContentCategory savenContentCategory(ContentCategory contentCategory);
/** * 新增内容分类 * * @param contentCategory * @return */ public ContentCategory savenContentCategory(ContentCategory contentCategory) { // 设置需要保存的内容分类,设置状态为正常 contentCategory.setIsParent(false); contentCategory.setStatus(1); // 把内容分类保存到数据库中 super.save(contentCategory); // 查询父节点,直接根据父节点id查询父节点 ContentCategory parent = super.queryById(contentCategory.getParentId()); // 判断父节点的isParent是否为true if (!parent.getIsParent()) { // 如果不是true,需要修改为true parent.setIsParent(true); // 更新修改后的父节点 super.updateByIdSelective(parent); } return contentCategory; }
(3)、运行测试
4、内容分类管理树的修改功能实现
ContentCategoryController.java/** * 修改的内容分类 * * @param contentCategory */ @RequestMapping(value = "update", method = RequestMethod.POST) @ResponseBody public void updateContentCategory(ContentCategory contentCategory) { this.contentCategoryService.updateByIdSelective(contentCategory); }
5、内容分类管理树的删除功能实现
(1)、Controller代码/** * 删除内容分类 * @param contentCategory */ @RequestMapping(value = "delete", method = RequestMethod.POST) @ResponseBody public String deleteContentCategory(Long parentId, Long id) { this.contentCategoryService.delteContentCategory(parentId, id); return ""; }
(2)、Service层接口和实现类
/** * 删除内容分类 * @param contentCategory */ public void delteContentCategory(Long parentId, Long id);
/** * 删除内容分类 * * @param contentCategory */ public void delteContentCategory(Long parentId, Long id) { // 获取所有要删除的节点id // 声明存放id的容器 List<Object> ids = new ArrayList<Object>(); // 把自己放入容器中 ids.add(id); // 使用递归方式获取需要删除的节点 this.getIds(ids, id); // 使用删除方法批量删除节点 super.deleteByIds(ids); // 查询删除后还有没有兄弟节点 // 声明查询条件 ContentCategory param = new ContentCategory(); param.setParentId(parentId); // 执行查询 Integer count = super.queryCountByWhere(param); if (count == 0) { // 如果没有兄弟节点,父节点变为叶子节点,也就是isParent设置为false ContentCategory parent = new ContentCategory(); // 设置id parent.setId(parentId); // 设置isParent parent.setIsParent(false); // 更新父节点 super.updateByIdSelective(parent); } // 如果有兄弟节点,父节点不变 } /** * 使用递归方法获取要删除的节点 * * @param ids * @param id */ private void getIds(List<Object> ids, Long id) { // 查询所有子节点 // 声明查询条件 ContentCategory param = new ContentCategory(); param.setParentId(id); // 执行查询方法 List<ContentCategory> list = super.queryListByWhere(param); // 使用递归方法,必须要设置递归结束的条件 // 结束条件:判断是否有子节点,如果有,就进行递归,如果没有叶子节点,就停止递归 if (list.size() > 0) { // 遍历查询到的子节点 for (ContentCategory contentCategory : list) { // 把子节点的id放到ids容器中 ids.add(contentCategory.getId()); // 进行递归自己调用自己,获取自己的所有子节点 this.getIds(ids, contentCategory.getId()); } } }
四、实现内容管理
1、前端内容管理页面显示内容分类树的代码分析
2、前端内容管理页面中添加按钮的页面分析
3、内容管理页面中内容添加操作后台代码实现
(1)、Controller层代码ContentController.javapackage com.taotao.manager.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.taotao.common.pojo.TaoResult; import com.taotao.manager.pojo.Content; import com.taotao.manager.service.ContentService; /** * 内容web层 * * @author Administrator * */ @Controller @RequestMapping("content") public class ContentController { @Autowired private ContentService contentService; /** * 新增内容 * * @param content */ @RequestMapping(method = RequestMethod.POST) @ResponseBody public void saveContent(Content content) { this.contentService.save(content); } /** * 获取内容的分页数据 * * @param page * @param rows * @return */ @RequestMapping(method = RequestMethod.GET) @ResponseBody public TaoResult<Content> queryContentByPage(@RequestParam(value = "page", defaultValue = "1") Integer page, @RequestParam(value = "rows", defaultValue = "20") Integer rows, Long categoryId) { TaoResult<Content> result = this.contentService.queryContentByPage(page, rows, categoryId); return result; } }
(2)、Service层代码 -- ContentService.java、ContentServiceImpl.java
/** * 获取内容的分页数据 * * @param page * @param rows * @return */ public TaoResult<Content> queryContentByPage(Integer page, Integer rows, Long categoryId);
/** * 获取内容的分页数据 * * @param page * @param rows * @return */ public TaoResult<Content> queryContentByPage(Integer page, Integer rows, Long categoryId) { // 设置分页数据 PageHelper.startPage(page, rows); // 设置查询条件 Content param = new Content(); param.setCategoryId(categoryId); // 执行查询 List<Content> list = super.queryListByWhere(param); // 封装返回数据 PageInfo<Content> pageInfo = new PageInfo<Content>(list); TaoResult<Content> taoResult = new TaoResult<Content>(pageInfo.getTotal(), list); return taoResult; }
4、浏览器页面展示
相关文章推荐
- SSM综合项目实战(TTSC) -- day01 项目介绍、工程搭建
- SSM综合项目实战(TTSC) -- day09 Solr,搜索系统
- SSM综合项目实战(TTSC) -- day07 RESTful,HttpClient,单点登录
- SSM综合项目实战(TTSC) -- day03 Nginx,类目选择,新增商品
- SSM综合项目实战(TTSC) -- day04 图片上传、商品列表
- SSM综合项目实战(TTSC) -- day02 Dubbo注册中心,通用Mapper,分页插件
- SSM综合项目实战(TTSC) -- day08 单点登录,注册登录,jsonp
- SSM综合项目实战(TTSC) -- day13 订单、定时器Quartz
- SSM综合项目实战(TTSC) -- day14 项目部署、MyCat
- SSM综合项目实战(TTSC) -- day12 购物车
- 商城项目实战26:CMS内容管理系统工程搭建
- 搭建门户系统,后台内容管理系统
- SSM框架搭建及项目实战
- SSM搭建-Maven创建第一个web项目(22-3)Maven管理Tomcat
- SSM实战——秒杀系统之创建项目、管理依赖、设计数据库
- 商城项目实战27:内容分类管理
- 项目总结—校园办公管理系统(SSM框架搭建)
- 商务综合管理-day1-项目搭建
- SSM入门项目-3-门户与内容服务
- newstyles项目实战(十四)门户工程系统搭建