vaadin_嵌入式码头,Vaadin和焊接

vaadin

当我开发Web应用程序时,我希望能够从Eclipse快速启动它们,而不必依赖各种重量级的tomcat或glassfish插件。 因此,我经常要做的就是创建一个可以直接从Eclipse直接运行的基于Java的简单Jetty启动器。 该启动器会在几秒钟内启动,因此使开发工作更加愉快。

但是,有时正确设置所有内容会有些困难。 因此,在本文中,我将向您快速概述如何将Jetty与Weld for CDI和Vaadin一起设置为Web框架。

为了正确设置所有内容,我们需要执行以下步骤:

  1. 为所需的依赖项设置Maven Pom
  2. 创建一个基于Java的Jetty启动器
  3. 设置web.xml
  4. 添加焊接占位符

为所需的依赖项设置Maven Pom

我使用以下pom.xml文件。 如果您不使用自定义组件,则可能不需要所有东西。 但是它应该作为其中应该包含的内容的良好参考。

<?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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion><groupId>group.id</groupId><artifactId>artifact.id</artifactId><packaging>war</packaging><version>1.0</version><name>Vaadin Web Application</name><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><vaadin.version>6.7.1</vaadin.version><gwt.version>2.3.0</gwt.version><gwt.plugin.version>2.2.0</gwt.plugin.version></properties><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>1.5</source><target>1.5</target></configuration></plugin><plugin><groupId>org.codehaus.mojo</groupId><artifactId>gwt-maven-plugin</artifactId><version>${gwt.plugin.version}</version><configuration><webappDirectory>${project.build.directory}/${project.build.finalName}/VAADIN/widgetsets</webappDirectory><extraJvmArgs>-Xmx512M -Xss1024k</extraJvmArgs><runTarget>cvgenerator-web</runTarget><hostedWebapp>${project.build.directory}/${project.build.finalName}</hostedWebapp><noServer>true</noServer><port>8080</port><compileReport>false</compileReport></configuration><executions><execution><goals><goal>resources</goal><goal>compile</goal></goals></execution></executions><dependencies><dependency><groupId>com.google.gwt</groupId><artifactId>gwt-dev</artifactId><version>${gwt.version}</version></dependency><dependency><groupId>com.google.gwt</groupId><artifactId>gwt-user</artifactId><version>${gwt.version}</version></dependency></dependencies></plugin><plugin><groupId>com.vaadin</groupId><artifactId>vaadin-maven-plugin</artifactId><version>1.0.2</version><executions><execution><configuration></configuration><goals><goal>update-widgetset</goal></goals></execution></executions></plugin></plugins></build><!-- extra repositories for Vaadin extensions --><repositories><repository><id>vaadin-snapshots</id><url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url><releases><enabled>false</enabled></releases><snapshots><enabled>true</enabled></snapshots></repository><repository><id>vaadin-addons</id><url>http://maven.vaadin.com/vaadin-addons</url></repository></repositories><!-- repositories for the plugins --><pluginRepositories><pluginRepository><id>codehaus-snapshots</id><url>http://nexus.codehaus.org/snapshots</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases></pluginRepository><pluginRepository><id>vaadin-snapshots</id><url>http://oss.sonatype.org/content/repositories/vaadin-snapshots/</url><snapshots><enabled>true</enabled></snapshots><releases><enabled>false</enabled></releases></pluginRepository></pluginRepositories><!-- minimal set of dependencies --><dependencies><dependency><groupId>com.vaadin</groupId><artifactId>vaadin</artifactId><version>${vaadin.version}</version></dependency><dependency><groupId>org.vaadin.addons</groupId><artifactId>stepper</artifactId><version>1.1.0</version></dependency><!-- the jetty version we'll use --><dependency><groupId>org.eclipse.jetty.aggregate</groupId><artifactId>jetty-all-server</artifactId><version>8.0.4.v20111024</version><type>jar</type><scope>compile</scope><exclusions><exclusion><artifactId>mail</artifactId><groupId>javax.mail</groupId></exclusion></exclusions></dependency><!-- vaadin custom field addon --><dependency><groupId>org.vaadin.addons</groupId><artifactId>customfield</artifactId><version>0.9.3</version></dependency><!-- with cdi utils plugin you can use Weld --><dependency><groupId>org.vaadin.addons</groupId><artifactId>cdi-utils</artifactId><version>0.8.6</version></dependency><!-- we'll use this version of Weld --><dependency><groupId>org.jboss.weld.servlet</groupId><artifactId>weld-servlet</artifactId><version>1.1.5.Final</version><type>jar</type><scope>compile</scope></dependency><!-- normally following are provided, but not if you run within jetty --><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version><type>jar</type><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version><type>jar</type><scope>provided</scope></dependency><dependency><artifactId>el-api</artifactId><groupId>javax.el</groupId><version>2.2</version><scope>provided</scope></dependency></dependencies></project>

创建Java启动器

有了这个pom,我们就有了一起运行Jetty,Vaadin和Weld所需的所有依赖项。 让我们看一下Jetty Launcher。

import javax.naming.InitialContext;
import javax.naming.Reference;import org.eclipse.jetty.plus.jndi.Resource;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;/*** Simple jetty launcher, which launches the webapplication from the local* resources and reuses the projects classpath.* * @author jos*/
public class Launcher {/** run under root context */private static String contextPath = "/";/** location where resources should be provided from for VAADIN resources */private static String resourceBase = "src/main/webapp";/** port to listen on */private static int httpPort = 8081;private static String[] __dftConfigurationClasses ={"org.eclipse.jetty.webapp.WebInfConfiguration","org.eclipse.jetty.webapp.WebXmlConfiguration","org.eclipse.jetty.webapp.MetaInfConfiguration", "org.eclipse.jetty.webapp.FragmentConfiguration",        "org.eclipse.jetty.plus.webapp.EnvConfiguration","org.eclipse.jetty.webapp.JettyWebXmlConfiguration"} ;/*** Start the server, and keep waiting.*/public static void main(String[] args) throws Exception {System.setProperty("java.naming.factory.url","org.eclipse.jetty.jndi");System.setProperty("java.naming.factory.initial","org.eclipse.jetty.jndi.InitialContextFactory");InitialContext ctx = new InitialContext();ctx.createSubcontext("java:comp");Server server = new Server(httpPort);WebAppContext webapp = new WebAppContext();webapp.setConfigurationClasses(__dftConfigurationClasses);webapp.setDescriptor("src/main/webapp/WEB-INF/web.xml");webapp.setContextPath(contextPath);webapp.setResourceBase(resourceBase);webapp.setClassLoader(Thread.currentThread().getContextClassLoader());server.setHandler(webapp);server.start();new Resource("BeanManager", new Reference("javax.enterprise.inject.spi.BeanMnanager","org.jboss.weld.resources.ManagerObjectFactory", null));server.join();}
}

此代码将启动一个Jetty服务器,该服务器使用项目中的web.xml来启动Vaadin Web应用程序。 请注意,我们明确使用
setConfigurationClasses
操作。 这是确保我们具有可用于注册Weld beanmanager的JNDI上下文所必需的。

设置web.xml

接下来,我们看一下web.xml。 接下来显示我在此示例中使用的一个:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><display-name>Vaadin Web Application</display-name><context-param><description>Vaadin production mode</description><param-name>productionMode</param-name><param-value>false</param-value></context-param><servlet><servlet-name>example</servlet-name><servlet-class>ServletSpecifiedByTheCDIVaadinPlugin</servlet-class><init-param><description>Vaadin application class to start</description><param-name>application</param-name><param-value>VaadinApplicationClassName</param-value></init-param><init-param><param-name>widgetset</param-name><param-value>customwidgetsetnameifyouuseit</param-value></init-param></servlet><servlet-mapping><servlet-name>example</servlet-name><url-pattern>/example/*</url-pattern></servlet-mapping><welcome-file-list><welcome-file>index.html</welcome-file></welcome-file-list><listener><listener-class>org.jboss.weld.environment.servlet.Listener</listener-class></listener><resource-env-ref><description>Object factory for the CDI Bean Manager</description><resource-env-ref-name>BeanManager</resource-env-ref-name><resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type></resource-env-ref>
</web-app>

在web.xml的底部,您可以看到为Weld定义的resource-env以及所需的侦听器,以确保启动Weld并注入了bean。 您还可以看到我们指定了一个不同的servlet名称,而不是普通的Vaadin servlet。 有关此内容的详细信息,请参见CDI插件页面: https : //vaadin.com/directory#addon/cdi-utils

主要步骤是(从该页面获取):

  1. 在WEB-INF目录下将空bean.xml -file(CDI标记文件)添加到您的项目中
  2. 将cdiutils * .jar添加到WEB-INF / lib下的项目中
  3. 通过扩展AbstractCdiApplication创建您的Application类
  4. 扩展AbstractCdiApplicationServlet并使用@WebServlet(urlPatterns =“ / *”)对其进行注释
  5. 部署到与JavaEE / Web配置文件兼容的容器(CDI应用程序也可以在servlet容器等上运行,但需要进行一些进一步的配置)

添加焊接占位符

至此,我们已经拥有所有依赖项,我们创建了可直接从Eclipse使用的启动器,并确保在启动时加载了Weld。 我们还为Vaadin配置了CDI插件。 至此,我们差不多完成了。 我们只需要在想被Weld的bean发现包括的位置添加空bean.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

我必须将这些添加到
src / main / java / META-INF
图书馆和 网络信息 Weld的目录以拾取所有带注释的bean。 就是这样。 现在,您可以启动启动器,并且应该看到出现了所有的Weld和Vaadin日志记录。

参考:来自JCG合作伙伴的 Embedded Jetty,Vaadin和Weld   Smart Java博客中的Jos Dirksen。


翻译自: https://www.javacodegeeks.com/2012/02/embedded-jetty-vaadin-and-weld.html

vaadin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/357574.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

终端-进入云服务器

解决办法: 1.先进入管理员模式: 2.下一步&#xff0c;链接服务器。 3.已经连接上服务器&#xff1a; 4.找到云服务器的项目路径: 在这里&#xff1a; 我们可以在cd空格/ 按Tab寻找下个文件夹&#xff0c;也可以输入ls查看文件夹。转载于…

Android studio 清除缓存数据的步骤

导读:在eclipse的当中进行运行Android的运用的程序的时候,就会产生内存缓存的信息,而eclipse是可以直接点击停止运行程序,然后点击清除缓存,就可以解决了这个问题,而Android studio却不能直接点击停止运行的,而只能通过其它的方式来清除Android studio中的缓存。 可以看…

linux 函数 文件校验,Linux中的文件效验命令

在网络传输、设备之间转存、复制大文件等时&#xff0c;可能会出现传输前后数据不一致的情况。这种情况在网络这种相对更不稳定的环境中&#xff0c;容易出现。那么校验文件的完整性&#xff0c;也是势在必行的。md5sum命令用于生成和校验文件的md5值&#xff0c;MD5全称报文摘…

为Java应用程序编写数据驱动的测试

JUnit是一个功能非常强大的测试框架&#xff0c;它不仅为其用户提供了编写快速简便的测试的功能&#xff0c;而且还为用户提供了扩展它并使其按其期望的方式工作的机会。 在JUnit之上构建了许多框架&#xff0c;这些框架为目标受众提供了各种易用的功能。 EasyTest是这样一种框…

为《31天成为IT服务达人》征求正式名字

写书时。没细想书的名字&#xff0c;仅仅是在想出本能够让同行或未来同行高速入门的书&#xff0c;如今想来还是应正式给他取个名&#xff0c;请朋友们帮忙哟 转载于:https://www.cnblogs.com/bhlsheji/p/5241848.html

设置按钮5秒后可以点击下一步||5秒后自动关闭网页

场景:业务需要在点击拍摄的时候提示一个用户须知页面,5秒后可以点击下一步。这属于一个js计时器的功能。这里用jQuery实现一下 效果图: html <div style="text-align: center;"><input type="button" value="下一步" id="next…

Codeforces Round #344 (Div. 2) B. Print Check

题意&#xff1a; 给你一个n*m一开始全是0的矩阵&#xff0c;然后又q次询问 每次询问给你三个字母 op,a,b 将第a行变成b 将第a列变成b 然后让你输出Q次询问后&#xff0c;这个矩阵长什么模样 思路&#xff1a;每个格子记录两个状态&#xff0c;区分横竖。 1 #include<cstdio…

linux数据包注释,关于 linux中TCP数据包(SKB)序列号的小笔记

关于 SKB序列号的小笔记为了修改TCP协议&#xff0c;现在遇到了要改动tcp分组的序列号&#xff0c;但是只是在tcp_sendmsg函数中找到了SKB的end_seq 一直没有找到seq不清楚在那里初始化了&#xff0c;就跟踪了分配SKB的函数 sk_stream_alloc_skb()还是没有找到&#xff0c;最…

JSP + Struts + Hibernate + Spring+MySQL+Myeclipse实现固定资产管理系统

导读:随着计算机信息技术的发展以及对资产、设备的管理科学化、合理化的高要求,利用计算机实现设备及资产的信息化管理已经显得非常重要。固定资产管理系统是一个单位不可缺少的部分。但一直以来人们使用传统的人工方式管理固定资产的信息,这种管理方式存在着许多缺点,这对…

java高效复制文件并移动_Java 7:复制和移动文件和目录

java高效复制文件并移动这篇文章是我对Java 7 java.nio.file软件包的系列文章的继续&#xff0c;这次涵盖了文件的复制和移动以及完整的目录树。 如果您曾经对Java缺少copy和move方法感到沮丧&#xff0c;那么请继续阅读&#xff0c;以免麻烦。 涵盖范围中包括非常有用的Files.…

MyEclipse+Tomcat+Java+MySQL实现企业员工信息管理系统

导读:随着信息技术的日益发展已深入到社会的各个角落,各个大的企业,都充分意识到传统的手工管理模式已经逐渐不能适应时代的发展,为了更好的发展,纷纷开发适合自己的管理系统。不管大企业。各种员工信息的小企业也是如此,企业的管理层也深深意识到这一点,以前管理大多为…

T4模板之菜菜鸟篇

一、废话 T4(Text Template Transformation Toolkit)是微软官方在VisualStudio 2008中开始使用的代码生成引擎。在 Visual Studio 中&#xff0c;“T4 文本模板”是由一些文本块和控制逻辑组成的混合模板&#xff0c;它可以生成文本文件。 在 Visual C# 或 Visual Basic 中&…

linux动态库ppt,LINUX系统中动态链接库创建与使用补充_区块链白皮书代写|市场计划书项目PPT设计_Tbleg...

区块链白皮书代写大家都知道&#xff0c;在WINDOWS系统中有很多动态链接库(以.DLL为后缀文件&#xff0c;DLL即Dynamic Link Library)。这种动态链接库&#xff0c;和静态函数库不同&#xff0c;它里面函数并不是执行程序本身一部分&#xff0c;而是根据执行程序需要按需装入&a…

MyEclipse+JavaEE+jsp+sqlsever实现产品售后服务系统

导读:我国信息产业、企业售后服务发展迅速,电商的发展超出了所有人都想象,与此同时也带来了诸多的问题。飞速发展的交易额,带来了大量的GDP增长,然而光鲜的背后是每天无数客服手忙脚乱的为顾客服务。由于顾客对自身生活质量要求越来越高,售后管理业必须随着人们生活水平的…

使用Apache Cassandra设置一个SpringData项目

在这篇文章中&#xff0c;我们将使用Gradle和spring boot来创建一个将spring-mvc和Apache Cassandra数据库集成在一起的项目。 首先&#xff0c;我们将从Gradle配置开始 group com.gkatzioura version 1.0-SNAPSHOTapply plugin: java apply plugin: eclipse apply plugin: i…

西南大学0039c语言作业答案,2017年6月西南大学继续教育学院C语言0039大作业答案...

1、假定p1和p2是已赋值的字符型指针&#xff0c;则下述有关运算中&#xff0c;非法的是(.*(p1-2p2)getchar( ); )2、循环语句for (x0,y0;(y!123)||(x<4);x)&#xff1b;的循环执行(无限次)3、设有定义"int a5,b,*p&a;"&#xff0c;执行下列语句后,b的值不为5的…

第一周学习进度表

第一周所花时间&#xff08;包括上课&#xff09;上课时间&#xff1a;4小时 周三、周五、周六各3小时阅读<<构建之法>>代码量&#xff08;行&#xff09;45博客量4了解到的知识 在上软件工程这门课使我对编程有了哟个新的认识&#xff0c;就是在编写一个复杂程序时…

前端工程师必须知道的用javaScript刷新当前页面的3种方法

业务场景:APP列表页右上角有一个立即刷新按钮,点击立即刷新需要刷新当前页面。下面简单实现几个DEMO 效果图 目录 方法1:reload() 方法 方法2:replace() 方法

【BZOJ1002】[FJOI2007]轮状病毒 递推+高精度

Description 给定n(N<100)&#xff0c;编程计算有多少个不同的n轮状病毒。 Input 第一行有1个正整数n。 Output 将编程计算出的不同的n轮状病毒数输出 Sample Input 3Sample Output 16HINT Source Solution&#xff1a;推导不会&#xff0c;看不懂&#xff0c;知道了公式f[i…

cla c 语言编译器,第九章 CLA_C2000_C_Compiler.pdf

TI CLA C 编译器概述C2000 Compiler RoadmapCGT v6.2CGT v6.1ProductionCGT v6.0Early AdopterIn DevelopmentCGT v5.2FutureCurrent 11Q4 12Q1 12Q2 12Q3 12Q4 13H1 FutureC2000 CGT v5.2 C2000 CGT v6.1 C2000 CGT v6.2•Assembler support for CLA •CLA C support •Future…