欢迎来看我的网络日志,交流请加我好友: 919201148。欢迎关注公众号或视频号:蜗牛互联网
Solo  当前访客:3 开始使用

蜗牛学编程

微信搜索「蜗牛互联网」,回复 1024 有惊喜!!! 程序员 | 互联网 | 科技 | Java | 架构 | 职场进阶 | 财富进阶

struts2中动态方法调用和使用通配符定义action

2016-04-07 00:31:11 huayonglun
0  评论    212  浏览

动态方法调用 如果Action中存在多个方法时,我们可以使用!+方法名调用指定方法。 public class HelloWorldAction{ private String message; .... public String execute() throws Exception{ this.message = "我的第一个struts2应用"; return "success"; } public String other() throws Exception{ this.message = "第二个方法"; return "success"; } } 假设访问上面action的URL路径为: /struts/test/helloworld.action要访问action的other() 方法,我们可以这样调用: /struts/test/helloworld!other.action 通常不建议使用动态方法调用,我们可以通过常量关闭动态方法调用。 <constant name="struts.enable.DynamicMethodInvocation" v....

, ,

struts2中为应用指定多个struts配置文件

2016-04-07 00:09:50 huayonglun
0  评论    210  浏览

概述 随着应用规模的增加,系统中Action的数量也会大量增加,导致struts.xml配置文件变得非常臃肿 为了避免struts.xml文件过于庞大、臃肿,提高Struts.xml文件的可读性,我们可以将一个struts.xml配置文件分解成多个配置文件 然后再struts.xml文件中包含其他配置文件 操作 通过<include>元素指定多个配置文件 <struts> <include file="department.xml"/> 一个模块使用一个配置文件 <include file="employee.xml"/> </struts> 通过这种方式,可以将struts2的Action按模块添加到多个配置文件中 欢迎关注微信公众号,技术,思维,心理,带给你认知的全方位成长。 你的关注,就是对我最大的肯定,我会努力产出的,我们一起成长~ 本文由 永伦的小屋 原创。 转载请注明作者及出处,本文作者为 永伦的小屋。

,

每K个结点反转单链表

2016-04-06 23:42:47 huayonglun
0  评论    213  浏览

题目描述 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。 例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4; 如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。 思路 通过链表长度和K值确定需要反转的结点数 每K个反转成新链表,把头保存到List中 需要反转的结点数已到并且剩下的结点数不足K个,不反转,即把当前结点存到List中 把List中各个链表连接 代码 package com.liuyong666.pat; import java.util.ArrayList; import java.util.List; public class Main { static class ListNode{ int val; ListNode next = null; public ListNode(int val){ this.val = val; } } public static ListNode reversePartNode(ListNode head, int k){ if(head == null ....

, ,

科学计数法

2016-04-06 00:08:49 huayonglun
0  评论    207  浏览

题目描述 科学计数法是科学家用来表示很大或很小的数字的一种方便的方法 其满足正则表达式[+-][1-9]“.”[0-9]+E[+-][0-9]+ 即数字的整数部分只有1位,小数部分至少有1位,该数字及其指数部分的正负号即使对正数也必定明确给出 现以科学计数法的格式给出实数A,请编写程序按普通数字表示法输出A,并保证所有有效位都被保留 输入描述: 每个输入包含1个测试用例,即一个以科学计数法表示的实数A。 该数字的存储长度不超过9999字节,且其指数的绝对值不超过9999。 输出描述: 对每个测试用例,在一行中按普通数字表示法输出A,并保证所有有效位都被保留,包括末尾的0。 样例 输入样例1: +1.23400E-03 输出样例1: 0.00123400 输入样例2: 1.2E+10 输出样例2: 12000000000 思路 使用字符串来表示数值; 负指数往前移动小数点,补0; 正指数往后移动小数点,需要时补0或去掉小数点; 表示数值时正号不显示,负号显示; 代码 package com.liuyong666.pat; import java.util.Scanne....

,

struts2中struts2的处理流程和对Action的管理方式

2016-04-05 03:27:19 huayonglun
0  评论    216  浏览

处理流程图 web.xml配置文件的常用代码 <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> StrutsPrepareAndExecuteFilter Struts2核心控制器,它只负责拦截由/*指定的所有用户的请求 当用户请求到达时,系统会根据web.xml中配置Filter过滤用户的请求 默认情况下,如果用户的访问路径不带有后缀或者是以.action的后缀作为结尾,这时候请求会转发给....

, ,

struts2中指定struts2处理的请求后缀

2016-04-05 01:49:58 huayonglun
0  评论    214  浏览

概述 默认情况下我们都是使用.action后缀访问Action。 其实默认后缀是可以通过常量”struts.action.extension“进行修改的。 我们可以配置Struts 2只处理以.do为后缀的请求路径 <struts> <constant name="struts.action.extension" value="do"/> </struts> 如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开。如: <constant name="struts.action.extension" value="do,go"/> 一些常用的常量 <!-- 指定默认编码集,作用于HttpServletRequest的setCharacterEncoding方法 和freemarker 、velocity的输出 --> <constant name="struts.i18n.encoding" value="UTF-8"/> <!-- 该属性指定需要Struts 2处理的请求后缀,该属性的默....

, ,

struts2中为Action属性注入值

2016-04-05 01:28:24 huayonglun
0  评论    211  浏览

概述 struts2为Action中的属性提供了依赖注入功能 在struts2的配置文件中,我们可以很方便地为Action中的属性注入值。注意:属性必须提供get,set方法。 配置 <action name="helloworld" class="com.liuyong666.action.HelloWorldAction"> <param name="savePath">/resource</param> <result name="success">/WEB-INF/page/hello.jsp</result> </action> 对应类中的变化 public class HelloWorldAction{ private String savePath; public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } ........

, ,

剑指Offer之二十四--二叉搜索树的后序遍历序列

2016-04-05 01:11:13 huayonglun
0  评论    220  浏览

题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。 如果是则返回ture,否则返回false。 假设输入的数组的任意两个数字都互不相同。 解析 找到根结点 从头遍历序列,第一个比根结点大的元素为右子树的起点 判断右子树是否都比根结点大,若不是返回false,若是,进行下一步 分别把左子树和右子树都以上面规则进行判断,若左右子树都能返回true,则整个序列为二叉搜索树的后序遍历序列,返回true 代码实现 public boolean verifySquenceOfBST(int [] sequence) { if(sequence == null || sequence.length == 0){ return false; } int len = sequence.length; int root = sequence[len - 1]; int i = 0; for(; i < len - 1; i++){ if(sequence[i] > root){ break; } } int j = i; for(;j < len - 1;....

, , ,

剑指Offer之二十三--从上往下打印二叉树

2016-04-04 23:43:15 huayonglun
0  评论    214  浏览

二叉树结构 class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 解析 考察层序遍历 每一次打印一个结点的时候,如果该结点有子节点,则把该结点的子节点放到一个队列的末尾。 接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。 代码实现 public ArrayList<Integer> printFromTopToBottom(TreeNode root) { ArrayList<Integer> list = new ArrayList<Integer>(); if(root==null){ return list; } Queue<TreeNode> queue = new LinkedList<TreeNode>....

, , ,

剑指Offer之二十二--栈的压入、弹出序列

2016-04-01 17:31:18 huayonglun
0  评论    206  浏览

题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。 假设压入栈的所有数字均不相等。 例如序列12345是某栈的压栈序列,序列45321是该压栈序列对应的一个弹出序列,但43512就不可能是该压栈序列的弹出序列。 解析 栈的特点是FIFO 压入序列是确定的,则压入序列之间的元素可能会经历压入后马上被弹出的情况 具体思路为: 根据弹出序列的第一个值,判断在该元素之前被压入栈的所有元素. 栈顶元素与弹出序列第一个值进行比较,等则判断弹出序列的下一个元素,判断依据同步骤1。 如果所有的元素都被压入栈中,但是两者仍然不相等,说明弹出序列不可能是原序列的弹出序列。 这样一直判断直到弹出序列的最后一个元素。 代码实现 public boolean IsPopOrder(int [] pushA,int [] popA) { boolean possible = false; //存放压入栈中的元素 ArrayList<Integer> data = new ArrayList<Integer>(); if(pushA.l....

,

struts2中Result配置的各种视图转发类型

2016-03-31 20:13:55 huayonglun
0  评论    213  浏览

概述 <action name="helloworld" class="com.liuyong666.action.HelloWorldAction"> <result name="success">/WEB-INF/page/hello.jsp</result> </action> result配置类似于struts1中的forward,但struts2中提供了多种结果类型,常用的类型有: dispatcher(默认值)、 redirect(重定向) 、 redirectAction 、 plainText 通过type属性值指定。 结果类型 redirect 在result中还可以使用${属性名}表达式访问action中的属性,表达式里的属性名对应action中的属性。如下: <result type="redirect">/view.jsp?id=${id}</result> redirectAction 如果重定向的action在同一个包下: <result type="redirec....

, , ,

struts2中Action配置的各项默认值

2016-03-31 19:57:01 huayonglun
0  评论    216  浏览

Action中的各项默认值 Action各项配置 <action name="helloworld" class="com.liuyong666.action.HelloWorldAction" method="execute" > <result name="success">/WEB-INF/page/hello.jsp</result> </action> Action默认配置 <action name="helloworld"> <result>/WEB-INF/page/hello.jsp</result> </action> 默认值 如果没有为action指定class,默认是ActionSupport。 如果没有为action指定method,默认执行action中的execute() 方法。 如果没有指定result的name属性,默认值为success。 欢迎关注微信公众号,技术,思维,心理,带给你认知的全方位成长。 你的关注,就是对我最大的肯定,我....

, ,

struts2中Action名称的搜索顺序

2016-03-31 19:34:46 huayonglun
0  评论    212  浏览

搜索顺序 1.获得请求路径的URI,例如URL为:http://localhost:8080/struts2/path1/path2/path3/student.action 2.首先寻找namespace为/path1/path2/path3的package, 如果不存在这个包,则执行步骤3; 如果存在这个package,则在这个package中寻找名字为student的action, 当在该package下寻找不到action时就会直接跑到默认namespace的package中寻找action (默认的命名空间为空字符串""), 如果在默认namespace的package中还找不到该action,页面会提示找不action。 3.寻找namespace为/path1/path2的package, 如果不存在这个package,则执行步骤4; 如果存在执行步骤2中的代码块中内容。 4.寻找namespace为/path1的package, 如果不存在这个package,则执行步骤5; 如果存在执行步骤2中的代码块中内容。 5.寻找namespace为/的package, ....

, ,

数字黑洞

2016-03-30 22:57:36 huayonglun
0  评论    204  浏览

题目描述 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序 然后用第1个数字减第2个数字,将得到一个新的数字。 一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。 输入描述 输入给出一个(0, 10000)区间内的正整数N。 输出描述: 如果N的4位数字全相等,则在一行内输出“N - N = 0000” 否则将计算的每一步在一行内输出,直到6174作为差出现 注意每个数字按4位数格式输出。 代码实现 package com.liuyong666.pat; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); while(true){ int[] arr = new int[4]; arr[0] = n....

, , ,

struts2介绍

2016-03-30 04:17:12 huayonglun
0  评论    220  浏览

struts2优点 与Servlet API 耦合性低。无侵入式设计 提供了拦截器,利用拦截器可以进行AOP编程,实现如权限拦截等功能 支持多种表现层技术,如:JSP、freeMarker、velocity等 输入校验可以对指定方法进行校验,解决了struts1长久之痛 提供了全局范围、包范围和Action范围的国际化资源文件管理实现 搭建struts2开发环境 1. 导包 struts2-core-2.x.x.jar:核心类库 xwork-2.x.x.jar:XWork类库,struts2在其上构建 ognl-2.6.x.jar:对象图导航语言,struts2通过其读写对象属性 freemarker-2.3.x.jar:struts2的UI标签的模板使用FreeMarker编写 commons-logging-1.1.x.jar:ASF出品的日志包,struts2使用这个日志包来支持log4j和jdk1.4+的日志目录 commons-fileupload-1.2.1.jar:文件上传组件,2.1.6后必须加入此文件 2. 配置web.xml文件 <filter>....

,

Java线程池的分析与使用

2016-03-28 00:26:08 huayonglun
0  评论    212  浏览

为什么需要使用线程池 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗 提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程次可以进行统一的分配,调优和监控。 线程池的创建 我们可以通过ThreadPoolExecutor来创建一个线程池。 new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime, milliseconds,runnableTaskQueue, handler); 需要的几个参数: corePoolSize(线程池的基本大小): 当提交一个任务到线程池时,线程池会创建一个线程来执行任务, 即使其他空闲的基本线程能够执行新任务也会创建线程, 等到需要执行的任务数大于线程池基本大小时就不再创建。 如果调用了线程池的prestartAllCoreThreads方法,线程池会提前创建并启动所有基本线程。 runnableTaskQueue(任务队列:用....

, , ,

剑指Offer之二十--顺时针打印矩阵

2016-03-27 22:13:41 huayonglun
0  评论    219  浏览

题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字 例如,如果输入如下矩阵: 1  2  3  4 5  6  7  8 9  10 11  12 13  14  15  16 则依次打印出数字 1,2,3,4, 8,12,16, 15,14,13, 9,5, 6,7, 11, 10 解析 因为每打印一圈都会改变起始坐标,所以需要先确定矩阵大小与起始坐标的关系 比如4阶矩阵,第一圈起始坐标为(0,0),第二圈起始坐标为(1,1),打印两圈之后就结束了 比如一个5阶矩阵,前两圈同4阶,第三圈为(2,2),而且只打印了一个数。 会发现,只要起始坐标的两倍小于阶数,就会一直转圈打印 所以停止转圈打印的条件就是起始坐标的2倍大于或者等于阶数 然后考虑每一圈的打印方法 第一步:从左到右打印一行 第二步:从上到下打印一列(需满足终止行号大于起始行号) 第三步:从右到左打印一列(需满足终止行号大于起始行号的同时,终止列号大于起始列号) 第四步:从下到上打印一列(需满足终止行号比起始行号大2,终止列号大于起始列号) 注意:打印矩阵最里面一圈可能只需要三步、两步、甚至一步 代....

, ,

剑指Offer之二十一--包含min函数的栈

2016-03-27 22:13:41 huayonglun
0  评论    214  浏览

题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数。 解析 在数据栈的基础上维护一个用来存放最小值的辅助栈 每次入栈,新入栈的元素都要和辅助栈栈顶元素比较,如果新入栈的元素更小,就让它也加入最小栈中,否则最小栈再次压入其栈顶元素 每次出栈,数据栈和辅助栈同时弹出元素 这样就可以保证在任何情况下,辅助栈栈顶元素始终是数据栈中的最小元素 代码实现 public class MinFunctionStack{ Stack<Integer> data = new Stack<Integer>(); Stack<Integer> assist = new Stack<Integer>(); public void push(int node) { data.push(node); if(assist.size() == 0 || node < assist.peek()){ assist.push(node); }else{ assist.push(assist.peek()); } } public vo....

, ,

剑指Offer之十九--二叉树的镜像

2016-03-27 20:13:41 huayonglun
0  评论    217  浏览

二叉树结构 class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } 题目描述 请完成一个函数,输入一个二叉树,输出它的镜像 二叉树镜像定义 源二叉树 镜像二叉树 解析 先序遍历给定树的每个结点 若遍历到的结点有子节点,就交换它的两个子结点 当交换完所有非叶子结点的左右子节点之后,就得到了树的镜像 递归实现 public void mirror(TreeNode root) { if(root == null || (root.left == null && root.right == null)){ return ; } TreeNode temp = root.left; root.left = root.right; root.right = temp; if(root.left != null){ mirror(root.left); } if(root.right....

, , ,

剑指Offer之十八--树的子结构

2016-03-27 17:18:30 huayonglun
0  评论    212  浏览

二叉树结构 class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } 题目描述 输入两颗二叉树A,B,判断B是不是A的子结构 解析 二叉树遍历算法的应用 原二叉树是否具有某棵子树,只需要判断每个结点是否都在二叉树中出现即可 第一步在树A中找到和B的根结点的值一样的结点R 第二步再判断树A中以R为根结点的子树是不是包含和树B一样的结构 递归实现 //判断根结点为root1的树是否包含root2结构 public boolean hasSubtree(TreeNode root1,TreeNode root2) { //初始化标记变量为false boolean hasSubtreeFlag = false; //先判断根结点,若不包含判断左孩子,其次是右孩子 if(root1 != null && root2 != null){ if(root1.val == root2.val....

, , ,
TOP