project通讯系统(登录、收发消息)总结

开发工具

STS,Mysql,PowerDesigner,Tomcat v9.0,navicat.

主要技术

采用JSP+Servlet+Javabean来实现,有负责前台展示的 JSP、负责流程逻辑控制的Servlet以及负责数据封装的

Javabean

项目描述

为公司制作一个内部管理系统,作为开发人员之一,主要负责登录过滤模块消息管理模块,其中消息管理模块主要负

责公司内部人员的消息发送、接收、分页查看信息等功能

 

思路:

Dao  →  service    servlet  →  jsp 

 

功能

1.登录(过滤器)

2.发送消息,查看已发/已收消息(分页),删除消息(逻辑删除)

技术点总结:

1.登录过滤

验证mysql数据库中是否存在对应用户名及密码,若登陆成功则将用户信息存入session中,若登录失败则停留在登录页。

使用Filter(过滤器),拦截session(对所有servlet功能以及所有页面进行过滤)。

将ServletRequest转换为HttpServletRequest,获得session,若存在用户则放行,否则拦截。

Filter代码:

@WebFilter(urlPatterns= {"*.do","/files/*","/index.html","/index.jsp"})
public class LoginFilter implements Filter {

	List<String> list=new ArrayList();//可放行的
	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here
		HttpServletRequest req=(HttpServletRequest)request;
		String path=req.getServletPath();
		if(list.contains(path)) {
			chain.doFilter(request, response);
		}else {
			HttpSession session=req.getSession();
			Emp emp=(Emp)session.getAttribute("emp");
			if(emp!=null) {
				chain.doFilter(request, response);
			}else {
				HttpServletResponse res=(HttpServletResponse)response;
				String context=req.getServletContext().getContextPath();
				System.out.println(context);
				res.sendRedirect(context+"/login.html");
			}
		}
		
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
			list.add("/login.html");
			list.add("/login.do");
	}

}

2.收、发消息

创建vo对象,创建Dao接口,Mapper.xml映射,完成sql语句。(部分mapper需要高级映射)

service调用dao的方法完成各功能。

servlet:接收数据,调用service,转发请求。

3.消息的分页查看、删除功能

分页思路:

1.创建一个pageInfo类用来存储分页信息。

int currentPage=1; //当前页号
	
	int recordCount=0; //总记录数
	
	int pageSize=5; //每页记录数
	
	String url=null; //请求的url

	int pageCount=0;//总页数

//getter、setter此处省略

//计算总页数方法
	public int getPageCount() {
		if(this.recordCount%this.pageSize==0) {
			return this.recordCount/this.pageSize;
		}else {
			return this.recordCount/this.pageSize+1;
		}
	}
	
	//构造方法
	public pageInfo(HttpServletRequest request) {
		if(request.getParameter("currentPage")!=null) {
			//设置当前页
			this.currentPage=Integer.valueOf(request.getParameter("currentPage"));
		}
		//记录url
		this.url=request.getRequestURL().toString();
		//存入request
		request.setAttribute("pageInfo", this);
	}

1.总页数可以通过方法计算出来,构造方法需要参数request,根据request获得分页信息(根据不同登录用户获得分页信息)

2.分页查询需要两条sql语句

<select id="getReceiveMessageForPage" resultType="map">
	<![CDATA[SELECT RECEIVEID,s.EMPID empid,createDate,openDate,messageTitle,s.SENDID sendid,empName FROM to_receivemessage r INNER JOIN to_sendmessage s
ON r.SENDID=s.SENDID INNER JOIN tb_emp e
ON s.EMPID=e.EMPID 
WHERE r.EMPID=#{empId} AND r.MESSAGESTATE<>2 limit #{first},#{second}
	]]>
	</select>
	
	<select id="getReceiveCount" resultType="Integer">
	SELECT COUNT(*) from to_receivemessage where empId=#{empId}
	</select>

一条查询记录结果,一条查询总记录数。

 

遇到的问题:

1.路径问题:

书写servlet与JSP路径两种方法:

方法一:servlet与JSP路径一致。

方法二:若不一致,JSP中所有资源应使用绝对路径。

例子:若servlet映射路径在根路径,JSP路径在“根路径/files/”下,若通过servlet访问JSP,则当前路径为根路径,JSP中资源会从根路径中查找 ,会有找不到资源的问题。

2.${}与#{}的区别?

参考本人另一篇总结:https://blog.csdn.net/Sunhongyu51/article/details/91422736

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值