$tomcat_home/conf/web.xml,當各別的web apps有在自己的web.xml設定會優先於global預設的!
$tomcat_home/conf/web.xml,當各別的web apps有在自己的web.xml設定會優先於global預設的!
public class ClientTest {
private static final int PORT = 8009;
private static final int TIMEOUT = 2000;
Server server;
Thread serverThread;
@Before
public void createServer() throws Exception {
try {
server = new Server(PORT, TIMEOUT);
serverThread = new Thread(server);
serverThread.start();
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
@After
public void shutdownServer() throws InterruptedException {
if (server != null) {
server.stopProcessing();
serverThread.join();
}
}
class TrivialClient implements Runnable {
int clientNumber;
TrivialClient(int clientNumber) {
this.clientNumber = clientNumber;
}
public void run() {
try {
connectSendReceive(clientNumber);
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Test(timeout = 10000)
public void shouldRunInUnder10Seconds() throws Exception {
Thread[] threads = new Thread[10];
for (int i = 0; i < threads.length; ++i) {
threads[i] = new Thread(new TrivialClient(i));
threads[i].start();
}
for (int i = 0; i < threads.length; ++i) {
threads[i].join();
}
}
private void connectSendReceive(int i) throws IOException {
System.out.printf("Client %2d: connecting\n", i);
Socket socket = new Socket("localhost", PORT);
System.out.printf("Client %2d: sending message\n", i);
MessageUtils.sendMessage(socket, Integer.toString(i));
System.out.printf("Client %2d: getting reply\n", i);
MessageUtils.getMessage(socket);
System.out.printf("Client %2d: finished\n", i);
socket.close();
}
}
private final String firstName;
...
public String getFirstName() {
return firstName;
}
...private SearchCriteria(Builder builder){
public static class Builder {
private String firstName;
...
public SearchCriteria firstName(String firstName) { this.firstName = firstName; return this; }
...
public SearchCriteria build() { return new ( this ); }
}
SearchCriteria 物件在生成後沒有人可以動到它內部的屬性,可達想要的immutable物件
的特性(如:thread safe 等等),
其次在於如果constructor 有多個參數要設定,其中又有幾個是可有可無,這種建構子會
很多,整個class會落落長(台語,很多很長的意思),
Pattern的好處就是同樣達到目地,但可以漂亮又有彈性的達成,在維護和擴充上都有幫助。
補充說明:Builder 的設值只會更改 Builder 的內容, SearchCriteria 這個物件直到
Builder的build() 執行後才產生,所以它生出來的是 immutable !
這個知識本來從沒聽過,在換工作後,和高手一起工作時,經過他的提點再自己google
仔細了解才體會這個pattern !
原本以為真的是天選之人,就算先前家裡兩個小孩都確診都逃過了(可能有中獎但無症狀吧),不過就在2023年六月18日破解自認為天選之人的"心態",為什麼可以確認就是這天中獎的呢?因為在前都是居家上班,到人多的室內場所都會戴口罩,就剛好這天傍晚原本只想說要去附近的國...