1. 程式人生 > >使用maven建立基於spring框架的scala web工程

使用maven建立基於spring框架的scala web工程

最近在研究如何使用scala進行web開發的過程中,發現資料都很少。參考很多文章的例子,工程都執行不起來。所以,寫下這篇文章。
lift是基於scala語言開發的web框架。但考慮到目前java程式設計師對spring框架比較熟悉。因此選擇spring框架作為scala web工程的框架。
使用maven作為專案管理工具。

1 使用maven建立工程

mvn archetype:generate -U -DarchetypeGroupId=org.scala-tools.archetypes -DarchetypeArtifactId=scala-archetype-simple -DarchetypeVersion
=1.0 -DremoteRepositories=http://scala-tools.org/repo-releases -DgroupId=au.com.belmonttechnology -DartifactId=scala-spring-hibernate

注意:建議使用命令列建立工程,不要使用idea建立工程。如果使用idea建立工程,可能不同版本的idea建立的工程有差異。

mvn clean package -Dmaven.test.skip=true

錯誤:這裡寫圖片描述
解決辦法:替換pom檔案中<build>為以下內容:

<build>
    <plugins
>
<plugin> <groupId>net.alchim31.maven</groupId> <artifactId>scala-maven-plugin</artifactId> <version>3.2.0</version> <executions> <execution> <id>compile</id> <goals
>
<goal>compile</goal> </goals> <phase>process-resources</phase> </execution> <execution> <id>test-compile</id> <goals> <goal>testCompile</goal> </goals> <phase>process-test-resources</phase> </execution> </executions> <configuration> <scalaVersion>${scala.version}</scalaVersion> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.17</version> <configuration> <skip>true</skip> </configuration> <executions> <execution> <id>unit-tests</id> <phase>test</phase> <goals> <goal>test</goal> </goals> <configuration> <skip>false</skip> <includes> <include>**/*Test.class</include> <include>**/*Spec.class</include> </includes> <excludes> <exclude>**/webtest/**/*Test.class</exclude> </excludes> </configuration> </execution> <execution> <id>web-tests</id> <phase>integration-test</phase> <goals> <goal>test</goal> </goals> <configuration> <skip>false</skip> <includes> <include>**/webtest/**/*Test.class</include> </includes> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.2.2.v20140723</version> <!-- If you can't use Java 7 for some reason, or want to use Jetty 8, check out the java-6 git branch --> <configuration> <httpConnector> <port>9090</port> </httpConnector> <stopKey>stopIt</stopKey> <stopPort>9191</stopPort> <reload>manual</reload> <systemProperties> <!-- Without this, JSPs don't compile when Maven runs on a JRE instead of a JDK (e.g. Java 7 on a Mac!) --> <systemProperty> <name>org.apache.jasper.compiler.disablejsr199</name> <value>true</value> </systemProperty> </systemProperties> </configuration> <executions> <execution> <id>start-jetty-before-integration-tests</id> <phase>pre-integration-test</phase> <goals> <goal>run</goal> </goals> <configuration> <scanIntervalSeconds>0</scanIntervalSeconds> <daemon>true</daemon> </configuration> </execution> <execution> <id>stop-jetty-after-integration-tests</id> <phase>post-integration-test</phase> <goals> <goal>stop</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-eclipse-plugin</artifactId> <version>2.9</version> <configuration> <additionalBuildcommands> <buildcommand>org.springframework.ide.eclipse.core.springbuilder</buildcommand> <buildcommand>org.eclipse.m2e.core.maven2Builder</buildcommand> </additionalBuildcommands> <additionalProjectnatures> <projectnature>org.springframework.ide.eclipse.core.springnature</projectnature> <projectnature>org.eclipse.m2e.core.maven2Nature</projectnature> </additionalProjectnatures> <buildcommands> <buildcommand>org.scala-ide.sdt.core.scalabuilder</buildcommand> </buildcommands> <classpathContainers> <classpathContainer>org.scala-ide.sdt.launching.SCALA_CONTAINER</classpathContainer> <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer> </classpathContainers> <downloadSources>true</downloadSources> <downloadJavadocs>true</downloadJavadocs> <excludes> <exclude>org.scala-lang:scala-library</exclude> <exclude>org.scala-lang:scala-compiler</exclude> </excludes> <projectnatures> <projectnature>org.scala-ide.sdt.core.scalanature</projectnature> <projectnature>org.eclipse.jdt.core.javanature</projectnature> </projectnatures> <sourceIncludes> <sourceInclude>**/*.scala</sourceInclude> </sourceIncludes> <wtpversion>2.0</wtpversion> </configuration> </plugin> </plugins> </build>

2 在IDEA引入工程,並使用scala

引入工程,修改App.scala為以下內容:

object App {
def main(args: Array[String]) {
println( "Hello World!" );
}
}

修改scala版本:

<scala.version>2.11.7</scala.version>

右鍵,Run ‘App’

3 建立web工程

修改pom檔案<packaging>為war

<packaging>war</packaging>

在pom檔案的中新增以下內容:

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <org.springframework.version>4.0.6.RELEASE</org.springframework.version>
    <slf4j.version>1.7.7</slf4j.version>

替換pom檔案的<dependencies>為以下內容:

<dependencies>
    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>

    <dependency>
      <groupId>xerces</groupId>
      <artifactId>xercesImpl</artifactId>
      <version>2.9.1</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-validator</artifactId>
      <version>5.1.2.Final</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${org.springframework.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${org.springframework.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${org.springframework.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${org.springframework.version}</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.0.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.2.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>javax.servlet.jsp.jstl-api</artifactId>
      <version>1.2.1</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.2</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>${slf4j.version}</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-core</artifactId>
      <version>4.3.6.Final</version>
      <scope>compile</scope>
    </dependency>

    <dependency>
      <groupId>org.javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.18.2-GA</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>c3p0</groupId>
      <artifactId>c3p0</artifactId>
      <version>0.9.1.2</version>
    </dependency>

    <dependency>
      <groupId>org.hsqldb</groupId>
      <artifactId>hsqldb</artifactId>
      <version>2.3.2</version>
      <scope>runtime</scope>
    </dependency>

    <dependency>
      <groupId>org.seleniumhq.selenium</groupId>
      <artifactId>selenium-java</artifactId>
      <version>2.42.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>com.google.code.findbugs</groupId>
      <artifactId>jsr305</artifactId>
      <version>1.3.9</version>
    </dependency>

  </dependencies>

建立src/main/webapp/WEB-INF目錄,並建立web.xml檔案,修改內容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!--
 * This code is in the public domain and may be used in any way you see fit, with the following conditions:
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 *     IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 *     FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 *     AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 *     LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 *     OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 *     THE SOFTWARE.
 -->
<web-app 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/web-app_2_5.xsd"
         id="scala-spring-hibernate"
         version="2.5">

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-context-data.xml</param-value>
    </context-param>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-context-web.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>

    <filter>
        <!-- Allows the "_method" parameter to dictate the HTTP method -->
        <filter-name>methodFilter</filter-name>
        <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>methodFilter</filter-name>
        <url-pattern>*.html</url-pattern>
    </filter-mapping>


    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

</web-app>

新增spring-context-web.xml和spring-context-data.xml

在src/resources目錄下,新增log4j.properties檔案

編寫scala、jsp程式碼,jetty:run啟動web應用,在瀏覽器輸入localhost:9090訪問

專案程式碼:[email protected]:weimengchao/scala-spring-hibernate.git

相關推薦

使用maven建立基於spring框架scala web工程

最近在研究如何使用scala進行web開發的過程中,發現資料都很少。參考很多文章的例子,工程都執行不起來。所以,寫下這篇文章。 lift是基於scala語言開發的web框架。但考慮到目前java程式設計師對spring框架比較熟悉。因此選擇spring框架作為s

基於Spring框架開發的Web程式,如何動態修改日誌級別

背景: 線上環境日誌級別一般較高,出現故障定位過程中,期望輸出儘可能完備的日誌資訊便於除錯。日誌級別動態修改就是一個不錯的思路,幸運的是基於Spring框架開發的Web程式,藉助spring-web包中org.springframework.web.util.Log4jCo

Spring Boot入門第二天:一個基於Spring Boot的Web應用,使用了Spring Data JPA和Freemarker。

per pan let mysq 應用 posit ble host thead 今天打算從數據庫中取數據,並展示到視圖中。不多說,先上圖: 第一步:添加依賴。打開pom.xml文件,添加必要的依賴,完整代碼如下: <?xml version="1.0" enco

基於Spring框架的Shiro配置(轉發:http://kdboy.iteye.com/blog/1103794)

alt work actor proxy post end url return images 一、在web.xml中添加shiro過濾器 Xml代碼 <!-- Shiro filter--> <filter> <

基於spring框架的jt項目小知識點(二)

pri align spring框架 基於 syslog getname 日誌 private .class 知識點匯總 1. 日誌記錄方法   private Logger log=   Logger.getLogger(SysLogServiceImpl.class.

基於spring框架的webservice介面的開發和除錯

1. 基本環境 tomcat6、spring、jdk1.7 2. 引入cxf的jar包 Spring框架整合webservice需要用到cxf框架,需要在pom.xml裡引入以下jar包 <dependency> <g

使用maven建立javaWeb專案及執行web專案

網上的版本多而雜,自己實踐才是關鍵!!! 1.新建一個Maven Project 選擇Maven Project 選擇maven-archetype-webapp Group Id是專案組織唯一的識別符號,實際對應 Java 的包的結構,是 main 目錄裡 java 的

一步一步建立一個spring cloud多模組工程

最近專案要用spring boot ,spring cloud 還有docker,在spring cloud這卡了很久,這篇博文做個筆記 1、因為專案是多模組的,這裡需要建立一個maven工程,它的pom作為專案的父pom 1.1、建立一個空的maven工程  

基於spring框架的java開發中的異常處理

在springmvc框架的中異常處理的方式有兩種: 1,在控制器中使用@ExceptionHandler(xxxException.class)註解修飾一個方法,該註解能夠處理通一個控制器類中的丟擲的xxxExcepiton異常。 使用控制器通知註解@ControllerAdvice

javaEE shiro框架,許可權控制。基於Spring框架的shiro許可權控制

許可權控制的方式: 方式一:通過過濾器或Struts2的攔截器實現許可權控制 方式二:為Struts2的Action加入註解(標識),然後為Action建立代理物件;代理物件進行許可權校驗,校驗通過後通過反射呼叫目標方法。 shiro框架可以進行認證、授權、會話管理、加

Spring框架整合WEB解決配置檔案載入多次的問題

1. 建立JavaWEB專案,引入Spring的開發包。編寫具體的類和方法。 * 環境搭建好後,啟動伺服器來測試專案,傳送每訪問一次都會載入一次配置檔案,這樣效率會非常非常慢!! 2. 解決上面的問題 * 將工廠建立好了以後放入到ServletContext域中.使用工廠的時候,從Servl

Spring框架整合WEB解決配置文件加載多次的問題

load cti style customer ner ssp text param work 1. 創建JavaWEB項目,引入Spring的開發包。編寫具體的類和方法。 * 環境搭建好後,啟動服務器來測試項目,發送每訪問一次都會加載一次配置文件,這樣效率會非常非

3 Spring框架整合WEB 1(與struts2整合)

使用spring與struts2整合 web.xml的配置 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-in

Golang基於beego框架開發Web APP的訪問日誌記錄模組

日誌系統或者說使用者操作記錄,在後端中的作用可謂是舉足輕重。那日誌記錄到底有什麼用?用處還真的挺多的,常見的比如debug、資料分析、安全防護等等等等。那今天我們用Golang基於beego框架寫一個伺服器端訪問日誌記錄模組,這裡面涉及到的知識點主要就是Golang的檔案讀寫

maven構建成一個標準的web工程

1、點選maven的專案名右擊,選擇最後一個properties; 2、找到maven選擇project facets,勾選Java,並對應你jdk的版本號,隨後選擇Dynamic web Module,點選Further configuration available,跳出web工程的頁面

spring框架web.xml的配置詳解

1 定義頭和根元素   部署描述符檔案就像所有XML檔案一樣,必須以一個XML頭開始。這個頭宣告可以使用的XML版本並給出檔案的字元編碼。 DOCYTPE宣告必須立即出現在此頭之後。這個宣告告訴伺服器適用的servlet規範的版本(如2.2或2.3)並指定管理此檔案其餘部

基於nodejs開發的web工程開啟代理轉發功能

背景: web開發中,我們需要訪問mock server則需要把web中所有請求代理到mockserver中。 在啟動web開發模式的指令碼中,新增以下程式碼。其中a-api是一個訪問路徑。

python程式設計:從入門到實踐學習筆記-基於Django框架Web開發-設計樣式和部署(二)

部署學習筆記 接下來我們將使用Heroku(基於Web的平臺)管理Web應用程式的部署。 建立Heroku賬戶 訪問https://signup.heroku.com註冊一個帳號。 安裝Heroku Toolbelt 安裝Heroku Toolbelt,對部署到He

【day 11】python程式設計:從入門到實踐學習筆記-基於Django框架Web開發-Django入門(二)

學習筆記目錄 第十八章 Django入門(二) 建立應用程式 django專案由一系列應用程式組成,他們協同工作,讓專案稱謂一個整體。首先我們執行命令python manage.py startapp learning_logs。 定義模型

Maven 下的spring框架(4定時器quartz)

清明放假三天,沒有時間寫部落格,今天把定時器quartz的使用方法貼出來。通過前三篇的文章,大家的框架都是可以執行的了,那麼下面開始配置quartz。 首先,先把jar包導進來 <!-- 任務排程器 --> <dependency> &l