惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
D
Darknet – Hacking Tools, Hacker News & Cyber Security
量子位
博客园 - 叶小钗
AI
AI
T
Tor Project blog
Forbes - Security
Forbes - Security
W
WeLiveSecurity
博客园_首页
爱范儿
爱范儿
J
Java Code Geeks
B
Blog
G
GRAHAM CLULEY
aimingoo的专栏
aimingoo的专栏
Cloudbric
Cloudbric
C
CXSECURITY Database RSS Feed - CXSecurity.com
TaoSecurity Blog
TaoSecurity Blog
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
有赞技术团队
有赞技术团队
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
Google DeepMind News
Google DeepMind News
H
Help Net Security
博客园 - 三生石上(FineUI控件)
C
Cisco Blogs
C
Cybersecurity and Infrastructure Security Agency CISA
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
P
Palo Alto Networks Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Recent Commits to openclaw:main
Recent Commits to openclaw:main
博客园 - 司徒正美
The Last Watchdog
The Last Watchdog
Blog — PlanetScale
Blog — PlanetScale
T
The Blog of Author Tim Ferriss
S
Secure Thoughts
Spread Privacy
Spread Privacy
F
Fortinet All Blogs
月光博客
月光博客
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
A
About on SuperTechFans
Security Latest
Security Latest
Webroot Blog
Webroot Blog
Scott Helme
Scott Helme
Hugging Face - Blog
Hugging Face - Blog

克洛洛日记

一年回本计划 | 克洛洛日记 股票期权的Theta | 克洛洛日记 股票期权的Gamma | 克洛洛日记 股票期权的Delta | 克洛洛日记 KDJ指标 | 克洛洛日记 布林线 | 克洛洛日记 MACD指标 | 克洛洛日记 RSI指标 | 克洛洛日记 时间协议 | 克洛洛日记 聊聊Spring的stereotype注解 | 克洛洛日记 免费申请 JetBrains 全产品 License | 克洛洛日记 Aloha 一个Hexo主题 | 克洛洛日记 泰国之旅 [三] | 克洛洛日记 泰国之旅 [二] | 克洛洛日记 泰国之旅 [一] | 克洛洛日记 Nginx使用SSL证书配置https | 克洛洛日记 i18next | 克洛洛日记 错误排查:非ROOT用户使用密钥进行ssh登录提示输入密码 | 克洛洛日记 使用Github、Travis-CI和Coding.net自动部署博客[三] | 克洛洛日记 使用EditorConfig | 克洛洛日记 JavaScript执行window.print()打印内容为空白 | 克洛洛日记 使用Github、Travis-CI和Coding.net自动部署博客[二] | 克洛洛日记 寓食记 | 克洛洛日记 使用Github、Travis-CI和Coding.net自动部署博客[一] | 克洛洛日记 书单 | 克洛洛日记 WebJars使用示例 | 克洛洛日记 WebJars介绍 | 克洛洛日记 Maven打jar包内容出错 | 克洛洛日记 数据分布式模型 | 克洛洛日记 Java运行时内存结构 | 克洛洛日记 前端优化法则 | 克洛洛日记
Wicket的HelloWorld | 克洛洛日记
海拉鲁球果 <hyrul · 2016-03-13 · via 克洛洛日记

· java / web / wicket

在公司用了4年的Wicket了,竟然发现没有写个HelloWorld。

Wicket,全称Apache Wicket, 它是个基于组件的Web应用框架,更多的解释看Wikipedia

官方网站:wicket.apache.org

很遗憾,由于Wicket在国内的普及程度不够,中文相关的文档很少,有的话也就是基于1.2版本的,官方最新的release版本已经是7.x,SNAPSHOT是8.x(Wicket的版本规则从1.5以后就为6.x,7.x,8.x,有点像Java的版本规则)。

这里的HelloWorld是结合Gradle,Jettty完成的,在Eclipse IDE上开发。

什么是Gradle?

Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化建构工具。它使用一种基于Groovy的特定领域语言来声明项目设置,而不是传统的XML。

其他的自动化构建工具还有Ant和Maven等。

它有丰富的插件机制。

Eclipse上Gradle的配置请先看http://www.cnphp6.com/archives/42868

什么是Jetty?

Jetty是一个纯粹的基于Java的网页服务器和Java Servlet容器。

其他的容器还有Tomcat,JBoss等。

这里使用Jetty是使用Gradle的Jetty插件。

下面开始HelloWorld。

创建Eclipse项目

以此选择File->Other,搜索 Gradle,选择 Gradle Project,输入Project name为 wicket-helloworld,Sample project选择 Java Quickstart,然后Finish。

调整项目文件结构

由于我们使用Java Quickstart的Sample project,会生成一些我们不需要的文件,所有我们需要调整文件结构(我这里都以cnhalo为包名前缀),调整后的结构为:

文件结构

加入Wicket依赖

我们向Gradle中加入Wicket依赖,在build.gradle中dependencies里加入:

compile ‘org.apache.wicket:wicket-core:7.2.0’

我写这遍文章的时候,使用最新的release版本7.2.0,更新的版本可在mvnrepository.com查看。

加入依赖后,在项目的右键,依次点击Gradle->Refresh All,让Gradle去下载依赖的包,等待下载完成后,项目的Gradle Dependencies为:

Gradle Dependencies

配置Jetty

在build.gradle最上面加入:

apply plugin: 'war'
apply plugin: 'jetty'

在Eclipse项目的的 src/main 下依次创建 webapp/WEB-INF/web.xml:

web.xml

web.xml的内容为:


<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

  <display-name>Wicket Hello World</display-name>
  <filter>
    <filter-name>App</filter-name>
    <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
    <init-param>
      <param-name>applicationClassName</param-name>
      <param-value>cnhalo.CHApp</param-value>
    </init-param>
    <init-param>
      <param-name>configuration</param-name>
      <param-value>DEPLOYMENT</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>App</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
  </filter-mapping>

</web-app>

注意,这里的 cnhalo.CHApp 这个类这里还未创建,org.apache.wicket.protocol.http.WicketFilter 这个过滤器是请求进入Web容器后再进入Wicket的入口。

创建Wicket相关代码

创建 cnhalo.CHApp 类,继承org.apache.wicket.protocol.http.WebApplication,全部代码为:


package cnhalo;

import org.apache.wicket.Page;
import org.apache.wicket.protocol.http.WebApplication;

/**
 *
 *
 * @author	HuangYijie
 * @date	Mar 13, 2016 9:49:43 PM
 * 
 */
public class CHApp extends WebApplication {

  @Override
  public Class<? extends Page> getHomePage() {
    return IndexPage.class;
  }

}

创建 cnhalo.IndexPage 类,继承 org.apache.wicket.markup.html.WebPage,全部代码为:


package cnhalo;

import org.apache.wicket.markup.html.WebPage;
import org.apache.wicket.markup.html.basic.Label;

/**
 *
 *
 * @author	HuangYijie
 * @date	Mar 13, 2016 9:51:10 PM
 * 
 */
public class IndexPage extends WebPage {

  private static final long serialVersionUID = -2856887644490684320L;
  
  public IndexPage() {
    add(new Label(“helloworld”, “Wicket Hello World”)); // 在IndexPage.html中对wicket:id=“helloworld”的组件进行匹配
  }
  
}

在 cnhalo.IndexPage 的同级目录中创建 IndexPage.html:

<!DOCTYPE html>
<html xmlns:wicket>
<head>
<meta charset=“UTF-8”>
<title>Wicket Hello World</title>
</head>
<body>

  <h1 wicket:id=“helloworld”></h1>

</body>
</html>

运行

在Eclipse项目右键,依次选择 Run As -> Run with Jetty,然后浏览器访问 localhost:8080,即可看到 Wicket Hello World

在Tomcat下运行

要在Tomcat下运行,只要打成war包就可以,依次在Eclipse项目右键执行 Gradle -> Task Quick Launcher,输入 war 后回车。Gradle将会打出 war 包,等 Eclipse 的 Console 显示:


[sts] -----------------------------------------------------
[sts] Starting Gradle build for the following tasks: 
[sts]      war
[sts] -----------------------------------------------------
:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:war UP-TO-DATE

BUILD SUCCESSFUL

Total time: 0.276 secs
[sts] -----------------------------------------------------
[sts] Build finished succesfully!
[sts] Time taken: 0 min, 0 sec
[sts] -----------------------------------------------------

刷新Eclipse项目的build,build/libs/wicket-helloworld-1.0.war 即可放入Tomcat的webapps下。


文章中使用软件的版本:

JDK: 1.8.0_45 Gradle: 2.0 Eclipse: Luna Release (4.4.0)

项目源码地址:https://github.com/henryhuang/WicketHelloWorld