1 注册,登录功能
2 对网站内诗词的增,删,改,浏览。
3 删除功能权限限定(只有指定帐号可以删除(管理员))
4 诗词点赞功能(用指标heat体现),提升热度(heat)的方法就是用户点击点赞按钮。
5 基于用户偏好的推荐功能(用户的点赞行为会在后台记录,基于后台记录进行推荐)
实体类
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;
}
}
登录模块↓
@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";}}
增
<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";
}
利用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";
}
在前面点赞的基础上实现。具体:用户对某一首诗句进行点赞,后台会根据用户所点赞对象(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";
欢迎界面:登录和注册页面
注册页面
登陆页面(666为管理员)
主页面展示
权限功能(用户123不是管理员,因此会在控制台输出无法更改)