当前位置:网站首页>Design and implementation of SSM personal blog system
Design and implementation of SSM personal blog system
2022-07-28 11:40:00 【qq_ thirty-one million two hundred and ninety-three thousand fi】
Active address : Graduation season · The technique of attack er
Blogger introduction : on-the-job Java R & D Engineer 、 Focus on Programming 、 The source code to share 、 Technical communication 、 Focus on Java Technical field and graduation project
Project name
SSM Design and implementation of personal blog system
Video effects
https://www.bilibili.com/video/BV1y3411c7J4/
system description
《SSM Design and implementation of personal blog system 》 The project adopts technology jsp、SpringMVC、Spring、Mybatis、tomcat The server 、mysql database development tool eclipse, The project contains source code 、 The paper 、 Supporting development software 、 Software installation tutorial 、 Project publishing tutorial
Personal blog system is mainly used to publish personal blog , Record your daily life , The learning , Technology sharing, etc , For others to browse , Look up , Comments, etc .
The system structure is as follows :
(1) Blogger end :
Login module : Log in to the background management system : First, go to the login page , Need to enter account number and password . It will use Shiro Safety management , The password entered by the front desk Code for encryption , Then compare it with that in the database . You can log in to the background system only after success .
Blog management module : Blog management functions are divided into blog writing and blog information management . Blogging is used by bloggers to publish and write blogs , Blog title required , Then choose Bo Customer type , Finally, fill the blog content into Baidu's rich text editor , Click the publish blog button to publish a blog .
Blog category management module : Blogger category management system can add , Modify and delete blog type name and sorting sequence number . It will be displayed in the log category area of the home page . Visitors can find relevant and interesting blog content here
Comment information management module : The comment management function is divided into comment review and comment information management . Comment review is when a visitor or himself makes a comment , Bloggers need Review comments in the background management system . If you want to display this comment on the page, click approve , Otherwise, click "audit failed" .
Personal information management module : Modify the blogger's personal information , You can change the nickname , Individuality signature , You can add a personal portrait , Modify your profile ;
System management function module : Friendship link management , Change Password , Refresh the system cache and exit safely , Link management can add , modify , Delete friendly link URL
(2) Tourist terminal :
Search blogs : Query which blog
View blog content : View blog content
Check the blogger's personal information : Check the blogger's Profile
Comment : You can comment on a specific blog
link : Check out the links
Environmental needs
1. Running environment : It is best to java jdk 1.8, We run on this platform . Other versions can, in theory .
2.IDE Environmental Science :IDEA,Eclipse,Myeclipse Fine . recommend IDEA;
3.tomcat Environmental Science :Tomcat 7.x,8.x,9.x All versions are available
4. Hardware environment :windows 7/8/10 1G Above memory ; perhaps Mac OS;
5. database :MySql 5.7 edition ;
6. whether Maven project : no ;
Technology stack
1. Back end :Spring+SpringMVC+Mybatis
2. front end :JSP+CSS+JavaScript+jQuery
Instructions
1. Use Navicat Or other tools , stay mysql Create a database with the corresponding name in , And import the sql file ;
2. Use IDEA/Eclipse/MyEclipse Import the project ,Eclipse/MyEclipse Import time , if maven Item, please select maven;
if maven project , After importing successfully, please execute maven clean;maven install command , And then run ;
3. In the project springmvc-servlet.xml Change the database configuration in the configuration file to your own configuration ;
4. Run the project , Enter... In the browser http://localhost:8080/ Sign in
Run a screenshot












User management control layer :
package com.houserss.controller;
import javax.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
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.houserss.common.Const;
import com.houserss.common.Const.Role;
import com.houserss.common.ServerResponse;
import com.houserss.pojo.User;
import com.houserss.service.IUserService;
import com.houserss.service.impl.UserServiceImpl;
import com.houserss.util.MD5Util;
import com.houserss.util.TimeUtils;
import com.houserss.vo.DeleteHouseVo;
import com.houserss.vo.PageInfoVo;
/**
* Created by admin
*/
@Controller
@RequestMapping("/user/")
public class UserController {
@Autowired
private IUserService iUserService;
/**
* The user login
* @param username
* @param password
* @param session
* @return
*/
@RequestMapping(value = "login.do",method = RequestMethod.POST)
@ResponseBody
public ServerResponse<User> login(User user,String uvcode, HttpSession session){
String code = (String)session.getAttribute("validationCode");
if(StringUtils.isNotBlank(code)) {
if(!code.equalsIgnoreCase(uvcode)) {
return ServerResponse.createByErrorMessage(" The verification code is incorrect ");
}
}
ServerResponse<User> response = iUserService.login(user.getUsername(),user.getPassword());
if(response.isSuccess()){
session.setAttribute(Const.CURRENT_USER,response.getData());
}
return response;
}
}
Administrator management control layer :
package com.sxl.controller.admin;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxl.controller.MyController;
@Controller("adminController")
@RequestMapping(value = "/admin")
public class AdminController extends MyController {
@RequestMapping(value = "/index")
public String frame(Model model, HttpServletRequest request)throws Exception {
return "/admin/index";
}
@RequestMapping(value = "/main")
public String main(Model model, HttpServletRequest request)throws Exception {
return "/admin/main";
}
@RequestMapping(value = "/tj1")
public String tj1(Model model, HttpServletRequest request)throws Exception {
String sql="select DATE_FORMAT(insertDate,'%Y-%m-%d') dates,sum(allPrice) price from t_order order by DATE_FORMAT(insertDate,'%Y-%m-%d') desc";
List<Map> list = db.queryForList(sql);
model.addAttribute("list", list);
System.out.println(list);
return "/admin/tj/tj1";
}
@RequestMapping(value = "/password")
public String password(Model model, HttpServletRequest request)throws Exception {
return "/admin/password";
}
@RequestMapping(value = "/changePassword")
public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {
Map admin = getAdmin(request);
if(oldPassword.equals(admin.get("password").toString())){
String sql="update t_admin set password=? where id=?";
db.update(sql, new Object[]{newPassword,admin.get("id")});
return renderData(true,"1",null);
}else{
return renderData(false,"1",null);
}
}
}
Modify password business logic :
package com.sxl.controller.admin;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sxl.controller.MyController;
@Controller("userController")
@RequestMapping(value = "/user")
public class UserController extends MyController {
@RequestMapping(value = "/index")
public String frame(Model model, HttpServletRequest request)throws Exception {
return "/user/index";
}
@RequestMapping(value = "/main")
public String main(Model model, HttpServletRequest request)throws Exception {
return "/user/main";
}
@RequestMapping(value = "/password")
public String password(Model model, HttpServletRequest request)throws Exception {
return "/user/password";
}
@RequestMapping(value = "/changePassword")
public ResponseEntity<String> loginSave(Model model,HttpServletRequest request,String oldPassword,String newPassword) throws Exception {
Map user = getUser(request);
if(oldPassword.equals(user.get("password").toString())){
String sql="update t_user set password=? where id=?";
db.update(sql, new Object[]{newPassword,user.get("id")});
return renderData(true,"1",null);
}else{
return renderData(false,"1",null);
}
}
@RequestMapping(value = "/mine")
public String mine(Model model, HttpServletRequest request)throws Exception {
Map user =getUser(request);Map map = db.queryForMap("select * from t_user where id=?",new Object[]{user.get("id")});model.addAttribute("map", map); return "/user/mine";
}
@RequestMapping(value = "/mineSave")
public ResponseEntity<String> mineSave(Model model,HttpServletRequest request,Long id
,String username,String password,String name,String gh,String mobile) throws Exception{
int result = 0;
String sql="update t_user set name=?,gh=?,mobile=? where id=?";
result = db.update(sql, new Object[]{name,gh,mobile,id});
if(result==1){
return renderData(true," Successful operation ",null);
}else{
return renderData(false," operation failed ",null);
}
}
}
General management module :
package com.sxl.controller;
import java.nio.charset.Charset;
import java.util.Locale;
import java.util.ResourceBundle;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import com.sxl.util.JacksonJsonUtil;
import com.sxl.util.StringUtil;
import com.sxl.util.SystemProperties;
public class BaseController {
public static final Long EXPIRES_IN = 1000 * 3600 * 24 * 1L;// 1 God
@Autowired
private SystemProperties systemProperties;
/**
* Get the profile content
*/
public String getConfig(String key) {
return systemProperties.getProperties(key);
}
/**
* Return server address like http://192.168.1.1:8441/UUBean/
*/
public String getHostUrl(HttpServletRequest request) {
String hostName = request.getServerName();
Integer hostPort = request.getServerPort();
String path = request.getContextPath();
if (hostPort == 80) {
return "http://" + hostName + path + "/";
} else {
return "http://" + hostName + ":" + hostPort + path + "/";
}
}
/***
* Get current website route String
*/
public static String getWebSite(HttpServletRequest request) {
String returnUrl = request.getScheme() + "://"
+ request.getServerName();
if (request.getServerPort() != 80) {
returnUrl += ":" + request.getServerPort();
}
returnUrl += request.getContextPath();
return returnUrl;
}
/**
* initialization HTTP head .
*
* @return HttpHeaders
*/
public HttpHeaders initHttpHeaders() {
HttpHeaders headers = new HttpHeaders();
MediaType mediaType = new MediaType("text", "html",
Charset.forName("utf-8"));
headers.setContentType(mediaType);
return headers;
}
/**
* return Information data
*
* @param status
* @param msg
* @return
*/
public ResponseEntity<String> renderMsg(Boolean status, String msg) {
if (StringUtils.isEmpty(msg)) {
msg = "";
}
String str = "{\"status\":\"" + status + "\",\"msg\":\"" + msg + "\"}";
ResponseEntity<String> responseEntity = new ResponseEntity<String>(str,
initHttpHeaders(), HttpStatus.OK);
return responseEntity;
}
/**
* return obj data
*
* @param status
* @param msg
* @param obj
* @return
*/
public ResponseEntity<String> renderData(Boolean status, String msg,
Object obj) {
if (StringUtils.isEmpty(msg)) {
msg = "";
}
StringBuffer sb = new StringBuffer();
sb.append("{");
sb.append("\"status\":\"" + status + "\",\"msg\":\"" + msg + "\",");
sb.append("\"data\":" + JacksonJsonUtil.toJson(obj) + "");
sb.append("}");
ResponseEntity<String> responseEntity = new ResponseEntity<String>(
sb.toString(), initHttpHeaders(), HttpStatus.OK);
return responseEntity;
}
/***
* obtain IP( If it's a multi-level agent , You get a string of IP value )
*/
public static String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if (ip != null && ip.length() > 0) {
String[] ips = ip.split(",");
for (int i = 0; i < ips.length; i++) {
if (!"unknown".equalsIgnoreCase(ips[i])) {
ip = ips[i];
break;
}
}
}
return ip;
}
/**
* Internationalization obtains language content
*
* @param key
* Language key
* @param args
* @param argsSplit
* @param defaultMessage
* @param locale
* @return
*/
public static String getLanguage(String key, String args, String argsSplit,
String defaultMessage, String locale) {
String language = "zh";
String contry = "cn";
String returnValue = defaultMessage;
if (!StringUtil.isEmpty(locale)) {
try {
String[] localeArray = locale.split("_");
language = localeArray[0];
contry = localeArray[1];
} catch (Exception e) {
}
}
try {
ResourceBundle resource = ResourceBundle.getBundle("lang.resource",
new Locale(language, contry));
returnValue = resource.getString(key);
if (!StringUtil.isEmpty(args)) {
String[] argsArray = args.split(argsSplit);
for (int i = 0; i < argsArray.length; i++) {
returnValue = returnValue.replace("{" + i + "}",
argsArray[i]);
}
}
} catch (Exception e) {
}
return returnValue;
}
}
The source code for :
Everybody likes it 、 Collection 、 Focus on 、 Comments 、 see QQ No. to get contact informationClock in article to update 254/365 God
Wonderful column recommended subscription : stay The column below
today , Stationmaster is still a programmer , from 14 In, the University began to make graduation programs on its behalf / Curriculum , Hope to help more students
Active address : Graduation season · The technique of attack er
边栏推荐
- ripro9.0修正升级版+WP两款美化包+稀有插件
- R language - some metrics for unbalanced data sets
- 开源汇智创未来 | 2022开放原子全球开源峰会OpenAtom openEuler分论坛圆满召开
- 在生产环境中每天Oracle监控到的无效对象一般怎么去处理?
- Digital twin rail transit: "intelligent" monitoring to clear the pain points of urban operation
- win10安装sqlmap(windows 7)
- 接口测试的作用
- 「Node学习笔记」Koa框架学习
- Zotero document manager and its use posture (updated from time to time)
- Five Ali technical experts have been offered. How many interview questions can you answer
猜你喜欢

18 diagrams, intuitive understanding of neural networks, manifolds and topologies

字节一面:如何用 UDP 实现可靠传输?

Solutions to the disappearance of Jupiter, spyder, Anaconda prompt and navigator shortcut keys
![完整版H5社交聊天平台源码[完整数据库+完整文档教程]](/img/3f/03239c1b4d6906766348d545a4f234.png)
完整版H5社交聊天平台源码[完整数据库+完整文档教程]

Router firmware decryption idea
![[极客大挑战 2019]BabySQL-1|SQL注入](/img/21/b5b4727178a585e610d743e92248f7.png)
[极客大挑战 2019]BabySQL-1|SQL注入

「以云为核,无感极速」第五代验证码重磅来袭

「学习笔记」树状数组

LiteSpeed Web服务器中安装SSL证书

Introduction to web security RADIUS protocol application
随机推荐
[cesium] entity property and timing binding: the sampledproperty method is simple to use
[极客大挑战 2019]BabySQL-1|SQL注入
1天涨粉81W,打造爆款短视频的秘诀是什么?
R language - some metrics for unbalanced data sets
Object stream of i/o operation (serialization and deserialization)
[FPGA tutorial case 41] image case 1 - reading pictures through Verilog
What's the secret of creating a popular short video?
【一知半解】零值拷贝
Outlook suddenly becomes very slow and too laggy. How to solve it
Design a system that supports millions of users
Flutter tutorial flutter navigator 2.0 with gorouter, use go_ Router package learn about the declarative routing mechanism in fluent (tutorial includes source code)
Six papers that must be seen in the field of target detection
Leetcode:981. time based key value storage [trap of iteration for: on]
Ten thousand words detailed Google play online application standard package format AAB
mysql(8.0.16版)命令及说明
Digital twin rail transit: "intelligent" monitoring to clear the pain points of urban operation
Microsoft security team found an Austrian company that used windows Zero Day vulnerability to sell spyware
Postgres overview
WPF依赖属性(wpf 依赖属性)
Embrace open source guidelines