今天接到任务,需要对一个web项目进行结构整改,该项目运行再tomcat中,启动的时候,一个报端口被占用 运行命令查看1099端口,发现没有程序再使用这个端口 netstat -ano | findstr 1099 最后发现是因为自己装了一个docker,启用了hype-v占用了端口 netsh interface ipv4 show excludedportrange protocol=tcp 此时更换一个没有被占用的端口、或者关闭hype-v、或者让hype-v不占用这个端口都是可行的。 可以使用下面的命令开放该端口: netsh int ipv4 add excludedportrange protocol=tcp startport=8080 numberofports=1 参考:https://github.com/docker/for-win/issues/3171 有更新! hype-v占用端口,导致idea无法运行tomcat应用 程序人生
1、错误信息 2、问题跟踪及处理 可以看到,这个方法传递了一个Class对象和类加载器和一个字段给clearMap方法 进入clearMap方法,方法根据class对象获取属性,此时报出了属性找不到的错误 打开tomcat的源码查看这个被反射的类org.apache.catalina.loader.WebappClassLoader(tomcat源码地址) 在这个类中发现,他继承了org.apache.catalina.loader.WebappClassLoaderBase,自己本身没有定义属性 进入WebappClassLoaderBase类中,可以找到resourceEntries字段 查看WebappClassLoaderBase的注释信息发现从7.0.64往后的版本,添加了WebappClassLoaderBase用来作为类加载器 此时有两个解决方案,一是对structs版本升级,但是这样的话,对应的其他依赖版本也要升级,代价太大,第二个方法较为简单,直接更换tomcat版本使其版本号<7.0.64即可,我换了7.0.63就正常了 有更新! struct2在tomcat运行报错--java.lang.NoSuchFieldException resourceEntries 程序人生
1、web.xml中指定位置 此处,我只修改了struts.xml文件的位置,structs默认是从WEB-INF的classes目录下加载配置文件的,对应打包后的路径,自己根据需求修改即可 <!-- struts配置 --> <filter> <filter-name>struts</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> <init-param> <param-name>config</param-name> <param-value>struts-default.xml,struts-plugin.xml,struts/struts.xml</param-value> </init-param> </filter> <filter-map.... 有更新! struts修改配置文件位置 程序人生
action配置多个路径 配置xml <package name="helloAction" extends="struts-default,json-default" namespace="/myHello" > <action name="helloWorld" class="helloAction"> <result name="helloPage">/WEB-INF/hello.jsp</result> <result name="sayHello" type="json"> <param name="root">user</param> </result> </action> </package> 在action中定义多个result,如上,第一个路径返回的是页面,第二个路径返回了一个json数据 action配置 action中也要配置对应的方法 import cn.com.wyl.examples.struts.entity.User; import .... 有更新! struts一个action对应多个路径和json数据支持 程序人生
引入maven依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>examples</artifactId> <groupId>cn.com.wyl</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>struts.... 有更新! spring整合struts 程序人生
volatile允许线程访问这个共享变量,一个字段被声明为volatile,则java内存模型确保所有线程看到这个变量的值是一致的。 有volatile变量修饰的共享变量进行写操作的时候会触发以下两件事: 1.将当前缓存行的数据写回到系统内存; 2.这个写回内存的操作,使其他处理器缓存的该数据的内存地址失效。 如果对声明了volatile的变量进行写操作,JVM会将这个变量所在缓存行的数据写回到系统内存,之后其他处理器通过嗅探在缓存总线上传播的数据看自己缓存的数据是否过期,当处理器发现缓存行对应的数据被修改,就会将这个数据所在的缓存行设置为无效状态,当处理器对这个缓存行重新进行操作时,会重新从系统内存读取该数据到缓存行。 有更新! 了解下volatile 程序人生