标签:java

以下是与标签 “java” 相关联的文章

vscode 编译调试 java 单文件代码

安装

  • Language Support for Java(TM) by Red Hat
  • Java Debug Extension for Visual Studio Code

设置

  • 需要先打开一个目录,以下配置文件生成于该目录的 .vscode 目录下
  • 编译设置

C-S-p Tasks: Configure Task Runner

{
    // See https://go.microsoft.com/fwlink/?LinkId=733558
    // for the documentation about the tasks.json format
    "version": "2.0.0",
    "tasks": [
        {
            "taskName": "java build",
            "type": "shell",
            "command": "javac",
            "args": ["-d","${workspaceRoot}","${file}"],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "problemMatcher": {
                "owner": "java",
                "fileLocation": ["absolute"],
                "pattern": {
                    "regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error|fatal error):\\s+(.*)$",
                    "file": 1,
                    "line": 2,
                    "column": 3,
                    "severity": 4,
                    "message": 5
                }
            }
        }
    ]
}
  • 调试设置

Debug -> Start Debugging

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "type": "java",
            "name": "Debug (Launch)",
            "request": "launch",
            "sourcePaths": [
                "$(workspaceRoot)"
            ],
            "classPaths": [
                "",            
                "$(workspaceRoot)"
            ],
            "mainClass": "${fileBasenameNoExtension}",
            "args": ""
        },
        {
            "type": "java",
            "name": "Debug (Attach)",
            "request": "attach",
            "hostName": "localhost",
            "port": 0
        }
    ]
}

快捷键

  • 编译 C-S-b
  • 调试 F5

angular2 学习笔记(1)- 工具配置和框架搭建

搭建 springboot 工程

工程框架

  • File -> New -> Project -> Spring Initializer
  • Dependencies: Web->Web, Template Engine->Thymeleaf
  • Thymeleaf 修改为 LEGACY 模式
    • pom.xml 中添加依赖

      <dependency>
        <groupId>net.sourceforge.nekohtml</groupId>
        <artifactId>nekohtml</artifactId>
      </dependency>
      
    • 修改 application.properties

      spring.thymeleaf.mode=LEGACYHTML5
      spring.thymeleaf.cache=false
      

Bean 配置

  • 添加类 BeanConfig

    @Configuration
    @ImportResource("classpath:bean.xml")
        public class BeanConfig {
    }
    
  • 在 src->main->resources 下添加文件 bean.xml,并添加 Bean 实例

    <bean name="myBean" class="com.fj.springboot01.MyBean"/>
    

添加路由

  • 给类添加注解 @Controller
  • 给类添加方法

    @RequestMapping("/hello")
    public String hello() {
      System.out.println("hello mapping");
      return "hello";
    }
    
  • 添加 hello.html ,放在 src/main/resources/templates 目录下

添加静态资源

  • angular2 生成的页面作为静态资源放在 src/main/resources/static 目录下

搭建 angular2 框架

安装软件

  • 下载并安装 node.js LTS 版本到 D:/nodejs 目录
  • 安装 cnpm

    npm install -g cnpm --registry=https://registry.npm.taobao.org
    
    
  • 修改 C:/Users/fj/.npmrc

    registry=https://registry.npm.taobao.org/
    prefix=D:\nodejs
    cache=D:\nodejs\node_cache
    
  • 安装 npm 软件包

    npm install -g @angular/cli webpack typescript tslint
    
    

工程框架

  • 新建代码框架,下载依赖

    cd spring001/src/main
    ng new angular
    cd angular
    npm install
    
  • 新建 Component

    ng g c component/data-grid
    
    
  • 修改页面

编译

  • 命令行编译生成目标文件

    ng build --prod --aot --bh /note/ --no-extract-license
    
    
  • 修改 package.json , 添加两行

    "scripts": {
      "develop":"ng build -bh /note/ -w",
      "release":"ng build -bh /note/ -prod -aot --env=prod --no-extract-license"
    },
    
  • 将目标文件移动到静态资源目录下, 修改 .angular-cli.json

    "outDir": "../resources/static/note", 
    

调试

  • tsconfig.json 中打开 sourceMap 选项

    "sourceMap": true,
    "inlineSources": true,
    
  • 在 IDEA 中直接创建 SpringBoot 启动项
  • 启动调试

maven 打包时间戳问题

maven 打包时,可以生成时间戳属性,利用该属性来组装包名。

<version>5.0.${build.time}B</version>
<properties>
  <maven.build.timestamp.format>yyyyMMddHHmmss</maven.build.timestamp.format>
</properties>

对资源文件开启 filtering 功能,资源文件中的 POM 变量在打包过程中会被自动替换。在 java 代码中访问 properties 资源文件,就可以取到版本号。

<resource>
  <directory>src/main/resources</directory>
  <filtering>true</filtering>
</resource>

但是,这个时间戳属性有个问题,生成的时间 ${maven.build.timestamp} 是 UTC 时间,无法修改时区。网上找到一个办法,可以用插件解决这个问题。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>build-helper-maven-plugin</artifactId>
  <version>1.8</version>
  <executions>
    <execution>
      <id>timestamp-property</id>
      <goals>
        <goal>timestamp-property</goal>
      </goals>
      <configuration>
        <name>build.time</name>
        <pattern>yyyyMMdd'.'HHmm</pattern>
        <timeZone>GMT+8</timeZone>
      </configuration>
    </execution>
  </executions>
</plugin>

该插件生成的属性 ${build.time} 已经是本地时区。

但是,在 IDEA 中, Build Projects ,再 Build Artifacts... ,属性文件中的 ${project.version} 并没有被替换。

摸索了一阵,发现 IDEA Build Projects 并不会调用 maven 生命周期,导致 plugin 不被执行。虽然 maven 自带变量可以被替换,但是自定义变量却不会被替换。

使用工具按钮的 maven install 打包,资源中的变量可以被正常替换。

还有一个方法,可以将 IDEA 的 Build 与 maven goal 绑定起来:

bind maven goal

图1  绑定 maven goal

spring 入门之 spring-mvc + Tiles

spring-mvc 入门之 Hello World! 基础上添加 tiles 内容。

添加 POM 依赖

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-servlet</artifactId>
  <version>3.0.7</version>
</dependency>

<dependency>
  <groupId>org.apache.tiles</groupId>
  <artifactId>tiles-jsp</artifactId>
  <version>3.0.7</version>
</dependency>

<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>

修改 spring01-servlet.xml

  • 删除 InternalResourceViewResolver 定义的 bean
  • 添加 tiles 配置器和解析器
<bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
  <property name="definitions">
    <list>
      <value>/WEB-INF/views/views.xml</value>
    </list>
  </property>
</bean>

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
  <property name="viewClass">
    <value>org.springframework.web.servlet.view.tiles3.TilesView</value>
  </property>
</bean>

添加 tiles 模板

新建 WEB-INF/views 目录

新建 views.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
    "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">

<tiles-definitions>
  <definition name="template" template="/WEB-INF/views/template.jsp">
    <put-attribute name="header" value="/WEB-INF/views/header.jsp"/>
  </definition>

  <definition name="main" extends="template">
    <put-attribute name="content" value="/WEB-INF/views/content.jsp"/>
  </definition>
</tiles-definitions>

新建 jsp 模板文件

  • template.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles" %>

<html>
<head>
  <title>Template</title>
</head>
<body>
  <tiles:insertAttribute name="header"/>
  <tiles:insertAttribute name="content"/>
</body>
</html>
  • 新建 header.jsp
<h1>this is header</h1>
  • content.jsp
<%@ page isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<p>Hello1, ${name} </p>
<p>Hello2, <c:out value="${name}"/> </p>

spring 入门之 spring-mvc

在 IDEA 中,新建工程

  • 工程类型为 maven
  • 选中 create from archetype ,选择 webapp 模板
  • 填写项目名称,完成创建

pom.xml 中添加 spring-mvc 依赖

  • 只要填写 artifactId。IDEA 自动完成 groupId,列出本地 maven 仓库中已有版本号。如果需要,可以手工将版本号修改成最新。
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.3.7.RELEASE</version>
</dependency>

修改 web.xml ,增加 spring-mvc servlet

<servlet>
  <servlet-name>spring01</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
  <servlet-name>spring01</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

新建 spring servlet 配置文件

  • 通过右键在 WEB-INF 目录下新建文件,类型选择 spring config
  • 文件名为 spring01-servlet.xml ,要与之前的 servlet-name 匹配
  • IDEA 自动完成 beans 标签
  • 注意:如果运行时提示找不到 sping-cache 库,可能是 beans 标签中的 spring-mvc 自动写成了 spring-cache ,需要手工修改。否则需要添加 POM 依赖。
<mvc:annotation-driven/>
<context:component-scan base-package="com.litchi"/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/"/>
  <property name="suffix" value=".jsp"/>
</bean>

新建 controller 类

  • 在 main 目录下新建 java 目录
  • 右键 Make directory as -> Source Root
  • 新建 MyController.java
@Controller
public class MyController {
  @RequestMapping("home")
  public String HomePage(ModelMap model) {
    return "home";
  }

新建运行配置

  • 服务器选择 tomcat7
  • 添加 deplyment,选择 exploded 版本