import org.springframework.util.ResourceUtils;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.w3c.dom.Node;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.stream.Stream;
public class TestFunc {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
try {
File xmlFile = ResourceUtils.getFile("classpath:ckfinder-config.xml");
readMXLFile(xmlFile);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void readMXLFile(File xmlFile) throws Exception {
InputStream is = new FileInputStream(xmlFile);
StringBuilder contentBuilder = new StringBuilder();
try (Stream stream = Files.lines(Paths.get(xmlFile.getAbsolutePath()), StandardCharsets.UTF_8)) {
stream.forEach(s -> contentBuilder.append(s).append("\n"));
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(contentBuilder.toString());
ByteArrayInputStream bis = new ByteArrayInputStream(contentBuilder.toString().getBytes());
繼續閱讀
廣告聯播
2018年12月7日 星期五
[Solved] DocumentBuilder parse XML returns null <解決 org.w3c.dom.Document 解析 XML 檔回傳值均為 NULL>
From: Polin Wei
Document 解析 XML 檔案時, 解析的值總是為 NULL , 解決方法如下:
先把檔案用 StringBuilder 變成字串後, 再作解析就可以
2018年9月28日 星期五
Spring Boot Validating Form Input with i18n and FreeMarker
From: Polin Wei
build.gradle
(繼續閱讀...)
build.gradle
buildscript {
ext {
springBootVersion = '2.0.4.RELEASE'
jjwtVersion = '0.9.0'
findbugsVersion='3.0.1'
bootstrapVersion = '3.3.7'
jqueryVersion = '3.3.1'
vueVersion ='2.5.13'
fontawesomeVersion = '5.2.0'
jspapiVersion = '2.3.3'
}
repositories {
mavenCentral()
}
dependencies {
classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
}
}
/*
* 在這個段落中你可以聲明使用哪些外掛程式
* apply plugin: 'java' 代表這是一個Java專案,需要使用java外掛程式
* 如果想生成一個 `Intellij IDEA` 的工程,類似的如果要生成
* eclipse工程,就寫 apply plugin: 'eclipse'
* 同樣的我們要學的是Spring Boot,所以應用Spring Boot外掛程式
*/
apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
// 在這個段落中你可以聲明編譯後的Jar檔資訊
bootJar {
baseName = 'myspring'
group = 'com.polinwei'
version = '0.0.1-SNAPSHOT'
}
// 在這個段落中你可以聲明原始檔案和目標編譯後的Java版本相容性
sourceCompatibility = 1.8
targetCompatibility = 1.8
// 在這個段落中你可以聲明在哪裡可以找到你的項目依賴
repositories {
mavenCentral()
maven { url "https://repo.spring.io/snapshot" }
maven { url "https://repo.spring.io/milestone" }
maven { url "https://code.lds.org/nexus/content/groups/main-repo"}
maven { url "http://maven.aliyun.com/nexus/content/repositories/central"}
}
dependencies {
compile("org.springframework.boot:spring-boot-starter-data-jpa")
compile("org.springframework.boot:spring-boot-starter-thymeleaf")
compile("org.springframework.boot:spring-boot-starter-freemarker")
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.boot:spring-boot-starter-security")
compile("org.springframework.security:spring-security-taglibs")
compile("org.springframework.boot:spring-boot-devtools") // Class 程式有更改時, 自動重啟
compile("org.hibernate.validator:hibernate-validator") //驗證
compile("javax.servlet.jsp:javax.servlet.jsp-api:${jspapiVersion}")
compile("org.springframework.session:spring-session-data-redis")
compile("org.springframework.boot:spring-boot-starter-data-redis")
runtime("mysql:mysql-connector-java")
compileOnly("org.projectlombok:lombok")
compile("com.maxmind.geoip2:geoip2:2.12.0")
compile("io.jsonwebtoken:jjwt:${jjwtVersion}")
compile("com.google.code.findbugs:findbugs:${findbugsVersion}")
compile("org.webjars:bootstrap:${bootstrapVersion}")
compile("org.webjars:jquery:${jqueryVersion}")
compile("org.webjars:vue:${vueVersion}")
compile("org.webjars:font-awesome:${fontawesomeVersion}")
compile("org.webjars.bowergithub.lipis:flag-icon-css:3.1.0")
compileOnly("org.springframework.boot:spring-boot-configuration-processor")
testCompile("org.springframework.boot:spring-boot-starter-test")
testCompile("org.springframework.security:spring-security-test")
}
model: Authority.java/**
* Authority generated by hbm2java
*/
@Entity
@Table(name = "authority", uniqueConstraints = @UniqueConstraint(columnNames = "name"))
public class Authority implements java.io.Serializable {
private Long id;
private String name;
@Size(min=2, max=30 , message = "{Size}")
private String description;
private Set users = new HashSet(0);
public Authority() {
}
public Authority(String name, String description) {
this.name = name;
this.description = description;
}
public Authority(String name, String description, Set users) {
this.name = name;
this.description = description;
this.users = users;
}
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "id", unique = true, nullable = false)
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
@Column(name = "name", unique = true, nullable = false, length = 50)
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
@Column(name = "description", nullable = false, length = 100)
public String getDescription() {
return this.description;
}
public void setDescription(String description) {
this.description = description;
}
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "user_authority", joinColumns = {
@JoinColumn(name = "authority_id", nullable = false, updatable = false) }, inverseJoinColumns = {
@JoinColumn(name = "user_id", nullable = false, updatable = false) })
@JsonBackReference
public Set getUsers() {
return this.users;
}
public void setUsers(Set users) {
this.users = users;
}
}
Control: AuthorityController.java@Controller
@RequestMapping(path = "/security")
public class AuthorityController {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private AuthorityRepository authorityRepository;
public void init(Model model) {
model.addAttribute("programName", "Authority");
}
@RequestMapping("authority")
public String crudAuthority(Model model) {
init(model);
model.addAttribute("authority", new Authority());
model.addAttribute("authorityList",authorityRepository.findAll());
return "/security/authority";
}
/**
* Get Authority Role from id
* @param model
* @param id
* @return
*/
@RequestMapping(value= {"authorityEdit","authorityEdit/{id}"} , method = RequestMethod.GET)
public String crudAuthority(Model model, @PathVariable( required = false , name="id") Long id) {
init(model);
if (Objects.isNull(id)) {
model.addAttribute("authority", new Authority());
} else {
model.addAttribute("authority", authorityRepository.findById(id).get());
}
return "/security/authority";
}
/**
* Save Authority Role
* @param model
* @param authority
* @return
*/
@RequestMapping(value="authorityEdit" , method = RequestMethod.POST)
public String crudAuthority(Model model, @Valid Authority authority, BindingResult bindingResult) {
init(model);
if (bindingResult.hasErrors()) {
return "/security/authority";
}
authorityRepository.save(authority);
model.addAttribute("authority", new Authority());
return "/security/authority";
}
/**
* Delete Authority Role
* @param model
* @param id
* @return
*/
@RequestMapping(value="authorityDelete/{id}" , method = RequestMethod.GET)
public String authorityDelete(Model model, @PathVariable( required = true, name = "id") Long id) {
init(model);
authorityRepository.deleteById(id);
model.addAttribute("authority", new Authority());
return "/security/authority";
}
}
加入了@Valid注解 是為了實現JSR-303的驗證。(繼續閱讀...)
2018年9月18日 星期二
pdfmake 實現中文字支援,解決中文亂碼問題,以 DataTables 為例
From: Polin Wei
實現pdfmake使用中文本體主要就是編譯新的vfs_fonts.js代替原來vfs_fonts.js文檔引入到前端頁面中,為了編譯出新的字體文檔,下列是中文顯示的解決方法,供大家參考:
操作系統:Windows
操作步驟:
1. 安裝node.js
2. 下載pdfmake的源代碼、下載地址https://github.com/bpampuch/pdfmake
3. 在源代碼根目錄下安裝gulp:
打開cmd命令窗口,定位到源代碼根目錄,如:cd V:\pdfmake-master
4. 利用gulp打包字體ttf文檔到vfs_fonts.js文檔中
gulp安裝成功後,查看源代碼根目錄下的gulpfile.js,發現gulp編譯還依賴了很多其他的模塊,所以需要一一安裝,沒辦法所以得一一安裝:npm install webpack-stream、npm install gulp-uglify 等等
從本地 C:\Windows\Fonts 下拷貝一箇中文本體到D:\download\chrome\pdfmake-master\examples\fonts目錄下,並刪除fonts目錄下原來的ttf文檔,這裏有一個問題,中文本體都很大,囧。
請選了一個最小的字體上:標楷體-標準 ,這一步完成之後,字體打包生成的vfs_fonts.js會覆蓋源代碼根目錄的build目錄下的vfs_fonts.js文檔,這時需要將vfs_fonts.js拷貝到你的項目當中替換原來的vfs_fonts.js,並引用的html頁面中
(繼續閱讀...)
實現pdfmake使用中文本體主要就是編譯新的vfs_fonts.js代替原來vfs_fonts.js文檔引入到前端頁面中,為了編譯出新的字體文檔,下列是中文顯示的解決方法,供大家參考:
操作系統:Windows
操作步驟:
1. 安裝node.js
2. 下載pdfmake的源代碼、下載地址https://github.com/bpampuch/pdfmake
3. 在源代碼根目錄下安裝gulp:
打開cmd命令窗口,定位到源代碼根目錄,如:cd V:\pdfmake-master
npm install gulp
npm install -g gulp
npm i -g gulp-cli
執行gulp -v顯示gulp版本號則説明安裝成功4. 利用gulp打包字體ttf文檔到vfs_fonts.js文檔中
gulp安裝成功後,查看源代碼根目錄下的gulpfile.js,發現gulp編譯還依賴了很多其他的模塊,所以需要一一安裝,沒辦法所以得一一安裝:npm install webpack-stream、npm install gulp-uglify 等等
V:\pdfmake-master>npm i -g gulp-cli
V:\node-v8.12.0-win-x64\gulp -> V:\node-v8.12.0-win-x64\node_modules\gulp-cli\bin\gulp.js
+ gulp-cli@2.0.1
added 235 packages from 147 contributors in 6.71s
V:\pdfmake-master>gulp buildFonts
[13:48:16] Using gulpfile V:\pdfmake-master\gulpfile.js
[13:48:16] Starting 'buildFonts'...
[13:48:17] Finished 'buildFonts' after 382 ms
從本地 C:\Windows\Fonts 下拷貝一箇中文本體到D:\download\chrome\pdfmake-master\examples\fonts目錄下,並刪除fonts目錄下原來的ttf文檔,這裏有一個問題,中文本體都很大,囧。
請選了一個最小的字體上:標楷體-標準 ,這一步完成之後,字體打包生成的vfs_fonts.js會覆蓋源代碼根目錄的build目錄下的vfs_fonts.js文檔,這時需要將vfs_fonts.js拷貝到你的項目當中替換原來的vfs_fonts.js,並引用的html頁面中
(繼續閱讀...)
2018年8月29日 星期三
SpringBoot + SpringSecurity + Freemarker 頁面中使用 security 標籤
From: Polin Wei
SpringBoot+SpringSecurity+Freemarker專案中在頁面上使用security標籤控制按鈕顯示隱藏達到對按鈕級許可權控制還是比較方便的,如下配置即可。
1. gradle 引入依賴
2. 依賴引入後到spring-security-taglibs包中META-INF下security.tld複製出來,放到/resources/static下,最後建一個目錄tags,如下:
(繼續閱讀...)
SpringBoot+SpringSecurity+Freemarker專案中在頁面上使用security標籤控制按鈕顯示隱藏達到對按鈕級許可權控制還是比較方便的,如下配置即可。
1. gradle 引入依賴
dependencies {
compile("org.springframework.security:spring-security-taglibs")
compile("javax.servlet.jsp:javax.servlet.jsp-api:2.3.3")
}
2. 依賴引入後到spring-security-taglibs包中META-INF下security.tld複製出來,放到/resources/static下,最後建一個目錄tags,如下:

3. 建一個配置類
@Configuration
public class MvcConfig implements WebMvcConfigurer {
@Autowired
FreeMarkerConfigurer freeMarkerConfigurer;
/**
*
* 加入 spring-security-taglibs 對 FreeMarker 的支援
*/
@PostConstruct
public void freeMarkerConfigurer() {
List tlds = new ArrayList();
tlds.add("/static/tags/security.tld");
TaglibFactory taglibFactory = freeMarkerConfigurer.getTaglibFactory();
taglibFactory.setClasspathTlds(tlds);
if(taglibFactory.getObjectWrapper() == null) {
taglibFactory.setObjectWrapper(freeMarkerConfigurer.getConfiguration().getObjectWrapper());
}
}
}
4. 在freemarker頁面頂部引入標籤
<#assign security=JspTaglibs["http://www.springframework.org/security/tags"] />
(繼續閱讀...)
2018年8月10日 星期五
使用 highlight.js 讓 pixnet 顯示程式碼
From: Polin Wei
除了 痞客邦 PIXNET 使用 Syntax Highlighter 顯示程式碼 以外, 也可以使用 highlight.js 來讓 pixnet 顯示程式碼
在後台管理的 側欄管理, 選擇 頁尾描述加入
除了 痞客邦 PIXNET 使用 Syntax Highlighter 顯示程式碼 以外, 也可以使用 highlight.js 來讓 pixnet 顯示程式碼
在後台管理的 側欄管理, 選擇 頁尾描述加入
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/languages/go.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
日後要展示程式碼的部分,先在撰寫貼上程式碼,轉到原始碼模式,用
使用 highlight.js 讓 blogger 顯示程式碼
From: Polin Wei
在 Blogger 後台, 選 主題 然後按 編輯HTML, 在<head>...</head>
中增加
日後要展示程式碼的部分,先在撰寫貼上程式碼,轉到HTML模式,用
在 Blogger 後台, 選 主題 然後按 編輯HTML, 在<head>...</head>
中增加
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/default.min.css"/>
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
日後要展示程式碼的部分,先在撰寫貼上程式碼,轉到HTML模式,用
<pre><code class="html">...</code></pre>
把程式碼包起來。Create a Multi Language web application with Spring Boot & FreeMarker
From: Polin Wei
Spring Boot + Freemarker 多語言國際化的作法
1. 在 application.properties 增加
Spring Boot + Freemarker 多語言國際化的作法
1. 在 application.properties 增加
# ===============================
# Multi Language
# ===============================
spring.messages.basename=i18n/messages
2.Control file: MainController.class
@Controller
public class MainController {
@RequestMapping(value = { "/","/home" })
public String staticResource(Model model) {
return "home";
}
}
訂閱:
文章 (Atom)
-
From: Polin Wei Hyperion Interactive Reporting 是 Oracle BI (Business Intelligence Suite Enterprise Edition Plus)系統中的模組之一,它可以輕鬆的幫你製作 Repo...
-
From: Polin Wei 現在的即時通訊 MSN 、Skype ... 等工具,都具備有檔案傳輸的功能,小檔案或許沒問題,但若要傳個 10M 以上的檔,那連用 E-Mail 寄送可能都會無法達成。 可以嚐試在自己電腦中架設 FTP Server ( FTP 伺服器)...
-
From: Polin Wei 環境: OS: Windows Server 2k3 + SP2 DB: Oracle XE Hyperion : 9.3.1 step 01: 準備 Windows Server 作業平台 將 Windows Server 2k3 + SP2 依...