程式狂想筆記

一個攻城師奮鬥史

0%

Java 雜記

TODO: 尚未整理完成

The 2020 Java Developer RoadMap

Top 20 Libraries and APIs Java Developer should know

Exception

Java筆記 — Exception 與 Error - Carl - Medium

io close

Java:浅谈InputStream的close方法 - 白羊沈歌 - 博客园
Java OutputStream.close()关闭并释放输出流资源

Snailclimb/JavaGuide: 【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。

Memory-mapped File

Java中Stream和Memory-mapped File的I/O性能对比 - Xavier’s Blog

stack /heap 記憶體相關

(1) Java技術與認證交流平台

Java Web

Session

spring core

介绍 | 走心的Java Web入门开发教程
開源框架: Spring Gossip
ApplicationContext 与 BeanFactory 区别 - 掘金
Spring Container | securenai SITE

Spring第一篇【介绍Spring、引入Spring、Spring六大模块】 - 掘金

什么是面向切面编程AOP? - 知乎

Spring|@Autowired与new的区别 - 无聊的三文鸡 - 博客园

autowired 動態

java - how to use ‘@Qualifier’ dynamically specifying parameters? - Stack Overflow
spring - 如何使用运行时“限定符”变量动态注入服务? - IT工具网

autowired 常見錯誤
Autowired · Brian的雜記

@Autowired和static的关系 - 左手程序,右手诗 - 博客园

Class

com.google.gson.annotations.Expose
GSON
《Android》『JSON & GSON』- GSON 的基本程式語法教學 (下) - 賽肥膩膩の食旅生活誌

JAVA IO
無邊界的想像力: Java SE 入門教學 - IO 流
java读取文件API速度对比_Java_fengxingzhe001的专栏-CSDN博客
Java讀取寫出檔案FileReader和FileWriter | CYL菜鳥攻略 - 點部落

java.io.BufferedWriter
java.io.ByteArrayOutputStream
java.io.FileInputStream
java.io.FileOutputStream
java.io.IOException
java.io.PrintWriter
java.io.Serializable
java.io.Writer
java.io.File

要曲檔名 file.getName
路徑 file.getPath 會包含檔名

要怎麼曲資料夾路徑
java - How do I get a file’s directory using the File object? - Stack Overflow

File.getParent() 可能會抓到 null

1
2
File file = new File("test.txt");
String parent = file.getParent();

所以推薦

1
parent = file.getAbsoluteFile().getParent();

Path

Java NIO之擁抱Path和Files | 程式前沿

1
2
3
4
File file = new File("C:/my.ini");
Path p1 = file.toPath();
p1.toFile();
file.toURI();

MATH
java.math.BigDecimal

ip
java.net.InetAddress

InetAddress (Java Platform SE 7 )
InetAddress 類別
利用Java獲得IP地址 @ Java 咖啡 :: 隨意窩 Xuite日誌

處理時間格式
java.text.SimpleDateFormat
Java:日期時間格式化輸出入處理:Date、Calendar、SimpleDateFormat @ 符碼記憶

java.util
Contains the collections framework, legacy collection classes, event model, date and time facilities, internationalization, and miscellaneous utility classes (a string tokenizer, a random-number generator, and a bit array).

java.util.ArrayList
java.util.Calendar
java.util.Collections
java.util.Date
java.util.HashMap
java.util.HashSet
java.util.LinkedHashMap
java.util.List
java.util.Map
java.util.Set
java.util.UUID

javax.crypto.IllegalBlockSizeException
JAVA实现AES加密-云栖社区-阿里云

javax.persistence
Java Persistence is the API for the management for persistence and object/relational mapping.

javax.persistence.Column
javax.persistence.Entity
javax.persistence.FetchType
javax.persistence.GeneratedValue
javax.persistence.GenerationType
javax.persistence.Id
javax.persistence.JoinColumn
javax.persistence.ManyToOne
javax.persistence.SequenceGenerator
javax.persistence.Table
javax.persistence.Temporal
javax.persistence.TemporalType

javax.servlet.http.HttpServletRequest
javax.servlet.http.HttpServletResponse

net.sf.json.JSONObject
JSON用法—net.sf.json.JSONObject_Java_午夜阳光-CSDN博客

org.apache.commons.io.FileUtils
org.apache.commons.io.FileUtils 详解Java蚩尤后裔-CSDN博客
Apache Commons工具集简介 - 坚持学习 - ITeye博客

org.apache.commons.lang.builder.ToStringBuilder
org.apache.commons.lang.builder.ToStringStyle
org.apache.commons.lang.StringUtils
Commons Lang使用ToStringBuilder - 就是愛Java
[Java基础]StringUtils.join()方法与String.join()方法的使用_Java_YuanMxy’Home-CSDN博客

org.apache.commons.io.IOUtils
java - Should I close the InputStream of org.apache.commons.io.IOUtils - Stack Overflow

Javalogy–Java的學習筆記: Commons Logging
org.apache.commons.logging.Log
org.apache.commons.logging.LogFactory
org.apache.log4j.Logger

Apache POI超鏈接 - POI基礎教程
org.apache.poi.ss.usermodel.Row
org.apache.poi.xssf.usermodel.XSSFRow
org.apache.poi.xssf.usermodel.XSSFSheet
org.apache.poi.xssf.usermodel.XSSFWorkbook

org.hibernate.Query
第二個 Hibernate

org.junit.runner.RunWith
org.junit.Test
JUnit 5和JUnit 4比较_Java_javaZhong的博客-CSDN博客
使用 JUnit 4.x

org.springframework.beans.BeanUtils
Spring 中的BeanUtils与apache中的BeanUtils差别_Java_langqiao123的专栏-CSDN博客

org.springframework.beans.factory.annotation.Autowired
IoC - Annotation (@Autowired) - 史帝芬心得筆記

org.springframework.beans.factory.annotation.Qualifier
详解@Autowired、@Qualifier和@Required_Java_Benjamin-CSDN博客

org.springframework.context.support.AbstractApplicationContext
org.springframework.context.support.ClassPathXmlApplicationContext
Spring 入门学习二之IOC - 个人文章 - SegmentFault 思否

org.springframework.stereotype.Repository

org.springframework.stereotype.Service
SSM简单整合教程&测试事务 - 东北小狐狸 - 博客园
Day 8 Spring MVC-@Service的使用 - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天

org.springframework.test.context.ContextConfiguration
Sprin g整合 JUnit4 测试时,使用 @ContextConfiguration 注解引入多个配置文件_Java_HeatDeath的博客-CSDN博客

org.springframework.test.context.junit4.SpringJUnit4ClassRunner
org.springframework.transaction.annotation.Propagation
Spring中@Transactional用法詳細介紹 | 程式前沿

org.springframework.transaction.annotation.Transactional
框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习) - 小不点啊 - 博客园
透彻的掌握 Spring 中@transactional 的使用

org.springframework.web.bind.ServletRequestUtils
Spring中好用的工具类 - 作业部落 Cmd Markdown 编辑阅读器

Calendar
為什麼不建議使用Date,而是使用Java8新的時間和日期API? - IT閱讀

Struts

詳細教學

Struts2第二篇【开发步骤、执行流程、struts - 掘金
Struts2第三篇【Action开发方式、通配符、Struts常量、跳转全局视图、action节点默认配置】 - 掘金
Spring第四篇【Intellij idea环境下、Struts2和Spring整合】 - 掘金
Struts2第五篇【类型转换器、全局、局部类型转换器】 - 掘金
Struts2第六篇【文件上传和下载】 - 掘金
Struts2第七篇【介绍拦截器、自定义拦截器、执行流程、应用】 - 掘金
Struts第八篇【资源国际化、对比JSP的资源国际化】 - 掘金
Struts2第九篇【OGNL、valueStack详解】 - 掘金
Struts2第十一篇【简单UI标签、数据回显】 - 掘金
Struts2第十二篇【模型驱动】 - 掘金
Struts2第十三篇【防止表单重复提交拦截器】 - 掘金

Struts2入门这一篇就够了 - 掘金

Struts2的配置 struts.xml Action詳解 | 程式前沿

數據封裝

struts2 最近使用發現他在表單傳送 input 值真的很方便
只要對 Java 做 getXxxx , setXxxx (動態) 就能做很多設定
後來查到這名詞是數據封裝
有很多種方式很已做到
詳細如:struts2(二) 表单参数自动封装和参数类型自动转换 - 漂泊在外的程序员老王 - 博客园

struts2转换器详解_Java_xtayfjpk的专栏-CSDN博客

struts.xml

最佳程式路徑

曾經第一次接觸使用 strut2
我常用 XML 設定如下

1
2
3
4
5
6
7
8
9
<package name="vvvv" namespace="/vvvv" extends="struts-default">
<action name="insertStock" method="doInsertStock" class="vvvv.action.Stock">
<result name="success">/vvvv/pages/stock_update.jsp</result>
<result name="error">/vvvv/pages/stock_insert.jsp</result>
</action>
<action name="addStock" method="doAddStock" class="vvvv.action.Stock">
<result name="success">/vvvv/pages/stock_insert.jsp</result>
</action>
...

通常一個 class 跟 method 對應一個設定
但我發現 xml 的 action method 設定不一定要放(預設是 execute)
每一個 method 不一定需要設定 不一定要放多個 tag 如範例
只要設定一個 action 就能做到了
可參考下面設定

1
2
3
4
5
<action name="oooo" class="com.oooo.action.XxxxAction">
<result name="success">/ooooo/oooo/success.jsp</result>
<result name="list">/ooooo/oooo/query.jsp</result>
<result name="edit">/ooooo/oooo/edit.jsp</result>
</action>

其他,看到優良設定

1
2
3
4
5
6
<package name="user" namespace="/" extends="struts-default"> 
<action name="*user" class="com.zzjmay.action.VaildateAction" method="{1}">
<result name="success">/success.jsp</result>
<result name="input">/{1}.jsp</result>
</action>
</package>

  1. name:邏輯上的包名
  2. namespace:名稱空間,用來區分同意struts下的相同action(注意是一種邏輯上的的路徑)
  3. extends: 繼承某個配置檔案
  4. abstract
  5. name:Action類的對映名稱
  6. class:Action類的完整路徑
  7. method:預設使用的execute()方法,如果要自定義觸發方法,需要使用method自定義

Struts2的配置 struts.xml Action詳解 | 程式前沿

還有更彈性設定

1
2
3
<action name="user_*_*" method="user{2}" class="com.gopain.{1}">
<result name="type_{2}">/{2}_page.jsp</result>
</action>

假如請求為,user_UserAction_login(不考慮namespace),其中 action中{1} 為UserAction,{2}為login,此請求會執行com.gopain.UserAction$userlogin().如果返回值為」type_login「,則會跳轉到login_page.jsp頁面。

此處只是舉例,站點不宜這樣配置請求。但是對於action的name配置很實用,不要奢望一個action配置完整個站點(雖然也可以實現,而且對於訪問沒有太多影響),十分不利於管理。
————————————————
版权声明:本文为CSDN博主「gopain」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gopain/java/article/details/40790523

參考:[Struts2] 配置文件struts.xml和web.xml詳解_網絡_gopain-CSDN博客

管理上還請斟酌,不過用第二個方法就很方便了

與 spring 設定

struts2默认拦截器之autowiring_Java_shendeguang的专栏-CSDN博客

action 到 jsp 傳值

struts2中action传值到jsp页面的3种方法 - 开源中国首席吊炸天的个人空间 - OSCHINA

struts2 錯誤處理

起風前的相遇: Struts2 處理404錯誤的方法

攔截器

JSON 設定

1
2
3
4
5
6
7
<package name="default" namespace="/" extends="json-default">
<global-results>
<result name="dataResult" type="json">
<!-- <param name="root">jsonresult_var</param> 針對 action 的 變數當 json 的 root
<param name="contentType">text/json</param> -->
</result>
....

參考:Struts2和JSON實例 - Struts2教學

更多設定可參考
JSON plugin

下載檔案

1
2
3
4
5
6
<result name="download" type="stream">
<param name="contentType">application/octet-stream</param>
<param name="inputName">fileStream</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="bufferSize">1024</param>
</result>

在上述配置代碼中,分別通過 stream 結果類型的屬性設置了所要下載文件的類型、名稱和輸入流。其中 ${filename} 表示在項目運行時,將 action 中的 filename 屬性動態地填充在 ${} 中間部分,這樣就可以動態地獲取所要下載的文件名稱。

通常上述關係,會做 setFileName(xxx)

參考:Struts2文件下载实例

移除 url .action

在 struts.xml 加入 tag 可以解決這個問題

1
2
3
<struts>
<constant name="struts.action.extension" value=""/>
</struts>

不過我發現預設是 ,,action ,代表.action 跟空白也可以使用
上述詳細教學第三章有提到

java - Struts 2 - Removing action from url - Stack Overflow
如何刪除Struts2動作的後綴擴展名 - Struts2教學

Hibernate

Hibernate第一篇【介绍Hibernate,简述ORM,快速入门】 - 掘金
Hibernate第二篇【API讲解、执行流程图】 - 掘金
Hibernate第三篇【主配置文件、映射文件、复合主键映射】 - 掘金
Hibernate第五篇【inverse、cascade属性详解】 - 掘金
Hibernate第六篇【多对多映射、一对一映射】 - 掘金
Hibernate第七篇【对象状态、一级缓存】 - 掘金
Hibernate第八篇【懒加载】 - 掘金
Hibernate第九篇【组件映射、继承映射】 - 掘金
Hibernate第十篇【Hibernate查询详解、分页查询】 - 掘金
Hibernate第十一篇【配置C3P0数据库连接池、线程Session】 - 掘金
Hibernate第十二篇【二级缓存介绍、缓存策略、查询缓存、集合缓存】 - 掘金

Hibernate占位符问题[use named parameters or JPA-style positional parameters instead.]

Hibernate占位符问题[use named parameters or JPA-style positional parameters instead.]Java鹏霄万里展雄飞-CSDN博客

OpenSessionInViewFilter

其他為整理

thymeleaf的下拉框(select option)回显选中Java皮皮鹏的博客-CSDN博客
Struts2 和 springMVC 的區別 - IT閱讀
Struts2 Spring Hibernate的工作流程及原理(整理的) | 程式前沿
Struts2下載文件實例 - Struts2基礎教程
Java : How to generate serialVersionUID – Mkyong.com
关于tomcat WEB-INF/lib下类加载顺序 - 四少啊 - 博客园
struts2對json的支持 - IT閱讀
SpringApplication你不知道的那些事! - 掘金
菜鳥工程師 肉豬: Spring @Configuration作用
IoC - Annotation (@Configuration) - 史帝芬心得筆記
菜鳥工程師 肉豬: Spring Boot properties file value injection 屬性配置檔注入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
@SpringBootApplication
@PropertySource(
value = { "classpath:my-messages.properties", "classpath:other-messages.properties" },
ignoreResourceNotFound = true,
encoding = "UTF-8"
)
public class DemoApplication {
public static void main(String[] args) {
ApplicationContext appCtx = SpringApplication.run(DemoApplication.class, args);

MyMessages myMessages = appCtx.getBean(MyMessages.class);
OtherMessages otherMessages = appCtx.getBean(OtherMessages.class);

myMessages.printPropertiesValue();

System.out.println("-----------------------");

otherMessages.printPropertiesValue();
}

}

Spring Boot Bean和依赖注入 - Spring Boot教程™
Springboot2教程:@SpringBootApplication自动配置-Java知音
整合Spring时Service层为什么不做全局包扫描详解_慕课手记
用最简单的语言来告诉你:SpringMVC中@Controller,@Service,@repository,@Component的用法 - HelloJava菜鸟社区
构建工具的进化:ant, maven, gradle - 知乎
给女朋友讲解什么是代理模式
解决错误The type List is not generic; it cannot be parameterized with arguments Java瓜爪牛的博客-CSDN博客

Annotation

Java注解(Annotation)原理详解Java心中要有一片海的专栏-CSDN博客
Java:Annotation(注解)–原理到案例 - 簡書
关于Java的Retention元注解 - 摆渡者 - OSCHINA
Java 注解之 元注解 - 知乎 備份圖
裡面講的還滿細的!!

JAXRS

jersey - Difference between JAX-RS and Spring Rest - Stack Overflow

Spring MVC与JAX-RS比较与分析 - InfoQ

spring version
2. New Features and Enhancements in Spring 3.0
[JAVA_Spring]Spring 3.2.2的各類jar說明 @ 程式開發學習之路 :: 痞客邦 ::
Blog of Bruce: Hibernate 4.x 整合 Spring 3.x

Spring:3大核心版本簡介、maven與Spring4構建工程、代碼實戰 - 每日頭條
Spring4新特性——Web开发的增强 - 《亿级流量网站架构核心技术》~ - ITeye博客
Spring 5.x 新特性 - 掘金

SLF4J

SLF4J使用和与Log4J对比 - 簡書

java class list

reflection - Java - Get a list of all Classes loaded in the JVM - Stack Overflow

JAVA_OPTS=”$JAVA_OPTS -verbose:class”

ejb

語言技術: EJB3 Gossip
[轉] EJB 3和Spring技術體系比較 - yjmyzz @ IT工程師數位筆記本 :: 痞客邦 ::
簡單鋪設Enterprise Java Bean(EJB)的架構 @ 資訊迴圈 :: 隨意窩 Xuite日誌

1
2
3
java ee基本是在企業裡用的,你編程以前,要配置一大堆xml這樣子,很可能會是javaee
java se基本都用在學校,教學,科學實驗這些,配置個maven就了不起了
java me就是沒人用的那些...

java ee , java se, java me 怎麼區分? - 知乎
Spring 上課筆記 (2) | Leo Yeh’s Blog

sitemesh

SiteMesh初體驗 @ Jemmy Walker :: 痞客邦 ::
java - SiteMesh - still active? v2 vs v3? - Stack Overflow
[页面模板框架对比] Apache Tiles VS Sitemesh_Java_孤天浪雨-CSDN博客
Struts2 使用SiteMesh做网页布局 - Jersey - 博客园

JNDI

Spring / Hibernate / JUnit - No Hibernate Session bound to Thread - Stack Overflow

放棄思考: JNDI + Derby + TomEE Plus 教學

ReflectionToStringBuilder

ReflectionToStringBuilder用法优缺点及一个问题和分享_Darrensty的博客-CSDN博客_reflectiontostringbuilder

Pretty-Print JSON in Java

GSON

1
2
3
4
Gson gson = new GsonBuilder().setPrettyPrinting().create();
JsonParser jp = new JsonParser();
JsonElement je = jp.parse(uglyJSONString);
String prettyJsonString = gson.toJson(je);

存 Java

1
2
JSONObject json = new JSONObject(jsonString); // Convert text to object
System.out.println(json.toString(4)); // Print it with specified indentation

抓取檔案位置

抓取編譯檔案

1
getClass().getClassLoader().getResource("main/resources/simple/xxx.xlsx").getFile();

讀取程式執行路徑

1

1
2
return new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation()
.toURI()).getPath();

java - How to get the path of a running JAR file? - Stack Overflow

Procedure

RxJava2+ Retrofit2

java web中po 和dto之间的使用 - 的回答 - SegmentFault 思否
项目结构介绍-博客
PO BO VO DTO POJO DAO 概念及其作用(附转换图)
数据模型 - 阿里规约(1) | Ironbin

基礎於:Java、Amazon AWS,進行:開發,測試,佈署(Code / Infra),維運。
Spring MVC Framework的Servlet Container 應用服務開發。
Vert.X 或 Micronaut 的微服務Microservices開發。
The Reactive Manifesto的Reactive Friendly程式撰寫風格(Plus)。

基礎於:Java、Amazon AWS,進行:開發,測試,佈署(Code / Infra),維運。
Spring MVC Framework的Servlet Container 應用服務開發。
Vert.X 或 Micronaut 的微服務Microservices開發。
Apache Kafka的事件及訊息驅動應用開發。
The Reactive Manifesto的Reactive Friendly程式撰寫風格(Plus)。
Cloudformation 腳本撰寫。
懂或有意願學習:Jenkins + CodePipeline 腳本撰寫經驗。
協助導入及實作AWS及On Premises 混合雲