mg4155com > mg4155线路检测手机版 > JAVAWEB整个的文化类别,MVC核心技能

原标题:JAVAWEB整个的文化类别,MVC核心技能

浏览次数:50 时间:2019-10-08

Anyway, Good luck, Richardo! -- 10/14/2016

mg4155线路检测手机版 1

登记极度管理器

4.true。 System.out.println(a1 instanceof Integer);

本人有贰个微信民众号,平时会享用部分Java本领相关的干货;假若您喜爱作者的享受,能够用微信找寻“Java司令员”恐怕“javatuanzhang”关切。

reference:

1.分页

import java.io.Serializable; /** * 分页 */ public class Page implements Serializable { private static final long serialVersionUID = -3198048449643774660L; private int pageNow = 1; // 当前页数 private int pageSize = 4; // 每页显示记录的条数 private int totalCount; // 总的记录条数 private int totalPageCount; // 总的页数 @SuppressWarnings private int startPos; // 开始位置,从0开始 @SuppressWarnings private boolean hasFirst;// 是否有首页 @SuppressWarnings private boolean hasPre;// 是否有前一页 @SuppressWarnings private boolean hasNext;// 是否有下一页 @SuppressWarnings private boolean hasLast;// 是否有最后一页 /** * 通过构造函数 传入 总记录数 和 当前页 * @param totalCount * @param pageNow */ public Page(int totalCount, int pageNow) { this.totalCount = totalCount; this.pageNow = pageNow; } /** * 取得总页数,总页数=总记录数/总页数 * @return */ public int getTotalPageCount() { totalPageCount = getTotalCount() / getPageSize(); return (totalCount % pageSize == 0) ? totalPageCount : totalPageCount + 1; } public void setTotalPageCount(int totalPageCount) { this.totalPageCount = totalPageCount; } public int getPageNow() { return pageNow; } public void setPageNow(int pageNow) { this.pageNow = pageNow; } public int getPageSize() { return pageSize; } public void setPageSize(int pageSize) { this.pageSize = pageSize; } public int getTotalCount() { return totalCount; } public void setTotalCount(int totalCount) { this.totalCount = totalCount; } /** * 取得选择记录的初始位置 * @return */ public int getStartPos() { return (pageNow - 1) * pageSize; } public void setStartPos(int startPos) { this.startPos = startPos; } /** * 是否是第一页 * @return */ public boolean isHasFirst() { return (pageNow == 1) ? false : true; } public void setHasFirst(boolean hasFirst) { this.hasFirst = hasFirst; } /** * 是否有首页 * @return */ public boolean isHasPre() { // 如果有首页就有前一页,因为有首页就不是第一页 return isHasFirst() ? true : false; } public void setHasPre(boolean hasPre) { this.hasPre = hasPre; } /** * 是否有下一页 * @return */ public boolean isHasNext() { // 如果有尾页就有下一页,因为有尾页表明不是最后一页 return isHasLast() ? true : false; } public void setHasNext(boolean hasNext) { this.hasNext = hasNext; } /** * 是否有尾页 * @return */ public boolean isHasLast() { // 如果不是最后一页就有尾页 return (pageNow == getTotalCount ? false : true; } public void setHasLast(boolean hasLast) { this.hasLast = hasLast; } }

有了那些工具类后,首先编写MyBatis的XxxxMapper.xml配置文件中的SQL语句,如下:

<!-- 分页SQL语句 --> <select resultMap="返回值类型"> select * from 表名 WHERE user_id = #{userId,jdbcType=INTEGER} limit #{startPos},#{pageSize} </select> <!-- 取得记录的总数 --> <select resultType="long"> SELECT COUNT FROM 表名 WHERE user_id = #{userId,jdbcType=INTEGER} </select>

此间我们能够看看,2个<select>须要各自传入3个和1个参数,此时在相应的DAO文件IXxxxDao中编辑接口来编排对应的法门,方法名和mapper.xml中的id属性值一致:

/** * 使用注解方式传入多个参数,用户产品分页,通过登录用户ID查询 * @param page * @param userId * @return startPos},#{pageSize} */ public List<Products> selectProductsByPage(@Param(value="startPos") Integer startPos,@Param(value="pageSize") Integer pageSize,@Param(value="userId") Integer userId); /** * 取得产品数量信息,通过登录用户ID查询 * @param userId * @return */ public long getProductsCount(@Param(value="userId") Integer userId);

接口定义完毕现在必要编制相应的思想政治工作接口和贯彻格局,在接口中定义那样二个艺术,然后完成类中覆写一下:

/** * 分页显示商品 * @param request * @param model * @param loginUserId */ void showProductsByPage(HttpServletRequest request,Model model,int loginUserId);

JAVAWEB整个的文化类别,MVC核心技能。接下去贯彻类中的方法正是要调用DAO层和接受Controller传入的参数,实行当务逻辑的管理,request用来取得前端传入的参数,model用来向JSP页面再次来到管理结果。

@Override public void showProductsByPage(HttpServletRequest request, Model model,int loginUserId) { String pageNow = request.getParameter("pageNow"); Page page = null; List<ProductWithBLOBs> products = new ArrayList<ProductWithBLOBs>(); int totalCount =  productDao.getProductsCount(loginUserId); if (pageNow != null) { page = new Page(totalCount, Integer.parseInt; allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId); } else { page = new Page(totalCount, 1); allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId); } model.addAttribute("products", products); model.addAttribute("page", page); }

接下去是调整器的编辑,当顾客要求跳转到这么些现实产品的页面时,就必要通过这几个调整器中相应措施的拍卖,那几个管理进程就是调用业务层的措施来完毕,然后回来结果到JSP动态展现,服务器端生成好页面后传给顾客端现实,那正是三个MVC进度。

/** * 初始化 “我的产品”列表 JSP页面,具有分页功能 * * @param request * @param model * @return */ @RequestMapping(value = "映射路径", method = RequestMethod.GET) public String showMyProduct(HttpServletRequest request, Model model) { // 取得SESSION中的loginUser User loginUser =  request.getSession().getAttribute("loginUser"); // 判断SESSION是否失效 if (loginUser == null || "".equals(loginUser)) { return "redirect:/"; } int loginUserId = loginUser.getUserId(); //此处的productService是注入的IProductService接口的对象 this.productService.showProductsByPage(request, model, loginUserId); return "跳转到的JSP路径"; }

JSP页面接受一些作者就不写了,各类人都一致,约等于组成JSTL和EL来写,(在循环输出的时候也做了剖断,借使接受的参数为空,那么输出暂无商品,唯有接受的参数不为空的时候,才循环输出,使用<<c:when test="${}">结合<c:otherwise>),这里只交给分页的相干代码:

<!-- 分页功能 start --> <div align="center"> <font size="2">共 ${page.totalPageCount} 页</font> <font size="2">第 ${page.pageNow} 页</font> <a href="myProductPage?pageNow=1">首页</a> <c:choose> <c:when test="${page.pageNow - 1 > 0}"> <a href="myProductPage?pageNow=${page.pageNow - 1}">上一页</a> </c:when> <c:when test="${page.pageNow - 1 <= 0}"> <a href="myProductPage?pageNow=1">上一页</a> </c:when> </c:choose> <c:choose> <c:when test="${page.totalPageCount==0}"> <a href="myProductPage?pageNow=${page.pageNow}">下一页</a> </c:when> <c:when test="${page.pageNow + 1 < page.totalPageCount}"> <a href="myProductPage?pageNow=${page.pageNow + 1}">下一页</a> </c:when> <c:when test="${page.pageNow + 1 >= page.totalPageCount}"> <a href="myProductPage?pageNow=${page.totalPageCount}">下一页</a> </c:when> </c:choose> <c:choose> <c:when test="${page.totalPageCount==0}"> <a href="myProductPage?pageNow=${page.pageNow}">尾页</a> </c:when> <c:otherwise> <a href="myProductPage?pageNow=${page.totalPageCount}">尾页</a> </c:otherwise> </c:choose> </div> <!-- 分页功能 End -->

拦截器

拦截器注册与使用

Spring MVC中拦截器需求贯彻HandlerInterceptor接口, 该接口饱含多个格局

preHandle(req, res, handler)

在Computer方法在此之前试行, 再次来到boolean, 若为true, 则跟着实行管理器方法, 且会将

afterCompletion()方法放入八个特地的秘技栈中等待推行.

postHandler(req, res, handler, ModelAndView)

在Computer方法之后实施, 管理器方法若未实施, 则该措施不实践.

该办法能够修改管理器方法再次回到的结果, 并能够跳转到其余页面.

afterCompletion(req, res, handler, exception)

当preHandle重临ture后, 会将该办法放入等待区, 等具备需要响应截止, 实践该方法.

即中心管理器渲染了响应页面之后施行, 此时对ModelAndView修改也不会影响到页面结果.

mg4155线路检测手机版 2

 1 public class OneInterceptor implements HandlerInterceptor { 2 3 public boolean preHandle(HttpServletRequest request, 4 HttpServletResponse response, Object handler) throws Exception { 5 System.out.println("执行OneIntercepor ---- preHandle() ------"); 6 return false; 7 } 8 9 public void postHandle(HttpServletRequest request,10 HttpServletResponse response, Object handler,11 ModelAndView modelAndView) throws Exception {12 System.out.println("执行OneIntercepor ---- postHandle() ------");13 }14 15 public void afterCompletion(HttpServletRequest request,16 HttpServletResponse response, Object handler, Exception ex)17 throws Exception {18 System.out.println("执行OneIntercepor ---- afterCompletion() ------");19 }20 21 }

在安顿文件中注册

1 <!-- 注册拦截器 -->2 <mvc:interceptors>3 <mvc:interceptor>4 <mvc:mapping path="/**"/>5 <bean />6 </mvc:interceptor>7 </mvc:interceptors>

<mvc:mapping/>用于钦定当前拦截器拦截的呼吁路线, /**代表拦截全数恳求.

多少个拦截器

当有两个拦截器时, 变成阻碍器链, 拦截器链施行顺序与登记顺序一致, 须求留意的是,

当三个拦截器preHandle()重回false时, 上部的遏止器链将被断开, 后续的微型Computer以及对于的postHandle()

都敬谢不敏实行, 独有已经实践通过的拦截器的afterCompletion()方法会实践.

mg4155线路检测手机版 3

实际上运用

  • 权限校验: 决断当前恳请是不是登录, 若未登入依然无权力, 重回对应的分界面.
  • 品质监察和控制: 监察和控制系统钦命方法实行的时间, 寻觅系统质量调优点.
  • 日记打印: 记录诉求日志, 用于系统监察和控制, 消息总计与分析等等.
  • ......

自家有三个微信公众号,日常会享受部分Java技巧有关的干货;借令你欢跃自个儿的享用,能够用微信寻觅“Java司令员”恐怕“javatuanzhang”关怀。

3.true System.out.println(a1.equals; 以下是interger类型的equals函数,差异的复合类是差别的

mg4155线路检测手机版 4mg4155线路检测手机版 5mg4155线路检测手机版 6mg4155线路检测手机版 7mg4155线路检测手机版 8mg4155线路检测手机版 9

reference:

分页是Java Web项目常用的功力,今日在Spring MVC中落到实处了简要的分页操作和搜索分页,在此记录一下。使用的框架为(MyBatis+SpringMVC+Spring)。

 1 public class MyDateConverter implements Converter<String, Date> { 2 3 public Date convert(String source) { 4 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 5 try { 6 return sdf.parse; 7 } catch (ParseException e) { 8 e.printStackTrace(); 9 }10 return null;11 }12 13 }

1.false 。 String str1 = new String; String str2 = new String; System.out.println(str1 == str2);类中的 ‘==’ 相比较的是内部存款和储蓄器地址,通过new生成的靶子会在堆中开创三个新的对象,内部存款和储蓄器地址显然例外。2.trueSystem.out.println(str1.intern() == str2.intern;。String.intern(),比较的是常量池中的值。当常量池中空头支票“wwe”时,会在常量池中新建贰个常量。若存在,则间接重回该常量。源码介绍如下:

public class Solution { public boolean containsNearbyAlmostDuplicate(int[] nums, int k, int t) { if (k < 1 || t < 0) { return false; } Map<Long, Long> map = new HashMap<Long, Long>(); for (int i = 0; i < nums.length; i++) { long curr =  nums[i]; long bucket = (curr - Integer.MIN_VALUE) /  t + 1); if (map.containsKey { return true; } else if (map.containsKey(bucket - 1) && curr - map.get(bucket - 1) <= t) { return true; } else if (map.containsKey(bucket + 1) && map.get(bucket + 1) - curr <= t) { return true; } map.put(bucket, curr); if (i >= k) { map.remove nums[i - k] - Integer.MIN_VALUE) /  t + 1)); } } return false; }}

2.询问分页

至于查询分页,大致进程完全同样,只是第多少个参数(上边是loginUserId)需求承受客户输入的参数,那样的话大家供给在调控器中经受客户输入的那些参数(页面中的<input>使用GET方式传参),然后将其出席到SESSION中,就可以到位查询分页(此处由于“下一页”那中国足球组织一级联赛链接的来由,使用了分歧的JSP页面管理分页和寻觅分页,一时没找到在叁个JSP页面中做到的不二秘籍,出现了再也代码,这里的再次代码正是出口内容的这段代码,能够单独拿出去,然后用二个<include>标签加载到须求的JSP页面就能够了,那样能够避免代码重复):

此间给出调整器的代码作为参照他事他说加以考察:

/** * 通过 产品名称 查询产品 * @param request * @param model * @return */ @RequestMapping(value = "映射地址", method = RequestMethod.GET) public String searchForProducts(HttpServletRequest request, Model model) { HttpSession session = request.getSession(); String param = request.getParameter; String condition =  session.getAttribute("condition"); //先判断SESSION中的condition是否为空 if (condition == null) { condition = new String(); session.setAttribute("condition", condition); //如果Session中的condition为空,再判断传入的参数是否为空,如果为空就跳转到搜索结果页面 if (param == null || "".equals { return "private/space/ProductSearchResult"; } } //如果SESSION不为空,且传入的搜索条件param不为空,那么将param赋值给condition if (param != null && !("".equals { condition = param; session.setAttribute("condition", condition); } //使用session中的condition属性值来作为查询条件 this.productService.showSearchedProductsByPage(request, model, condition); return "跳转的页面"; }

常用的Spring MVC卓殊处理格局首要有二种:

此处开创了1或2 个指标。倘诺常量池不设有“11去去去”则需求创建二个指标。

再有种做法是用TreeSetMy code:

首先大家必要叁个分页的工具类:

声宾博个自定义的那些类

mg4155线路检测手机版,/*** Compares this object to the specified object. The result is* {@code true} if and only if the argument is not* {@code null} and is an {@code Integer} object that* contains the same {@code int} value as this object.** @param obj the object to compare with.* @return {@code true} if the objects are the same;* {@code false} otherwise.*/

完全的下结论:

mg4155线路检测手机版 10

 Integer a1 = 1; Integer a2 = new Integer; System.out.println(a1.equals; System.out.println(a1 instanceof Integer);}

以此思路相比较正规。

 1 public class NameException extends Exception { 2 3 public NameException() { 4 super(); 5 } 6 7 public NameException(String message) { 8 super; 9 }10 11 }

public boolean equals(Object obj) {``if (obj instanceof Integer) {``return value == obj).intValue();``}``return false;``}

My code:

 1 public class MyHandlerExceptionResolver implements HandlerExceptionResolver { 2 3 public ModelAndView resolveException(HttpServletRequest request, 4 HttpServletResponse response, Object handler, Exception ex) { 5 6 ModelAndView mv = new ModelAndView(); 7 mv.addObject; 8 mv.setViewName("/errors/error.jsp"); 9 10 if(ex instanceof NameException) {11 // 执行一些操作12 mv.setViewName("/errors/nameError.jsp");13 }14 15 return mv;16 }17 18 }

一道思量题 new String.equals 创制了几个指标

本文由mg4155com发布于mg4155线路检测手机版,转载请注明出处:JAVAWEB整个的文化类别,MVC核心技能

关键词:

上一篇:没有了

下一篇:没有了