做项目中,好的逻辑,代码

做项目中,好的逻辑,代码

1. 将不经常改变的数据放在redis缓存中(自动的排序)

public class CategoryServiceImpl implements CategoryService {
    
    

    private CategoryDao categoryDao = new CategoryDaoImpl();

    @Override
    public List<Category> findAll() {
    
    
        //1.从redis中查询
        //1.1获取jedis客户端
        Jedis jedis = JedisUtil.getJedis();
        //1.2可使用sortedset排序查询
        //Set<String> categorys = jedis.zrange("category", 0, -1);
        //1.3查询sortedset中的分数(cid)和值(cname)
        Set<Tuple> categorys = jedis.zrangeWithScores("category", 0, -1);

        List<Category> cs = null;
        //2.判断查询的集合是否为空
        if (categorys == null || categorys.size() == 0) {
    
    

            System.out.println("从数据库查询....");
            //3.如果为空,需要从数据库查询,在将数据存入redis
            //3.1 从数据库查询
            cs = categoryDao.findAll();
            //3.2 将集合数据存储到redis中的 category的key
            for (int i = 0; i < cs.size(); i++) {
    
    

                jedis.zadd("category", cs.get(i).getCid(), cs.get(i).getCname());
            }
        } else {
    
    
            System.out.println("从redis中查询.....");

            //4.如果不为空,将set的数据存入list
            cs = new ArrayList<Category>();
            for (Tuple tuple : categorys) {
    
    
                Category category = new Category();
                category.setCname(tuple.getElement());
                category.setCid((int)tuple.getScore());
                cs.add(category);

            }
        }


        return cs;
    }
}

逻辑:
    1. 查看redis中是由有需要的数据
    	* 没有, 从Mysql中查询,后存放到redis中,返回
    	* 有,从redis中获取,转为list后,返回

2. 分页栏的显示的个数,始终保证在10个(仿百度的效果)

前台的分页栏进行优化

 // 定义开始位置begin,结束位置 end
        var begin; // 开始位置
        var end ; //  结束位置


        //1.要显示10个页码
        if(pb.totalPage < 10){
    
    
            //总页码不够10页

            begin = 1;
            end = pb.totalPage;
        }else{
    
    
            //总页码超过10页

            begin = pb.currentPage - 5 ;
            end = pb.currentPage + 4 ;

            //2.如果前边不够5个,后边补齐10个
            if(begin < 1){
    
    
                begin = 1;
                end = begin + 9;
            }

            //3.如果后边不足4个,前边补齐10个
            if(end > pb.totalPage){
    
    
                end = pb.totalPage;
                begin = end - 9 ;
            }
        }

		var li=''; 		// 进行拼接字符串使用 单引号
		
        for (var i = begin; i <= end ; i++) {
    
    
            // 进行分页栏的相同代码进行拼接
            
        }    



3. 分页查询同过condition的map集合进行拼接sql (多用,实际)

pageBean对象

int currentPage ;	// 当前页
int pageSize ; 		// 每页的数据的个数
int totalPage ; 	// 总的页数
int totalCount ;	// 总的数据的个数
List<User> userList ;	// 数据的信息

公式:
	int start = (currentPage -1 ) * pageSize;
	totalPage = totalCount % pageSize > 0 ? (totalCount / pageSize) +1 : totalCount / pageSize
	

查询总的数据的个数

int findCountByCondition(map<String , Strin[]>condition){
    
    
	//这里是主要进行sql的拼接
    
    String sql = "select * from tab_user where 1=1 " ;  // 拼接的时候,空格
    StringBuidler sb = new StringBuilder(sql);
    
    List<Object> list = new ArrayList<>();
    
    Set<String> keyset = condition.keyset();
    
    for(String key : keyset){
    
    
		if("currerntPage".equals(key) || "PageSize".equals(key) ){
    
    	// limit用的不进行sql拼接
			continue;
        }
        
        String value = map.get(key)[0];
        if(value != null || !"".equals(values) ){
    
    
            sb.append(" and "+key+" like ? ");	// 条件查询,使用like
            list.add("%"+value+"%");
        }
        
    	
    }
    
    int count = jdbcTemplate.qeuryForObeject(sb.tostring(),Integer.class,list.toArray());
    return count;
}
PageBean findPageBeanByCondition(Map<String ,String[]>condition,int start ,int pageSize){
    
    
    
    String sql = "select * from tab_user where 1=1 " ;  // 拼接的时候,空格
    StringBuidler sb = new StringBuilder(sql);
    
    List<Object> list = new ArrayList<>();
    
    Set<String> keyset = condition.keyset();
    
    for(String key : keyset){
    
    
		if("currerntPage".equals(key) || "PageSize".equals(key) ){
    
    	// limit用的不进行sql拼接
			continue;
        }
        
        String value = map.get(key)[0];
        if(value != null || !"".equals(values) ){
    
    
            sb.append(" and "+key+" like ? ");	// 条件查询,使用like
            list.add("%"+value+"%");
    	}	
    }
    
    sb.append(" limit ?,?");
    list.add(start);
    list.add(pageSize);
    
    List<User>  userList=
        jdbcTemplate.query(sb.tostring(),new BeanPoopertoes<>(User.class),list.toArray());
    
    return userList;
    
}

4. 乱码的转换

String rname = req.getParama("rname");	// 如果是乱码

alter(rname);

rname = new String(rname.getByte("iso-8859-1"),"utf-8");

alter(rname);

5. 从location中拿到参数的数据

location.seach

页面1 index。html

<a href = "index2.html?cid=5">点击进行跳转</a>

index2.html

<script>
	$(function(){
    
    
    	var search = location.search;
  	 //alert(search);//?id=5
    // 切割字符串,拿到第二个值
   	var cid = search.split("=")[1];   // 5 
    
	});

</script>

6. 表单的验证

提升用户体验,并减轻服务器压力

//校验用户名
//单词字符,长度8到20位
function checkUsername() {
    
    
             //1.获取用户名值
   var username = $("#username").val();
   //2.定义正则
   var reg_username = /^\w{8,20}$/;
   
   //3.判断,给出提示信息
    var flag = reg_username.test(username);
    if(flag){
    
    
        //用户名合法
                 $("#username").css("border","");
   }else{
    
    
        //用户名非法,加一个红色边框
      $("#username").css("border","1px solid red");
   }
    
    return flag;
}

//校验密码
function checkPassword() {
    
    
    //1.获取密码值
    var password = $("#password").val();
    //2.定义正则
    var reg_password = /^\w{8,20}$/;

    //3.判断,给出提示信息
    var flag = reg_password.test(password);
    if(flag){
    
    
        //密码合法
        $("#password").css("border","");
    }else{
    
    
        //密码非法,加一个红色边框
        $("#password").css("border","1px solid red");
    }

    return flag;
}

//校验邮箱
function checkEmail(){
    
    
    //1.获取邮箱
   var email = $("#email").val();
   //2.定义正则      [email protected]
   var reg_email = /^\w+@\w+\.\w+$/;

   //3.判断
   var flag = reg_email.test(email);
   if(flag){
    
    
        $("#email").css("border","");
   }else{
    
    
        $("#email").css("border","1px solid red");
   }

   return flag;
}


$(function () {
    
    
             //当表单提交时,调用所有的校验方法
   $("#registerForm").submit(function(){
    
    
       
      return checkUsername() && checkPassword() && checkEmail();
      //如果这个方法没有返回值,或者返回为true,则表单提交,如果返回为false,则表单不提交
   });

            //当某一个组件失去焦点是,调用对应的校验方法
   			$("#username").blur(checkUsername);
            $("#password").blur(checkPassword);
            $("#email").blur(checkEmail);

});

7.优化Servlet 变成SpringMvc的访问路径

BaseServlet extends HttpServlet // 所以BaseServlet 就是一个servlet

UserServlet extends BaseServlet // BaseServlet 重写service方法

//谁调用我?我代表谁
        System.out.println(this);//UserServlet的对象	cn.itcast.travel.web.servlet.UserServlet@4903d97e

访问的路径:/user/add     访问的是userServlet后,会自动的调用service()方法
    									service()方法是继承BaseServlet的。

BaseServlet

public class BaseServlet extends HttpServlet {
    
    


    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        //System.out.println("baseServlet的service方法被执行了...");

        //完成方法分发
        //1.获取请求路径
        String uri = req.getRequestURI(); //   /travel/user/add
        System.out.println("请求uri:"+uri);//  /travel/user/add
        //2.获取方法名称
        String methodName = uri.substring(uri.lastIndexOf('/') + 1);	// add
        System.out.println("方法名称:"+methodName);
        //3.获取方法对象Method
        //谁调用我?我代表谁
        System.out.println(this);//UserServlet的对象	cn.itcast.travel.web.servlet.UserServlet@4903d97e
        try {
    
    
            //获取方法
            Method method = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);
            //4.执行方法
            //暴力反射
            //method.setAccessible(true);
            method.invoke(this,req,resp);
        } catch (NoSuchMethodException e) {
    
    
            e.printStackTrace();
        } catch (IllegalAccessException e) {
    
    
            e.printStackTrace();
        } catch (InvocationTargetException e) {
    
    
            e.printStackTrace();
        }


    }
}

userservlet

@WebServlet("/user/*") // /user/add /user/find
public class UserServlet extends BaseServlet {
    
    

    /**
     * 注册功能
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void regist(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    						// 注意:这里的方法必须为public 

    }

    /**
     * 登录功能
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        
    }

    /**
     * 查询单个对象
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void findOne(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        
    }

    /**
     * 退出功能
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void exit(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
        
    }

    /**
     * 激活功能
     * @param request
     * @param response
     * @throws ServletException
     * @throws IOException
     */
    public void active(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    
    
       
    }
}

进行拦截路径

继承拦截器
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    
    

		HttpSession session = request.getSession();
		String[] noNeedAuthPage = new String[]{
    
    
				"/home",
				"/searchProduct",
				"/sortProduct",
				"/showProduct",
				"/loginPage",
				"/login",
				"/registerPage",
				"/register",
				"/registerSuccessPage",
				"/test",
				"/checkLogin",
				"/admin"
		};
		String uri = request.getRequestURI();
		if (!Arrays.asList(noNeedAuthPage).contains(uri)) {
    
    
			User user = (User) session.getAttribute("user");
			if (null == user) {
    
    
				response.sendRedirect("/loginPage");
				return false;
			}
		}
		return true;
	}

猜你喜欢

转载自blog.csdn.net/qq_46539281/article/details/115348568