实验名称:实验三:通过Maven搭建JFinal极速开发框架实验

软件构造实验作业

实验名称:实验三:通过Maven搭建JFinal极速开发框架实验

班级:信2005-2  学号:20204139  姓名:贾再民 

 

一、实验任务

任务一:

1.什么是Maven

Maven项目对象模型(POM),可以通过一小段描述信息来管理项目的构建,报告和文档的项目管理工具软件。Maven 除了以程序构建能力为特色之外,还提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。由于 Maven 的面向项目的方法,许多 Apache Jakarta 项目发文时使用 Maven,而且公司项目采用Maven 的比例在持续增长。Maven这个单词来自于意第绪语(犹太语),意为知识的积累,最初在Jakata Turbine项目中用来简化构建过程。当时有一些项目(有各自Ant build文件),仅有细微的差别,而JAR文件都由CVS来维护。于是希望有一种标准化的方式构建项目,一个清晰的方式定义项目的组成,一个容易的方式发布项目的信息,以及一种简单的方式在多个项目中共享JARs

2.Maven使用方法

2.1创建maven项目

最基本的maven项目创建命令如下

mvn archetype:generate -DgroupId={{your_companyName}} -DartifactId={{your_projectName} -DarchetypeArtifactId=maven-archetype-quickstart

根目录下有一个pom.xml,用来编写maven的配置(如依赖包)

详细创建指令如下:

mvn archetype:create或者mvn archetype:generate 是固定写法,两者几乎无区别。

额外参数如下:

-DgroupId 组织标识(包名)

-DartifactId 项目名称

-DarchetypeArtifactId 指定ArchetypeIdmaven-archetype-quickstart,创建一个Java Projectmaven-archetype-webapp,创建一个Web Project

-DinteractiveMode 是否使用交互模式

archetypemvn内置的一个插件,create任务可以创建一个java项目骨架,DgroupId是软件包的名称,DartifactId是项目名,DarchetypeArtifactId是可用的mvn项目骨架,目前可以使用的骨架有:

maven-archetype-archetype

maven-archetype-j2ee-simple

maven-archetype-mojo

maven-archetype-portlet

maven-archetype-profiles (currently under development)

maven-archetype-quickstart

maven-archetype-simple (currently under development)

maven-archetype-site

maven-archetype-site-simple

maven-archetype-webapp

每一个骨架都会建相应的目录结构和一些通用文件,最常用的是maven-archetype-quickstartmaven-archetype-webapp骨架。maven-archetype-quickstart骨架是用来创建一个Java Project,而maven-archetype-webapp骨架则是用来创建一个JavaWeb Project

2.2添加项目依赖

修改pom.xml 文件。例如想增加json解析包,在https://mvnrepository.com 这个网站搜索,然后复制maven配置进去。

https://mvnrepository.com/artifact/org.json/json/20180813

 

<dependencies>

   <dependency>

     <groupId>junit</groupId>

     <artifactId>junit</artifactId>

     <version>3.8.1</version>

     <scope>test</scope>

   </dependency>

   <dependency>

       <groupId>org.json</groupId>

       <artifactId>json</artifactId>

       <version>20180813</version>

    </dependency>

    .....

</dependencies>   

默认项目的依赖包下载

完后都放在 C:\Users\Administrator.m2\repository 目录下。需要修改依赖包的下载目录的话在 $MAVEN_HOME$\conf\settings.xml 这个文件下修改。

2.3编译项目

mvn compile

会下载依赖包,然后编译项目。默认编译结果在target/classes目录下,结果为.class文件。

2.4打包jar

jarjava的包,可以其他项目应用。

命令: mvn package

 

这个命令会先compile项目,生成classes,然后在把class压缩到一起生成一个jar包。

2.5清理

mvn clean

清理target目录的编译文件。

2.6部署

命令: mvn install

过程:【清理】→【编译】→【测试】→【打包】→【安装】

安装过程就是把.jar相关文件复制到本地仓库里。

运行

通过java命令可以运行.class文件,也可以运行.jar文件。

需要注意的点:

src源码的类有多少个main都无所谓(这与c/c++项目不一样)

通过java命令运行的时候需要指定运行哪一个类

jarclass有第三方依赖包的或需要指定依赖包的位置。

java命令的几个重要参数

例如:我现在有2java文件,编译成jar文件。

App.java如下:(有第三方包)

package com.hhk;

import org.json.JSONObject;

public class App {

    public static void main(String[] args) {

        JSONObject out = new JSONObject();

        out.put("type", "message");

        System.out.println(out.toString());

    }

}

App2.java如下:

 

package com.hhk;

/**

 * Hello world!

 *

 */

public class App2 {

    public static void main(String[] args) {

        System.out.println("Hello world");

    }

}

pom.xml文件部分如下:

 

<dependencies>

    <dependency>

      <groupId>junit</groupId>

      <artifactId>junit</artifactId>

      <version>3.8.1</version>

      <scope>test</scope>

    </dependency>

    <dependency>

        <groupId>org.json</groupId>

        <artifactId>json</artifactId>

        <version>20180813</version>

    </dependency>

  </dependencies>

 </dependencies>

运行命令mvn package 打包jar之后。(打包为testmvn.jar

先运行App2.java的主函数,命令为(-cp -classpath一致,表示要加载的jar文件或.class)

java -cp testmvn-1.0-SNAPSHOT.jar com.hhk.App2

App.java依赖json20180813.jar(加载多个.jar)

java -cp "testmvn-1.0-SNAPSHOT.jar;C:\Users\Administrator\.m2\repository\org\json\json\20180813\json-20180813.jar" com.hhk.App

pom.xml

pom.xml文件的节点元素说明:

<project>       pom文件的顶级节点

<modelVersion>     object model版本,对Maven2Maven3来说,只能是4.0.0 

<groupId>       项目创建组织的标识符,一般是域名的倒写

<artifactId>  定义了项目在所属组织的标识符下的唯一标识,一个组织下可以有多个项目

<version>        当前项目的版本,SNAPSHOT,表示是快照版本,在开发中

<packaging>      打包的方式,有jarwarear

<name>       项目的名称

<url>          项目的地址

<properties>    属性配置,比如:<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<dependencies>     构建项目依赖的jar

3.Maven功能作用

Maven是一种构建工具(打包项目)、依赖管理工具(资源依赖管理工具:主要用于集成资源)、项目信息聚合工具。

1 、下载jar

maven项目会有一个 pom.xml文件,在这个文件里面,只要你添加相应配置,他就会自动帮你下载相应jar包,不用你铺天盖地的到处搜索你需要的jar包了

下面是示范配置文件pom.xml

<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">

     <modelVersion>4.0.0</modelVersion>

     <groupId>com.atguigu.maven</groupId>

     <artifactId>JavaProject01</artifactId>

     <version>0.0.1-SNAPSHOT</version>

</project>

主要内容就是:

<groupId>com.atguigu.maven</groupId>  //项目名

<artifactId>JavaProject01</artifactId>  //项目模块

<version>0.0.1-SNAPSHOT</version>  //项目版本

maven会通过,项目名-项目模块-项目版本来maven在互联网上的代码库中下载相应jar包。

2 、寻找依赖,下载依赖

寻找jar包是第一基本功能,寻找依赖在这个是在这个基础上的功能。

maven的代码库中,每一个jar包也有自己的 pom.xml文件,而这个文件里面也会有配置,什么依赖范围我就不细说了,我想表达的就是,只要你配置的jar包所依赖的其他jar包都会被maven自动下载下来。

例如: 你配置了以下内容

 <dependency>

          <groupId>org.springframework</groupId>

          <artifactId>spring-core</artifactId>

          <version>2.6</version>

</dependency>

这样配置maven就会帮你自动下载spring-core-2.6.jar包,而这个jar包里面需要用到commons-logging.jar这个包,这叫就依赖,spring-core-2.6.jar依赖于commons-logging.jar

3 、热部署,热编译

意思就是,在你web项目已经运行的时候,修改代码的能直接被web服务器所接受,就不需要你重启服务器了,或者重新部署代码了,而且你可以直接通过maven 打包war或者jar项目。

任务二:

1.配置maven

2.导入jfinal-4.9.01_demo_for_maven项目

3. 使用 blog.sql 中的 sql 语句创建数据库与数据库表

4. 修改 src/main/resources/demo-config-dev.txt 文件,填入正确的数据库连接用户名、密码

5. 打开 com.demo.common包下的 DemoConfig 文件,右键单击该文件并选择 Debug As---> Java Application,运行

6. 打开浏览器输入  localhost 即可查看运行效果

 

 

1.控制器(支持FreeMarker、JSP、Velocity、JSON等以及自定义视图渲染):

@Before(BlogInterceptor.class)
public class BlogController extends Controller {
  
   @Inject
   BlogService service;
  
   public void index() {
      setAttr("blogPage", service.paginate(getParaToInt(0, 1), 10));
      render("blog.html");
   }
  
   public void add() {
   }
  
   /**
    * save 
与 update 的业务逻辑在实际应用中也应该放在 serivce 之中,
    * 并要对数据进正确性进行验证,在此仅为了偷懒
    */
   
@Before(BlogValidator.class)
   public void save() {
      getBean(Blog.class).save();
      redirect("/blog");
   }
  
   public void edit() {
      setAttr("blog", service.findById(getParaToInt()));
   }
  
   /**
    * save 
与 update 的业务逻辑在实际应用中也应该放在 serivce 之中,
    * 并要对数据进正确性进行验证,在此仅为了偷懒
    */
   
@Before(BlogValidator.class)
   public void update() {
      getBean(Blog.class).update();
      redirect("/blog");
   }
  
   public void delete() {
      service.deleteById(getParaToInt());
      redirect("/blog");
   }
}

 

 

2.Service(所有业务与sql放在Service层)

/** *
 * BlogService
 * 
所有 sql 与业务逻辑写在 Service 中,不要放在 Model 中,更不
 * 要放在 Controller 中,养成好习惯,有利于大型项目的开发与维护
 */
public class BlogService {
  
   /**
    * 
所有的 dao 对象也放在 Service 中,并且声明为 private,避免 sql 满天飞
    * sql 只放在业务层,或者放在外部 sql 模板,用模板引擎管理:
    *           http://www.jfinal.com/doc/5-13
    */
   
private Blog dao = new Blog().dao();
  
   public Page<Blog> paginate(int pageNumber, int pageSize) {
      return dao.paginate(pageNumber, pageSize, "select *", "from blog order by id asc");
   }
  
   public Blog findById(int id) {
      return dao.findById(id);
   }
  
   public void deleteById(int id) {
      dao.deleteById(id);
   }
}

 

 

3.Model(无xml、无annotation、无attribute)

@SuppressWarnings("serial")
public class Blog extends BaseBlog<Blog> {
  
}

 

4.Validator(API引导式校验,比xml校验方便N倍,有代码检查不易出错)

public class BlogValidator extends Validator {
  
   protected void validate(Controller controller) {
      validateRequiredString("blog.title", "titleMsg", "请输入Blog标题!");
      validateRequiredString("blog.content", "contentMsg", "请输入Blog内容!");
   }
  
   protected void handleError(Controller controller) {
      controller.keepModel(Blog.class);
      
      String actionKey = getActionKey();
      if (actionKey.equals("/blog/save"))
         controller.render("add.html");
      else if (actionKey.equals("/blog/update"))
         controller.render("edit.html");
   }
}

 

5.拦截器(在此demo中仅为示例,本demo不需要此拦截器)

public class BlogInterceptor implements Interceptor {
  
   public void intercept(Invocation inv) {
      System.out.println("Before invoking " + inv.getActionKey());
      inv.invoke();
      System.out.println("After invoking " + inv.getActionKey());
   }
}

 

任务三:

1.项目框架:

 

2.创建数据库,表。

 

3.连接数据库

 

4.启动项目,运行DemoConfig.java

 

5.主界面

 

6.添加

 

 

7.删除

 

 

8.修改

 

 

 

9.查看

 

 

二、实验总结

这次实验接触了新的框架,使用新的开发框架jfinal,刚开始接很不熟悉,用了很大的力气才将项目导入进来,后来想通过命令进行打包和运行,但是一直报错,这个以后会再尝试。刚开始运行项目的时候,没有注意到_MappingKit写学生的信息,就一直报错。通过学习博客项目,最后完成了这次学生信息管理系统,过程很不是很顺利但是成功了。通过这次作业我收获了一种新的框架的使用方法,了解到了jfinal框架的结构,丰富了自己的知识。

posted @ 2022-11-25 15:09  萧贾jzm  阅读(151)  评论(0编辑  收藏  举报
//歌单id