IntelliJ IDEA 2016.1建立Strut2工程并使用Tomcat调试

IntelliJ IDEA 2016.1建立Strut2工程的步骤如下:

1.从菜单中选择新建工程:

NewProjectMenu

2.在弹出的窗口中,左侧的列表中,选择"Java",在右侧的"Project SDK"中指明需要的Java SDK的版本,目前要求是1.8版本的,在下面的"Additional Libraries and Frameworks"中找到"Struts 2",并选中,同时选中"Web Application"。

NewStucts2Project

3.点击下面的"Next"按钮。

JavaEnterpriseStruct2ProjectName

4.等待IntelliJ IDEA下载完成必须的插件。点击左侧的"Project"边栏,之后可以到如下界面.

JavaEnterpriseStruct2ProjectView

点击右侧的"Project Stucture"按钮,如下图:

ProjectStuctureButton

修复存在的问题:

ProjectStuctureWindow2

点击后出现的界面如下:

ProjectStuctureWindowStruts2Lib

在弹出的菜单中,选择"Put into /Web-INF/lib"。

ProjectStuctureWindowStruts2LibMenu

配置完成后的界面如下:

ProjectStuctureWindowStruts2LibComplete

点击"OK",关闭窗口。

5.编辑配置信息"Edit Configurations"

EditConfigurations

6.在弹出的界面中点开右侧的"+"符号,也可以点击左侧顶部的"+"号。

RunDebugConfigurations

7.在弹出的界面中,一直下拉,找到"Tomcat Server",点击展开,选择"Local"

RunDebugConfigurationsAddSettings

RunDebugConfigurationsAddSettings

8.下载并安装Tomcat 9

Windows下面,建议安装 "32-bit/64-bit Windows Service Installer"

Tomcat9DownloadPage

9.安装最新的 Java SE Development Kit
目前最新的版本是8u73。保证电脑上面是最新的,如果使用JDK 7的话,会由于Tomcat的版本号太高导致在调试的时候报告如下错误:

这个错误的原因是由于JDK 1.7是默认没有包含JMS服务的,导致Idea通过JMSTomcat通信的时候失败。

10.设置Tomcat Server

RunDebugConfigurationsTomcatServerLocalSettingsFirst

RunDebugConfigurationsTomcatServerLocalSettingsSecond

RunDebugConfigurationsTomcatServerLocalSettings

配置完成后的界面显示如下:

RunDebugConfigurationsTomcatServerLocalSettingsAfterConfigure

此时底部提示"Warning No artificts configured",点击底部的"Fix"按钮。

RunDebugConfigurationsTomcatServerLocalSettingsFixButtonClick

出现的窗口中自动帮我们加入了"Tools:war exploded"项目,点击下面的"Apply"按钮后,点击"OK"关闭设置页面。

RunDebugConfigurationsFix2

11.调试,点击主界面上面的调试图标,即可进入调试,此时会在默认的浏览器上打开网页。

RunDebugConfigurationsTomcatServerLocalSettingsDebug

最后,浏览器上出现如下画面,说明设置成功。

ideaStucts2Complete

12.创建一个简单的Stucts2MVC例子----TimeConvert

(1)先创建一个Model类来存放数据

首先,在src目录上鼠标右击,选择"New"-> "Java Class"并在对话框中输入名字"Tools.Model.TimeConvertStore",点击"OK"。

NewJavaMenu

NewJavaModel

里面的代码如下:

这个Model类的public setget方法允许访问private convertTime字符串属性,Struts 2框架需要将这个对象按照JavaBean方式暴露给View(TimeConvert.jsp)

(2)创建View页面来显示Model类里存储的convertTime .

web目录上鼠标右击,选择"New"-> "File"并在对话框中输入名字"TimeConvert.jsp",点击"OK"新建一个TimeConvert.jspjsp页面.

NewJSPMenu

NewJSPWindow

代码如下:

页面中的taglib告诉Servlet容器这个页面将使用Struts 2tags并且将它们用s来表示。
s:propertytag标签返回调用TimeConvertAction controller classgetTimeConvertStore方法后的值。这个方法返回一个TimeConvertStore对象。在TimeConvertStore加上了.convertTime后,就可以告诉Struts 2框架将调用TimeConvertStoregetConvertTime方法。TimeConvertStoregetConvertTime方法返回一个字符串,然后这个字符串将被s:property标签显示。

(3)创建一个ActionTimeConvertAction.java作为Controller.
src目录上鼠标右击,选择"New"->"Java Class"并在对话框中输入名字"Tools.Controller.TimeConvertAction",点击"OK".

NewJavaMenu

NewJSPActionWindow

代码如下:

(4)增加struts配置到struts.xml文件中
建立映射关系,将TimeConvertAction类(Controller)和TimeConvert.jsp(View)映射在一起。映射后,Struts 2框架就能够知道哪个类将响应用户的actionthe URL),这个类的哪个方法将被调用,哪个View能够得到这个方法的返回String结果。

(5)在index.jsp中增加链接

首先在jsp页面顶部增加taglib说明

然后在body标签后增加p标签

修改后的代码如下:

点击调试后,运行效果如下图:

TimeConvertIndex

点击超链接后显示如下:

TimeConvertAction

13.增加多语言支持i18n

需要注意的是,对于index.jsp中读取全局配置文件,需要先增加Spring框架,否则是无法通过在struts.xml中增加

来实现的。如下图所示:

struts.custom.i18n.resources

在跟"TimeConvertAction.java"相同的目录下面建立英文语言文件TimeConvertAction_en.properties,中文语言文件TimeConvertAction_zh.properties,注意,中文只能是Unicode编码的格式,否则会出现乱码。格式类似\u65f6\u95f4\u8f6c\u6362这样的格式。
Struts2i18n
其中TimeConvertAction_en.properties中的内容如下:

TimeConvertAction_cn.properties中的内容如下:

然后修改TimeConvert.jsp,在Title中引用我们定义的语言。修改

为:

修改后的TimeConvert.jsp文件如下:

点击调试后,打开的页面中,会看到网页的Title变成了中文的"时间转换"。

14.Strut2增加对Json的支持

默认情况下Struts2不支持直接返回JSON,比较方便的方式是使用struts2-json-plugin来支持。

(1)增加spring框架,由于struts2-json-plugin需要调用spring框架,因此需要增加spring框架。右击工程,选择"Add Framework Support..."。

AddFrameworkSupport

在弹出的窗口中,选择"Spring","Spring MVC"两项,同时在点击"Spring"的时候,勾选"Create emtpy spring-config.xml"。

SpringSelectOptions

然后点击"OK",等待需要的Jar包下载完成。成功下载完成后,可以在lib目录下看到非常多的Jar文件被添加进来了。在web目录下的WEB-INF目录下多出来了applicationContext.xml,dispatcher-servlet.xml这两个文件。SpringFrameworkAddComplete

SpringFrameworkAddCompleteWebInf

完成后点击界面上侧的"Project Structure"图标,解决提示的Jar包导出问题。

SpringFrameworkProjectStructure

SpringFrameworkFix

都选择第一项"Add 'xxxxxxxxxxx' to the artifact".

SpringFrameworkFixMenu

(2)确认项目使用的Struts2的版本。点击界面上侧的"Project Structure"图标

SpringFrameworkProjectStructure

StrutsVersion2-2.3.20.1

从上图可以看到我们的Struts2的版本是2.3.20.1

(3)手工去下载struts2-json-plugin插件,选择与我们的Struts2的版本相同的版本的插件。之所以需要手工下载而不是要求IntelliJ IDEA Maven中自动下载原因在于,由于我们建立项目的时候没有使用Maven,因此我们项目Lib目录下的Struts2Jar包是没有带版本号的。而如果要求Maven自动下载的话,会由于找不到带版本号的Struts2Jar包,而自动引入一堆的带版本号的Struts2Jar包。导致Struts2Jar包出现两份,一份是有版本号的,一份是我们现在的样子。导致无法编译通过,因此还是手工引入即可。

由于我们的Struts2的版本是2.3.20.1,因此,我们下载2.3.20.1版本的struts2-json-plugin.Struts2JSONPlugin

下载完成后放到项目的lib目录下,然后右击struts2-json-plugin-2.3.20.1.jar,选择"Add As Library".

AddasLibrary

AddasLibraryWindow

点击OK后关闭。

继续点击界面右上侧的"Project Structure"图标

SpringFrameworkProjectStructure

AddStruts2-json-plugin-2.3.20.1totheartifact

修改src目录下的struts.xml。调整部分如下图所示。

ActionJsonResp

action的返回类型为json时的可配置参数详解:

15.参考链接


Windows 10 回收站中文件无法删除的解决

Windows 10系统回收站的某些文件无法删除,选择清空回收站的时候,虽然能听到清空的声音,但所有的文件都还在,回收站已经有几个G的文件无法清空,这样很浪费磁盘的空间,可以用下面的办法来处理。

1.选择显示隐藏目录
Windows10Setting

2.在查看中显示受系统保护的操作系统文件

Windows10Setting2

3.在显示出来的隐藏目录中找到回收站的目录"$Recycle.Bin"

Windows10Setting3

4.双击目录找到“回收站”目录,并且点击进入
Windows10Setting4

5.点击输入栏,显示当前目录的完整的路径
Windows10Setting5

6.复制显示出来的路径

Window10Setting6

7.在左下角的搜索输入框中输入"CMD",点击显示出来的"命令提示符",右击选择"以管理员身份运行"

Windows10Setting7

8.在打开的命令行中,切换到刚刚复制的目录中,执行"del * ",执行删除操作。

Windows10Setting8

Android Studio 2.1 Preview: ':app:transformClassesWithInstantRunForDebug' FAILED

升级到Android Studio 2.1 Preview版本后,编译的时候,报告如下错误:

解决方法为:

禁用“Instant Run option in Android Studio 2.0 Preview”

nDO8x

参考链接:


Android Studio 2.0 Preview: ':app:transformClassesWithInstantRunForDebug' FAILED

Android Studio 多Library单元测试(testCompile project(":A"))提示找不到依赖库中定义的类

工程布局


工程 network-api
-> src/main/java
-> src/test/java
工程 network-biz
-> src/main/java (依赖工程 network-api的 src/main/java 下的文件)
-> src/test/java (依赖工程 network-api的 src/main/java 下的文件)

 

当编写network-biz的测试用例的时候,在build.gradle中增加

此时会发现network-biz编写的测试用例是无法编译通过的,提示找不到类定义。

这个问题是由于Android Studio没有正确的处理testCompile project导致的,这个BUG在Android Studio 2.0.0 Beta7版本中才获得修复,目前使用Canary Channel升级到最新的Android Studio 2.1 Preview 1版本以后是可以修正这个问题的。

参考链接:


Gradle (Android) - Multiproject dependency missing in testCompile
issue 200952: Library modules not added to classpath for testsz

Android Studio 1.5 集成的Android Monitor 中Logcat日志丢失

Android Studio 1.5 中使用集成的Android Monitor中的Logcat查看设备返回的日志,如果日志打印稍微密集一点,就会出现中间的部分信息丢失的问题,当使用独立版本的Android Device Monitor查看日志的时候,日志是完整的。
这个问题的根源是由于Android Studio 1.5 中使用集成的Android Monitor存在BUG导致的,目前已知的解决方法是升级到Android Studio 2.0 Beta 版本,目前看到这个问题已经被修复。

大批WordPress网站被渗透 ,成为DDOS攻击源

1456369411312.jpg!small

近日,Sucuri的安全研究人员发现,数万WordPress站点被利用于实施第7层DDos攻击。共有两万六千个不同的WordPress站点持续向同一个网站以每秒一万到一万一千次的频率发送HTTPS请求,最多时能达到两万次每秒。更严重是,如果Pingback功能默认开启,全球任何一个WordPress站点都可能被利用,成为DDos攻击网络的一个源头。

HTTP Flood是针对Web服务在第七层协议发起的大规模流量攻击,不仅可以直接导致被攻击的Web前端响应缓慢,还间接攻击到后端的Java等业务层逻辑以及更后端的数据库服务,增大它们的压力,甚至对日志存储服务器都带来影响。

建议所有基于Wordpress的网站尽快禁用Pingback。虽然无法保证网站免于遭受攻击,但会终止黑客利用您的网站来攻击其它目标。

最好的做法是,如果你确定不用pingbacks,就和xmlrpc一并关闭。如果需要使用,可以简单修改.htaccess文件,只允许白名单中的IP来存取文件。流行插件Jetpack也可用于流量监控。

14562244766558.png!small

WordPress的pingback服务可被DDoS攻击利用,这个漏洞早有披露,但至今仍有大量网站存在此问题,原因在于网站所有者很少刻意防止网站被僵尸网络捕获。而由于这种DDoS攻击中流量来自数千个不同IP,基于网络的防火墙也无法识别和拦截,只能限制每个IP地址的访问频率。

1456224508906.png!small

研究人员还发现,大多数实施攻击的源网站托管在知名VPS/云服务提供商:亚马逊的AWS、Digital Ocean、谷歌云、微软的Azure、HETZNER、OVH和Linode。

原文地址:Thousands of WordPress websites used as a platform to launch DDOS

"method driver /usr/lib/apt/methods/https could not be found" update error

在配置了/etc/apt/sources.list中使用了https之后,出现如下错误

如果是中文系统的话,会输出如下信息:

解决的方法是安装apt-transport-https:

如果此时执行

更新会提示:

则执行如下命令来更新本地的证书:

然后就一切正常了。

参考链接