个人项目:诗词网站(SSM框架)

一.项目实现功能

1 注册,登录功能
2 对网站内诗词的增,删,改,浏览。
3 删除功能权限限定(只有指定帐号可以删除(管理员))
4 诗词点赞功能(用指标heat体现),提升热度(heat)的方法就是用户点击点赞按钮。
5 基于用户偏好的推荐功能(用户的点赞行为会在后台记录,基于后台记录进行推荐)

二.项目文件结构

个人项目:诗词网站(SSM框架)_第1张图片

个人项目:诗词网站(SSM框架)_第2张图片

实体类

package com.poetry.bean;

import org.springframework.stereotype.Component;

@Component
public class Poetry{
	private String name;
	private String context;
	
	public String getContext() {
		return context;
	}
	public void setContext(String context) {
		this.context = context;
	}
	private String style;
	private int    heat;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getStyle() {
		return style;
	}
	public void setStyle(String style) {
		this.style = style;
	}
	public int getHeat() {
		return heat;
	}
	public void setHeat(int heat) {
		this.heat = heat;
	}
	
	
	
	
	
	
}
package com.poetry.bean;

import org.springframework.stereotype.Component;

@Component
public class User {
private int id;
private String password;
private int haofang;
private int wanyue;
private int sixiang;
public int getHaofang() {
	return haofang;
}
public void setHaofang(int haofang) {
	this.haofang = haofang;
}
public int getWanyue() {
	return wanyue;
}
public void setWanyue(int wanyue) {
	this.wanyue = wanyue;
}
public int getSixiang() {
	return sixiang;
}
public void setSixiang(int sixiang) {
	this.sixiang = sixiang;
}
public int getId() {
	return id;
}
public void setId(int id) {
	this.id = id;
}
public String getPassword() {
	return password;
}
public void setPassword(String password) {
	this.password = password;
}



}

三.实现原理及源码

1。注册,登录功能的实现

登录模块↓

	
@RequestMapping("login")

public String login(User user,HttpSession httpsession) throws IOException {
	String resource = "Mybatis.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession session=sqlSessionFactory.openSession();
	userMapper usermapper=session.getMapper(userMapper.class);
	if(  (usermapper.searchUser(user.getId()))!=null    ) {
		System.out.printf("登陆成功,欢迎");	  
		httpsession.setAttribute("id", user.getId());
		httpsession.setAttribute("password", user.getPassword());
		return "/list";
	}	else {System.out.printf("登陆失败");
	return "redirect:index.jsp";}

注册模块↓

@RequestMapping("register")

public String register(User user) throws IOException {
	String resource = "Mybatis.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession session=sqlSessionFactory.openSession();
	userMapper usermapper=session.getMapper(userMapper.class);
	
	if(  (usermapper.searchUser(user.getId()))!=null    ) {
		System.out.printf("注册失败,该账号已被注册");	                 //登录校验
		return "redirect:/toregister";
	}	else {
			int idtemp=user.getId();
			String passwordtemp=user.getPassword();
			
			usermapper.register(idtemp, passwordtemp);
			session.commit();
			session.close();
	return "/list";}}

2.增删改部分的实现

    <insert id="addpoetry"  >
    insert into  poetry    value(#{param1},#{param2},#{param3},#{param4})
    </insert>
	
@RequestMapping("addpoetry") 
	
	public String addpoetry(Poetry p) throws IOException{
	String resource = "Mybatis.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession session=sqlSessionFactory.openSession();
	userMapper usermapper=session.getMapper(userMapper.class);
	usermapper.addpoetry(p.getName(),p.getStyle(), p.getHeat(), p.getContext());
	session.commit();
	session.close();
	return "/list";
}

删↓

<delete id="delete">
    delete from poetry where name=#{name}
    
    </delete>
@RequestMapping("/delete/{name}") 

public String delete(@PathVariable("name") String name) throws IOException {
	String resource = "Mybatis.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession session=sqlSessionFactory.openSession();
	userMapper usermapper=session.getMapper(userMapper.class);
	usermapper.delete(name);
	session.commit();
	session.close();
	return "/list";

改↓

update poetry set context=#{param1} where name=#{param2}

@RequestMapping("edit/{name}") 

public String editpoetry(Poetry p) throws IOException{
String resource = "Mybatis.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session=sqlSessionFactory.openSession();
userMapper usermapper=session.getMapper(userMapper.class);
usermapper.edit(p.getContext(), p.getName());
session.commit();
session.close();
return "/list";
}

查↓


	@RequestMapping("list")      //查询所有诗
	public String list(Model model) throws IOException {
		String resource = "Mybatis.xml";
		InputStream inputStream = Resources.getResourceAsStream(resource);
		SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
		SqlSession session=sqlSessionFactory.openSession();
		userMapper usermapper=session.getMapper(userMapper.class);
		List<User> list=  usermapper.list();
		model.addAttribute("poetry", list);
	return "/WEB-INF/pages/main.jsp";	
	}

3对删除功能的权限验证

利用springmvc的拦截器进行权限验证,若发送请求的用户不是指定的管理员(项目中管理员id为“666”),则无法进行删除。

springmvc.xml对拦截器的配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
        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/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd 
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd">

<context:component-scan base-package="com.poetry"></context:component-scan>
<mvc:interceptors>
		
		<mvc:interceptor>
			<!-- 只拦截该路径 -->
			<mvc:mapping path="/delete/**"/>
			<bean class="com.poetry.service.HandlerInterceptor"></bean>
		</mvc:interceptor>
	</mvc:interceptors>

</beans>

拦截器的实现代码:

package com.poetry.service;

import java.io.InputStream;

import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.springframework.web.servlet.AsyncHandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import com.poetry.bean.User;
import com.poetry.mapper.userMapper;

public class HandlerInterceptor implements AsyncHandlerInterceptor {
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {String resource = "Mybatis.xml";
			InputStream inputStream = Resources.getResourceAsStream(resource);
			SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
			SqlSession session=sqlSessionFactory.openSession();
			userMapper usermapper=session.getMapper(userMapper.class);
			HttpSession session1 = request.getSession();
			
			
			if((session1).getAttribute("id")!=null) {
			if(((session1).getAttribute("id")).equals(666)){return true;}
			
		    else {System.out.println("抱歉,无权访问");
		
		        request.getRequestDispatcher("/list").forward(request, response);
		        return false;}
		
		}else return true;}
	 
		public void postHandle(
				HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
				throws Exception {
		}
	 
		public void afterCompletion(
				HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
				throws Exception {
		}
	 
		public void afterConcurrentHandlingStarted(
				HttpServletRequest request, HttpServletResponse response, Object handler)
				throws Exception {
		}

点赞功能

用户点击点赞按钮,会使每一个Poetry对象的heat(int)属性增加10。

代码↓

@RequestMapping("/nicepoetry/{name}") 

public String nicepoetry(@PathVariable("name") String name,HttpSession httpsession) throws IOException {
	String resource = "Mybatis.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession session=sqlSessionFactory.openSession();
	userMapper usermapper=session.getMapper(userMapper.class);
	usermapper.nicepoetry(name);
	int userid=(int) httpsession.getAttribute("id");
	
	String stylename=(usermapper.searchPoetry(name).getStyle());
	if(stylename.equals("haofang")) {usermapper.hobby1(userid);}
	if(stylename.equals("wanyue")) {usermapper.hobby2(userid);}
	if(stylename.equals("sixiang")) {usermapper.hobby3(userid);}
	
	session.commit();
	session.close();
	return "/list";
} 

5 推荐功能(个人最满意的功能)

在前面点赞的基础上实现。具体:用户对某一首诗句进行点赞,后台会根据用户所点赞对象(poetry)的流派属性(style),在数据库中对该用户信息中的对应字段增加值(比如用户对一首豪放派的诗进行点赞,数据库中该用户对应的字段“haofang”值就增加10).在此基础上,用户点击“猜你喜欢”按钮,后台首先查询该用户的最喜爱的流派(根据数据库中haofang,wanyue,sixiang,三个字段中最大值即为最喜爱的流派),然后再去数据库中查询对应用户最喜欢的流派的诗句,并在一个新的页面中单独展示。

实现代码:

 <update id="hobby1">
    
    update user set haofang=haofang+10 where id=#{id}
    
    
    </update>
    
    <update id="hobby2">
    
    update user set wanyue=wanyue+10 where id=#{id}
    
    
    </update>
    
    <update id="hobby3">
    
    update user set sixiang=sixiang+10 where id=#{id}
    
    
    </update>
@RequestMapping("/recommend")

public String recommend(Model moedl,HttpSession httpsession) throws IOException{
	String resource = "Mybatis.xml";
	InputStream inputStream = Resources.getResourceAsStream(resource);
	SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
	SqlSession session=sqlSessionFactory.openSession();
	userMapper usermapper=session.getMapper(userMapper.class);
	User temp;
	String besthobby = null;
	temp=usermapper.searchUser((int) httpsession.getAttribute("id"));
	int index=0;
	if(temp!=null) {
	if(temp.getHaofang()>index   )	{index=temp.getHaofang();besthobby="haofang";}
	if(temp.getWanyue()>index   )	{index=temp.getWanyue();besthobby="wanyue";}
	if(temp.getWanyue()>index   )	{index=temp.getWanyue();besthobby="sixiang";}
	
	List<Poetry> list=usermapper.searchPoetry2(besthobby);
	moedl.addAttribute("poetry222", list);
	}
	
	
	
	return "/WEB-INF/pages/guess.jsp";
	

5.项目展示

欢迎界面:登录和注册页面
个人项目:诗词网站(SSM框架)_第3张图片
注册页面
个人项目:诗词网站(SSM框架)_第4张图片
登陆页面(666为管理员)
个人项目:诗词网站(SSM框架)_第5张图片
主页面展示
个人项目:诗词网站(SSM框架)_第6张图片

分享诗句功能
个人项目:诗词网站(SSM框架)_第7张图片

猜你喜欢(推荐)功能
个人项目:诗词网站(SSM框架)_第8张图片

权限功能(用户123不是管理员,因此会在控制台输出无法更改)

个人项目:诗词网站(SSM框架)_第9张图片

你可能感兴趣的:(项目实战)