zoukankan      html  css  js  c++  java
  • 基于JSP+SERVLET的新闻发布系统(一)

    本系统使用的是基于JSP+SERVLET+TOMCAT6

    数据库使用的是MYSQL

    IDE是MYECLIPSE8.5,页面编辑使用的是百度的ueditor,比较适合咱国人

    采用MVC模式,使用的关键技术,通用的分页技术,一些项目开发的小技巧,如批量删除,,,本文章适合刚学习JSP+SERVLET,但没有实战经验的童鞋。欢迎交流学习。

    1,第一个模块是登陆处理。

    关键代码如下:

    		<form action="${pageContext.request.contextPath }/user?method=login" onsubmit="return submitCheck();"
    			method="post" id="loginForm">
    			<fieldset>
    			<legend>用户登录</legend>
    			用户名:<input type="text" id="userName" name="userName" /><br /> <br/>
    			密     码:<input
    				type="password" id="password" name="password" /><br /> 
    				<input type="submit" value="登录" /> <br /> 
    			<span id="msg" style="color: red">${msg}</span>
    			</fieldset>
    		</form>

    <span id="msg" style="color: red">${msg}</span>该句代码用于反馈后台的校验信息,如用户名与密码不匹配等。

    接受参数使用的是一个小工具类

      User user = (User) CopyPropertyUtil.copyPropertiesFromRequest(request,
        User.class);

    该方法会自动的把接受到的FORM表单的值赋值到User类中,可以节省很多重复性的代码。
    SERVLET的关键代码如下:

    		if ("login".equals(method)) {
    			user = userService.checkUser(user);
    			if (StringUtils.isNotBlank(user.getUserName())) {
    				HttpSession session = request.getSession();
    				session.setAttribute("user", user);
    				request.getRequestDispatcher("index.html").forward(request,
    						response);
    			} else {
    				request.setAttribute("msg", "用户名或密码错误");
    				request.getRequestDispatcher("index.jsp").forward(request,
    						response);
    			}
    		}

    request.setAttribute("msg", "用户名或密码错误");用于反馈错误信息到登陆页面。

    2,登陆成功则是菜单栏,由于时间有限,没有做菜单的动态生成。

    在LEFT.JSP中,查询的链接统一用user?method=query    method的query ,在该方法中写了通用的分页,并且是加上查询结果的分页。

    		if ("query".equals(method)) {
    			queryAll(request, response, user);
    		}


     

    	public void queryAll(HttpServletRequest request,
    			HttpServletResponse response, User user) throws ServletException,
    			IOException {
    		int currPage;
    		try {
    			currPage = Integer.valueOf(request.getParameter("currPage"));
    		} catch (Exception e) {
    			currPage = 1;
    		}
    		Page page = new Page();
    		List<User> list = userService.findAll(user);
    		page.setTotalPage(list.size());
    		page.toPage(currPage);
    		list = userService.findAll(user, page);
    		request.setAttribute("user", user);
    		request.setAttribute("page", page);
    		request.setAttribute("userList", list);
    		request.getRequestDispatcher("/user/userList.jsp").forward(request,
    				response);
    	}


    request.setAttribute("page", page);   该对象用于保存分页的信息.

    List<User> list = userService.findAll(user); 该方法是查询出需要显示的集合数据。

    DAO代码如下:

    	public List findAll(User user){
    		Connection conn = DBUtil.getConnection();
    		ArrayList list= new ArrayList();
    		StringBuilder sb = new StringBuilder();
    		sb.append("select * from user where 1 = 1 ");
    		if(StringUtils.isNotBlank(user.getUserName())){
    			sb.append(" and userName like '%"+user.getUserName()+"%'");
    		}if(StringUtils.isNotBlank(user.getRole())){
    			sb.append(" and role like '%"+user.getRole()+"%'");
    		}
    		ResultSet rs =  DBUtil.querySQL(sb.toString(), null,conn);
    		try{
    		while(rs.next()){
    			User temp = new User();
    			temp.setUserId(rs.getInt(1));
    			temp.setUserName(rs.getString(2));
    			temp.setPassword(rs.getString(3));
    			temp.setRole(rs.getString(4));
    			list.add(temp);
    		}
    		}catch(Exception e){
    			e.printStackTrace();
    		}finally{
    			DBUtil.closeAll(rs, null, conn);
    		}
    		return list;
    	}


    效果如下:

    接下来将重点讲解基于查询结果的分页技术。

    由于查询条件的是通过FORM提交,但是在点击“下一页”的时候仍需保存之前的查询条件,可采用如下方式解决。

      <a href="${pageContext.request.contextPath}/user?currPage=${page.currPage+1 }&method=queryPage&userName=${user.userName}&role=${user.role}">下一页</a>


    将查询条件放在链接中,这样就能一直保存查询的条件,查询出正确的结果。

    但是由于通过表单提交跟链接的解码方式不一样,因此需另外处理。

    解码如下:

    		if ("queryPage".equals(method)) {
    			String userName = null, role = null;
    		//	当查询条件是通过链接的时候,由于是中文,所以需要进行解码
    				if (StringUtils.isNotBlank(request.getParameter("userName")))
    					userName = new String(request.getParameter("userName")
    							.getBytes("ISO-8859-1"), "UTF-8");
    				if (StringUtils.isNotBlank(request.getParameter("role")))
    					role = new String(request.getParameter("role").getBytes(
    							"ISO-8859-1"), "UTF-8");
    				user.setUserName(userName);
    				user.setRole(role);
    			queryAll(request, response, user);
    		}


    这样就能完美解决基于查询结果的分页了。

    3‘SELECT动态获取数据

    角色中的数据是动态加载的,可使用如下语句获得:

    						<select name="role" id=""role"" style=" 100">
    							<option value="">请选择</option>
    							<%
    							Role role = new Role();
    							RoleService roleService = new RoleService();
    							List<Role> roleList = roleService.findAll(role);
    								if(roleList!=null&&roleList.size()>0){
    									for(int i=0;i<roleList.size();i++){
    										role=roleList.get(i);%>
    											<option value="<%=role.getRoleId() %>">
    												<%=role.getRoleName() %>
    											</option>
    									<%}
    								}%>
    							</select>


    4,删除使用的是批量删除,其实批量删除很简单,如果说难的话就是JS不会用,

    我们可以通过CHECKBOX获取所有选中的ID,然后拼接成字符串,提交到后台,可拼接成1,2,3,5

    后台可以使用如下方法去拆分

    			String str = request.getParameter("str");
    			str = str.substring(0, str.length() - 1);
    			String box[] = str.split(",");
    			for (String temp : box) {
    				int userId = Integer.valueOf(temp);
    				user.setUserId(userId);
    				userService.delUser(user);
    			}

    先上传这么多,晚点更新其他模块。


     

  • 相关阅读:
    Leetcode 647 回文子串
    计算机专业课程——答案搜集
    Centos搭建go环境以及go入门
    android studio实现圆角的button
    关于区块链的认识和看法
    LeetCode 96. 不同的二叉搜索树
    LeetCode 120. Triangle (三角形最小路径和)详解
    LeetCode 64最小路径和
    微信发起摄像头接口请求 上传头像 图片
    Vue解决项目白屏以及(反向代理)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3144833.html
Copyright © 2011-2022 走看看