Monthly Archives: 2月 2017

「Java入門」マルチスレッドで排他制御Lockの使い方

Javaコード:
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class LockDemo {
public static void main(String[] args) {
final Ljout output = new Ljout();
new Thread() {
public void run() {
output.output(“thread1 is running”);
};
}.start();
new Thread() {
public void run() {
output.output(“thread2 is running”);
};
}.start();
}

}
class Ljout {
private Lock lockObj = new ReentrantLock();
public void output(String name) {
lockObj.lock();
try {
for (int i = 0; i < name.length(); i++) {
System.out.print(name.charAt(i));
}
System.out.println(“\n”);
} finally {
lockObj.unlock();
}
}
}
実行結果:
thread1 is running

thread2 is running

jQuery入門-$.each()の使い方

コード1:
$.each([ 34, 56 ], function( index, value ) {
alert( index + “: ” + value );
});
実行結果:
0: 34
1: 56
コード2:
var obj = {
“sex”: “male”,
“age”: “32”
};
$.each( obj, function( key, value ) {
alert( key + “: ” + value );
});
実行結果:
sex: male
age: 32

「Java入門」定数を保持するEnumデータの使い方

Javaコード:
public enum EnumStation {
SHINA(“大井町”), KANAGA(“川崎”),SATA(“西川口”);
private String strCourse;

public String getContext() {
return strCourse;
}

private EnumStation(String context) {
this.strCourse = context;
}

public static void main(String[] args) {
for (EnumStation name : EnumStation.values()) {
System.out.println(name + ” : ” + name.getContext());
}
System.out.println(EnumStation.SATA.getDeclaringClass());
}

実行結果:
SHINA : 大井町
KANAGA : 川崎
SATA : 西川口
class EnumStation

「Spring開発」xmlでを設定してBeanにプロパティを注入する方法

1.Book.java
import java.util.Map;
public class Book {
private String title;
private Map<String, String> pubInfo;
public Map<String, String> getpubInfo() {
return pubInfo;
}
public void setpubInfo(Map<String, String> pubInfo) {
this.pubInfo = pubInfo;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
}
2.spring-beans.xml
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd”>
<bean id=”book” class=”Book”>
<property name=”title” value=”Spring MVC開発”/>
<property name=”pubInfo”>
<map>
<entry key=”1″ value=”山田” />
<entry key=”2″ value=”鈴木”/>
<entry key=”3″ value=”北村” />
</map>
</property>
</bean>
</beans>

3.mainメソッド
import java.util.Map;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class BookPubInfo {

@SuppressWarnings(“resource”)
public static void main(String[] args) {
ApplicationContext appContext = new ClassPathXmlApplicationContext(new String[] {“spring-beans.xml”});
Book book= (Book)appContext.getBean(“book”);
System.out.println(“本の名前:”);
System.out.println(book.getTitle());
Map<String, String> pubInfo = book.getpubInfo();

System.out.println(“筆者: “);
for(String key : pubInfo.keySet() ){
System.out.println(key + ” : “+(String)pubInfo.get(key));
}
}

}
実行結果:
本の名前:
Spring MVC開発
筆者:
1 : 山田
2 : 鈴木
3 : 北村

Spring+Hibernate+MySQLの連携を設定するファイルのサンプル

設定ファイル
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans”
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd”>
<!– C3P0 Poolのdatasourceを定義–>
<bean id=”dataSource” class=”com.mchange.v2.c3p0.ComboPooledDataSource”> <!– JDBCドライバを指定–>
<property name=”driverClass”>
<value>com.mysql.jdbc.Driver</value>
</property>
<!– DBに接続するURL –>
<property name=”jdbcUrl”>
<value>jdbc:mysql://localhost:3306/bookman?useUnicode=
true&characterEncoding=utf8</value>
</property>
<!– DBユーザ名 –>
<property name=”user”>
<value>sampleuser#01</value>
</property>
<!– DBパスワード –>
<property name=”password”>
<value>samplepwd#01</value>
</property>
<!– maxPoolSize –>
<property name=”maxPoolSize”>
<value>20</value>
</property>
<!– minPoolSize –>
<property name=”minPoolSize”>
<value>2</value>
</property>
<!– initialPoolSize –>
<property name=”initialPoolSize”>
<value>2</value>
</property>
<!– maxIdleTime –>
<property name=”maxIdleTime”>
<value>20</value>
</property>
</bean>
<!–HibernateのSessionFactoryを定義 –>
<bean id=”sessionFactory” class=”org.springframework.orm.hibernate3.LocalSessionFactoryBean”>
<!–dataSourceの参照設定 –>
<property name=”dataSource” ref=”dataSource” />
<!– HibernateのORMマッピングファイル –>
<property name=”mappingResources”>
<list>
<value>com/bookman/ORM/News.hbm.xml</value>
<value>com/eportal/ORM/Admin.hbm.xml</value>
<value>com/bookman/ORM/Memberlevel.hbm.xml</value>
</list>
</property>
<!– Hibernateのプロパティ –>
<property name=”hibernateProperties”>
<props>
<prop key=”hibernate.dialect”>org.hibernate.dialect.MySQLDialect</prop>
<!– 開発モードtrue –>
<prop key=”show_sql”>true</prop>
<!– 最大SQLパッチ数–>
<prop key=”hibernate.jdbc.batch_size”>50</prop>
<prop key=”show_sql”>50</prop>
</props>
</property>
</bean>
<!–トランザクション管理HibernateTransactionManager –>
<bean id=”transactionManager”
class=”org.springframework.orm.hibernate3.HibernateTransactionManager”> <!–sessionFactory依存性を定義 –>
<property name=”sessionFactory” ref=”sessionFactory” />
</bean>
<!–トランザクションインターセプターTransactionInterceptor –>
<bean id=”transactionInterceptor”
class=”org.springframework.transaction.interceptor.TransactionInterceptor”>
<property name=”transactionManager” ref=”transactionManager” />
<!– 制御タイプを定義–>
<property name=”transactionAttributes”>
<props>
<prop key=”browse*”>PROPAGATION_REQUIRED,readOnly</prop>
<prop key=”list*”>PROPAGATION_REQUIRED,readOnly</prop>
<prop key=”load*”>PROPAGATION_REQUIRED,readOnly</prop>
<prop key=”get*”>PROPAGATION_REQUIRED,readOnly</prop>
<prop key=”is*”>PROPAGATION_REQUIRED,readOnly</prop>
<prop key=”*”>PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
<!– BeanNameAutoProxyCreatorfでSpringトランザクションを管理 –>
<bean
class=”org.springframework.aop.framework.autoproxy.
BeanNameAutoProxyCreator”>
<!– listとvalueの設定 –>
<property name=”beanNames”>
<list>
<value>sampleService</value>
<value>xxxService</value>
</list>
</property>
<!– proxyTargetClass–>
<property name=”proxyTargetClass”>
<value>true</value>
</property>
<!– トランザクションインターセプターtransactionInterceptor –>
<property name=”interceptorNames”>
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<!– BaseDAOImpl –>
<bean id=”dao” class=”com.bookman.DAO.BaseDAOImpl”>
<property name=”sessionFactory” ref=”sessionFactory” />
</bean>
<!– SampleServiceImpl –>
<bean id=”sampleService” class=”com.bookman.service.SampleServiceImpl”> <property name=”dao” ref=”dao” />
</bean>
<!– SampleAction –>
<bean id=”sampleAction” class=”com.bookman.struts.action.
SampleAction”
scope=”prototype”>
<property name=”service” ref=”sampleService” />
</bean>
</beans>

Ubuntu 14.04にiptablesをインストールする

# whereis iptables #iptablesを検索
iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz #iptablesをインストールした

#apt-get install iptables #インストールしない場合、iptablesをインストール

# iptables -L #ファイアウォールの設定を確認
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination

# vi /etc/iptables.rules
次の内容を追加(80-http,3306-MySQL,22-SSH)
*filter
:INPUT DROP [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:syn-flood – [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state –state NEW -m tcp –dport 22 -j ACCEPT
-A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
-A INPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT
-A INPUT -p icmp -m limit –limit 100/sec –limit-burst 100 -j ACCEPT
-A INPUT -p icmp -m limit –limit 1/s –limit-burst 10 -j ACCEPT
-A INPUT -p tcp -m tcp –tcp-flags FIN,SYN,RST,ACK SYN -j syn-flood
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A syn-flood -p tcp -m limit –limit 3/sec –limit-burst 6 -j RETURN
-A syn-flood -j REJECT –reject-with icmp-port-unreachable
COMMIT

# iptables-restore < /etc/iptables.rules #ファイアウォールのルールが有効になる

# vi /etc/network/if-pre-up.d/iptables #自動起動
#!/bin/bash
iptables-restore < /etc/iptables.rules

# chmod +x /etc/network/if-pre-up.d/iptables #実行許可権限を追加

# iptables -L -n #ルールが有効かどうかを確認

CentOS のバージョンを確認する方法

# cat /etc/redhat-release
CentOS release 6.7 (Final)
アーキテクチャ(32bit, 64bit)を確認するコマンド
arch
# 64bitの場合
X86_64

# 32bitの場合
i686

「SpringMVC入門」例外をハンドリングする@ExceptionHandlerの書き方

1.内部exception(Controllerのみ)
@ExceptionHandler
public ModelAndView exceptionHandler(Exception ex){
ModelAndView mv = new ModelAndView(“error”);
mv.addObject(“exception”, ex);
System.out.println(“in testExceptionHandler”);
return mv;
}

@RequestMapping(“/error”)
public String error(){
int i = 7/0;
return “hello”;
}

2.global exceprion(全てのController)
@ControllerAdvice
public class testControllerAdvice {
@ExceptionHandler
public ModelAndView exceptionHandler(Exception ex){
ModelAndView mv = new ModelAndView(“error”);
mv.addObject(“exception”, ex);
System.out.println(“in testControllerAdvice”);
return mv;
}
}

3.設定ファイル
<!– configure SimpleMappingExceptionResolver –>
<bean class=”org.springframework.web.servlet.handler.SimpleMappingExceptionResolver”>
<property name=”exceptionMappings”>
<props>
<prop key=”java.lang.ArithmeticException”>error</prop>
</props>
</property>
</bean>

Spring MVC入門–ファイルをアップロードするメモ

1.必要なjar
commons-fileupload-1.3.1.jar
commons-io-2.4.jar

2.設定ファイル
<!– upload settings –>
<bean id=”multipartResolver” class=”org.springframework.web.multipart.commons.CommonsMultipartResolver”>
<property name=”maxUploadSize” value=”102400000″></property>
</bean>

3.アップロードコード
@RequestMapping(value=”/upload”,method=RequestMethod.POST)
public String upload(HttpServletRequest req) throws Exception{
MultipartHttpServletRequest strMps = (MultipartHttpServletRequest)req;
MultipartFile file = strMps.getFile(“file”);
String fileName = file.getOriginalFilename();
SimpleDateFormat sdf = new SimpleDateFormat(“yyyyMMddHHmmss”);
FileOutputStream fos = new FileOutputStream(req.getSession().getServletContext().getRealPath(“/”)+
“upload/”+sdf.format(new Date())+fileName.substring(fileName.lastIndexOf(‘.’)));
fos.write(file.getBytes());
fos.flush();
fos.close();

return “upss”;
}

4.formコード
<form action=”mvc/upload” method=”post” enctype=”multipart/form-data”>
<input type=”file” name=”file”><br>
<input type=”submit” value=”submit”>
</form>

SpringMVC入門-RESTful Web Serviceを作成するメモ

1.RestControllerコード
@Controller
@RequestMapping(“/rest”)
public class RestController {
@RequestMapping(value=”/user/{id}”,method=RequestMethod.GET)
public String get(@PathVariable(“id”) Integer id){
System.out.println(“get”+id);
return “/hello”;
}

@RequestMapping(value=”/user/{id}”,method=RequestMethod.POST)
public String post(@PathVariable(“id”) Integer id){
System.out.println(“post”+id);
return “/hello”;
}

@RequestMapping(value=”/user/{id}”,method=RequestMethod.PUT)
public String put(@PathVariable(“id”) Integer id){
System.out.println(“put”+id);
return “/hello”;
}

@RequestMapping(value=”/user/{id}”,method=RequestMethod.DELETE)
public String delete(@PathVariable(“id”) Integer id){
System.out.println(“delete”+id);
return “/hello”;
}

}

2.web.xmlの設定
formでputとdeleteリクエストを送信します。
<!– configure the HiddenHttpMethodFilter,convert the post method to put or delete –>
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

3.JSPコード
<form action=”rest/user/1″ method=”post”>
<input type=”hidden” name=”_method” value=”PUT”>
<input type=”submit” value=”put”>
</form>
<form action=”rest/user/1″ method=”post”>
<input type=”submit” value=”post”>
</form>
<form action=”rest/user/1″ method=”get”>
<input type=”submit” value=”get”>
</form>
<form action=”rest/user/1″ method=”post”>
<input type=”hidden” name=”_method” value=”DELETE”>
<input type=”submit” value=”delete”>
</form>