??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲第一福利视频,91网站在线免费观看,九色综合日本 http://www.aygfsteel.com/hxlistiancai/zh-cn Tue, 24 Jun 2025 23:26:12 GMT Tue, 24 Jun 2025 23:26:12 GMT 60 linux下用w3m上网的步?/title> http://www.aygfsteel.com/hxlistiancai/archive/2011/09/23/359364.htmlSoap MacTavish Soap MacTavish Fri, 23 Sep 2011 09:00:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/09/23/359364.html http://www.aygfsteel.com/hxlistiancai/comments/359364.html http://www.aygfsteel.com/hxlistiancai/archive/2011/09/23/359364.html#Feedback 1 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/359364.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/359364.html 使用w3m上网ҎQ?br /> W一步,需要安装一个名为w3m的Y件工P打开l端Q输入如下命?br /> sudo apt-get install w3m w3m-img -y W二步,安装好w3m之后Q在l端里面启动w3mQ打开一个网址Q比如w3m www.baidu.com 。现在是不是看到了只有在览器下面才能看到的癑ֺ首页呢? 如果您的l端不显CZ文请。安装zhcon。安装命令: sudo apt-get install zhcon -y 好了Q下面给出w3m的相兛_助文件?br /> 与vim常用命ovim常用命o集相|h,j,k,l 可以分别用来做移动键,分别是左Q下Q上Q右。如果你熟习vim操作的话q会是很方便的功能?< ?> 用来左右滚屏?br /> 按q׃提示你退出! 在需要输入的文本框内按回车,下面׃出现TEXT: Q这时你可以输入你要搜烦的文字。再按回车就是返回给文本框。这时再把光标移?#8221;癑ֺ搜烦”的那个按键,回RQ就可以开始搜索了Q?br /> 使用 U 来重新输入需要打开的网址?br /> B q回前一个页面?br /> 多标{操作! 可以使用 T 按键来打开一个新标签?br /> 在多个标{ֆ切换呢? 使用 { ?}可以了Q?br /> 使用 ESC-t 的话会打开标签的菜单让你选择Q功能类似系l中的alt-tab功能?br /> C-q用于关于当前标签c?br /> 书签 C-a d书签 C-b 查看书签 查找 / 向后查找当前面 ? 向前查找当前面 n 查找下一个已查找q的关键?br /> N 向前查找已查找过的关键字 帮助 H 以上的选项在这里都可以看到Q?/div> ]]> SWT-多线E? http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348455.htmlSoap MacTavish Soap MacTavish Sun, 17 Apr 2011 13:58:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348455.html http://www.aygfsteel.com/hxlistiancai/comments/348455.html http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348455.html#Feedback 0 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/348455.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/348455.html
本地事g调度
对于M的GUI应用E序Q不所使用的是哪一U编E语a和UI工具包,背后的运行机刉是操作系l探GUI事gq把它们攑ֈ应用E序的事仉列中厅R这U机制在不同的操作系l^C大同异。当用户点击鼠标、键入字W、或者ɽH口获得焦点Q操作系l就会生成应用程序的GUI事gQ例如鼠标点凅R键盘输入、或H口重绘事g。操作系l决定哪一个窗口和应用E序应该接收用户触发的每一个事件ƈ把它攑օ应用E序的事仉列中?/p>
MZH口的GUI应用E序的底层实现结构都是一个事件@?event loop)Q应用程序初始化q运行一个@?loop)Q用于从事g队列中读取GUI事gQƈ作出相应的反应。处理事件的工作必须q速完成,以保证GUI应用E序能够对用户作出快速反应?/p>
UI事g触发的耗时较长的操作应该在一个单独的U程中执行,q样才能让事件@环主U程能够快速返回,获取应用E序事g队列中的下一个事件。但是,在非UIU程中访问图形界面部件和q_API 必须通过锁和串行化的机制(locking and serialization)来实现。违反这个规则的应用E序会引Ll调用失败,更严重的是锁住整个GUIpȝQGUI失去反应?/p>
SWT UI U程
SWT 遵@pȝq_所直接支持的这U线E模型,应用E序在它的主U程中运行事件@?event loop)Qƈ在主U程中直接调度线E。UIU程是Display 对象被创建的U程Q所有其他的囑Ş部g都必dq个UIU程中创建?/p>
既然所有的处理事g的代码是在应用程序的UIU程中触发的Q那么处理事件的E序代码p够不需要Q何特D方法自p问和调用囑Ş部g。不q,在处理长耗时的事件操作时Q需要用多U程来实现应用程序的功能?/p>
注:在非UIU程中调用Q何必dUIU程调用的程序,SWT会触发一?SWTException 异常?/p>
SWT 应用E序的主U程Q包括事件@环,其代码结构如下:
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
shell.open ();
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
display.dispose ();
}
public static void main (String [] args) {
Display display = new Display ();
Shell shell = new Shell (display);
shell.open ();
// start the event loop. We stop when the user has done
// something to dispose our window.
while (!shell.isDisposed ()) {
if (!display.readAndDispatch ())
display.sleep ();
}
display.dispose ();
}
创徏囑Ş部g和打开shell H口之后Q程序读取和分发来自操作pȝ事g队列的事Ӟ直到shell H口被销毁。如果在队列中不存在有效事gQdisplay q入睡眠状态,把运行机会交l其他程序?/p>
SWT 提供了在后台ȝE中调用囑Ş部g代码的访问方法?/p>
q行非UIU程
在非UI U程中不能直接调用UI 代码Q必L供一?Runnable对象Q在Runable中调用UI代码?a target="_blank">Display cM?span style="font-family: Arial, Helvetica, sans-serif; font-size: 13px">syncExec(Runnable) ?nbsp;asyncExec(Runnable) Ҏ用于在事件@环运行期?/span>Q在UI U程中运行这些Runnable对象?/span>
syncExec(Runnable) 当非UI U程中的E序代码依赖于UI 代码的返回|或者ؓ了确保在q回CU程之前Runnable 必须执行完成Ӟ应该使用q个Ҏ。SWT 会d调用U程Q直到在应用E序的UI U程中运行的q个Runnableq行l束为止。例如,一个后台线E需要基于一个窗口的当前寸q行某种计算Q就会需要同步地q行获取H口寸的代码,然后l箋其后面的计算?/span>
asyncExec(Runnable) 当程序需要执行一些UI 操作Q但在l执行之前不依赖q些操作必须完成的时候,应该使用q个Ҏ。例如,后台ȝE更新进度条Q或者重l一个窗口,它可以异步地发出更新或重l的hQƈ接着l箋后面的处理,在这U情况下Q后CU线E的q行旉和Runnable的运行没有必然的关系?/span>
下面的代码片D|CZ使用q两个方法的方式Q?/span>
...
display.asyncExec ( new Runnable () {
public void run () {
if (!myWindow.isDisposed())
myWindow.redraw ();
}
});
...
// do time-intensive computations
...
// now update the UI. We don't depend on the result,
// so use async.
display.asyncExec (new Runnable () {
public void run () {
if (!myWindow.isDisposed())
myWindow.redraw ();
}
});
// now do more computations
...
在用asyncExec 的时候,在runnable 中检查图形部件是否被销毁是一个好的习惯做法,在调用asyncExec和Runnable执行期间ȝE中有可能会发生其他的事情,不能保证runnable执行时图形部件当前处于什么状态?/div>
工作?Workbench)和多U程
实现SWT应用E序的多U程规则非常明确Q你可以控制事g循环的初始化Q在应用E序中用多U程解决复杂问题?/p>
向工作台d插g时的工作机制要父子一些,下面是用^?workbench platform)UI cȝ一?#8220;规约”(Rules of engagement)Q随着eclipse 的不断发布,可能会出C些例外:
通常QQ何添加到q_中的工作?workbench) UI 扩展都是在工作台的UI ȝE中执行的,除非是明地把它们添加线E中或者是后台作业(background job)中,例如后台作业q度条?
如果从工作台接收C个事Ӟ不能保证它是在UIU程中执行的Q查阅定义了监听器或事g的类的java文档Q如果没有特别说明用线E,q个cd是一个UI 相关c,可以在工作台ȝE中获得和运行?
同样Q除非是文档明确说明Q^台UI库不能视作是U程安全的。请注意Q大部分q_UIcL在触发事件的调用U程中运行监听器的,q_和JFace API调用q不查是在UI U程中执行的Q这意味着如果在非UI U程中调用一个能够触发事件的ҎQ可能会引入问题。从非UI U程中调用SWT的APIQSWT会抛?SWTException 异常。通常Q除非文档中明确规定Q避免在别的U程中调用^台UI 代码?
如果你的插g使用多线E或工作C?workbench job)Q必M?Display cȝasyncExec(Runnable) ?nbsp;syncExec(Runnable) ҎQ类调用M的工作台(workbench)、JFace或SWT 的应用程序接?API)Q除非是API明确说明是可以直接调用的?/span>
如果在插件中使用 JFace?a target="_blank">IRunnableContext 接口 调用q度监视?progress monitor)Q以q行一个操作,IRunnableContext 提供了一个参数来定是不是在一个新的线E中q行操作?/span>
附:
]]>
SWT-多线E问?/title> http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348453.htmlSoap MacTavish Soap MacTavish Sun, 17 Apr 2011 13:57:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348453.html http://www.aygfsteel.com/hxlistiancai/comments/348453.html http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348453.html#Feedback 0 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/348453.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/348453.html
如果你是SWT/Jface的初学者,那么本片所描述的问题很可能是你已经到或者将要碰到的?
q是关于多线E开辟的问题Q比较常见?
?问题Q?
当你在GUIȝE开辟一个新U程Q进行其它操作,q且需要更新UI控gQ意外发
生了Q?
Exception in thread "Thread-1" java.lang.NullPointerException?
三。解x?
使用:Display#asyncExecQRunnableQ或者Display#syncExecQRunnableQ?
把你的UI更新操作另开一个线E,比如Q?
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
button.setText("update");
}
}Q?
如果其它数据处理操作耗时不长Q可以把q部分代码放入到与UI更新同一个线E,
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
//Do business action
button.setText("update");
}
}Q?
如果其它数据处理耗时长,那么Z不让UI响应q钝Q应该把逻辑操作和UI更新分开:
Thread t = new Thread(new Runnable() {
public void run() {
//Do business action
Display.getCurrent().asyncExec(new Runnable() {
public void run() {
button.setText("update");
}
}Q?
}
}
]]> SWT中从后台U程讉K前台界面lg的问?/title> http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348454.htmlSoap MacTavish Soap MacTavish Sun, 17 Apr 2011 13:57:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348454.html http://www.aygfsteel.com/hxlistiancai/comments/348454.html http://www.aygfsteel.com/hxlistiancai/archive/2011/04/17/348454.html#Feedback 0 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/348454.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/348454.html 要在后台U程里对前台界面lgq行讉K.
解决Ҏ是用Display对象,Display对象主要负责理事g循环和控制UIU程和其它线E之间的通信.
Display.getDefault().asyncExec(new Runnable(){
public void run(){
//对前台界面进行操?/span>
}
});
package com.tr069im.ui;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
public class Login implements Runnable {
private static Shell shell;
private String loginResponse = "right" ;
private static boolean flag = false ;
public Login() {
}
public static void main(String[] args) {
final Display display = Display.getDefault();
shell = new Shell(SWT.MIN);
shell.setSize( 290 , 520 );
shell.setLocation( 300 , 5 );
shell.setText( "SWT多线E? );
final ProgressBar pb1 = new ProgressBar(shell, SWT.HORIZONTAL
| SWT.SMOOTH);
pb1.setBounds( 72 , 282 , 160 , 20 );
pb1.setLayoutData( new GridData(GridData.FILL_HORIZONTAL));
pb1.setMinimum( 0 );
pb1.setMaximum( 30 );
final Button btnLogin = new Button(shell, SWT.FLAT | SWT.PUSH);
btnLogin.setBounds( 80 , 363 , 111 , 36 );
btnLogin.setText( "取消" );
shell.open();
display.asyncExec( new Runnable() {
public void run() {
Login pl = new Login();
Thread t = new Thread(pl);
t.start();
}
});
Runnable runnable = new Runnable() {
public void run() {
for ( int i = 0 ; i < 30 ; i++) {
try {
Thread.sleep( 100 );
} catch (InterruptedException e) {
}
display.asyncExec( new Runnable() {
public void run() {
if (pb1.isDisposed())
return ;
pb1.setSelection(pb1.getSelection() + 1 );
}
});
if (flag) {
break ;
}
if (i == 29 ) {
open();
}
}
}
};
new Thread(runnable).start();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
display.dispose();
}
public void run() {
try {
if (loginResponse.equals( "right" )) {
Display.getDefault().asyncExec( new Runnable() {
public void run() {
flag = true ;
Shell shell = new Shell(SWT.MIN);
MessageBox messageBox = new MessageBox(shell,
SWT.ICON_WARNING);
messageBox.setMessage( "用户名或密码错误!" );
messageBox.open();
}
});
} else {
}
} catch (Exception ee) {
}
}
public static void open() {
Display.getDefault().asyncExec( new Runnable() {
public void run() {
}
});
}
}
]]> SSH框架的集成步?/title> http://www.aygfsteel.com/hxlistiancai/archive/2011/03/25/347035.htmlSoap MacTavish Soap MacTavish Fri, 25 Mar 2011 12:18:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/03/25/347035.html http://www.aygfsteel.com/hxlistiancai/comments/347035.html http://www.aygfsteel.com/hxlistiancai/archive/2011/03/25/347035.html#Feedback 1 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/347035.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/347035.html S2SH框架集成步骤Q?br />
1、框架依赖jar文g
Q这些jar包可以去官网自己下蝲Q地址不在q接Q?br />
1.1 sping 所依赖工程 spring-framework-2.5.6
dist\spring.jar
lib\cglib\cglib-nodep-2.1_3.jar
lib\jakarta-commons\commons-logging.jar
lib\aspectj\aspectjweaver.jar和aspectjrt.jar lib\j2ee\common-annotations.jar
1.2 hibernate 所依赖工程 hibernate-distribution-3.3.2.GA
hibernate3.jar
lib\required\jta-1.1.jar javassist-3.9.0.GA.jar dom4j-1.6.1.jar commons-collections-3.1.jar antlr-2.7.6.jar slf4j-api-1.5.8.jar
lib\bytecode\cglib\cglib-2.2.jar
[二~存可选]lib\optional\oscache\oscache-2.1.jar 同时需要把\project\etc\oscache.properties 拯到src ?br />
[二~存可选]lib\optional\ehcache\ehcache-1.2.3.jar 同时需要把\project\etc\ehcache.xml
[二~存可选]lib\optional\c3p0\ 配置c3p0数据库连接池的?作用{同于apache的dbcp
*使用hibernate注解Qhibernate-annotations-3.4.0.GA\
hibernate-annotations.jar
lib\hibernate-commons-annotations.jar
lib\ejb3-persistence.jar
*若用slf的日志还需要:slf4j-1.5.8
slf4j-nop-1.5.8.jar
1.3 struts2 所依赖工程 struts-2.1.8.1
lib目录下的Q?br />
struts2-core-2.1.8.1.jar
xwork-core-2.1.6.jar
ognl-2.7.3.jar
freemarker-2.3.15.jar
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar
struts2-spring-plugin-2.1.8.1.jar
aopalliance-1.0.jar
classworlds-1.1.jar
commons-beanutils-1.7.0.jar
commons-chain-1.2.jar
commons-collections-3.2.jar 在hibernate中已l引?nbsp;
commons-digester-2.0.jar
commons-lang-2.3.jar
commons-logging-1.0.4.jar 此文件在spring中已存在
commons-logging-api-1.1.jar
commons-validator-1.3.1.jar
ezmorph-1.0.3.jar
json-lib-2.1.jar 若用json可?br />
oro-2.0.8.jar
oval-1.31.jar
2、框架的配置文g
2.1 spring框架配置文g及集成hibernate、二U缓?br />
$WEB_ROOT/WEB-INF/applicationContext.xml
src/ehcache.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
<http://www.springframework.org/schema/beans/spring-beans-2.5.xsd>
<http://www.springframework.org/schema/context> <http://www.springframework.org/schema/context/spring-context-2.5.xsd>
<http://www.springframework.org/schema/aop> <http://www.springframework.org/schema/aop/spring-aop-2.5.xsd>
<http://www.springframework.org/schema/tx> <http://www.springframework.org/schema/tx/spring-tx-2.5.xsd>">
<!-- 配置数据?-->
<context:property-placeholder location="classpath:jdbc4mysql.properties" />
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
<!-- q接池启动时的初始?-->
<property name="initialSize" value="${initialSize}" />
<!-- q接池的最大?-->
<property name="maxActive" value="${maxActive}" />
<!-- 最大空闲?当经q一个高峰时间后Q连接池可以慢慢已l用不到的连接慢慢释放一部分Q一直减到maxIdle为止 -->
<property name="maxIdle" value="${maxIdle}" />
<!-- 最空闲?当空闲的q接数少于阀值时Q连接池׃预申请去一些连?以保证应?-->
<property name="minIdle" value="${minIdle}" />
</bean>
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="mappingResources">
<list>
<value>cn/tsp2c/sshdemo/domain/User.hbm.xml</value>
</list>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=false
hibernate.format_sql=false
hibernate.cache.use_second_level_cache=true
hibernate.cache.use_query_cache=false
hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider
</value>
</property>
</bean>
<!-- 配置事务理?-->
<bean id="txManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- spring支持两种事务声明方式Q注解和xml配置Q徏议用注解方?-->
<!-- 采用@Transactional注解方式使用事务,在daocdҎ需用注解方式标明事务方?-->
<tx:annotation-driven transaction-manager="txManager" />
<!-- 用户DAO实现,实现方式QJDBC
<bean id="userDao" class="cn.tsp2c.sshdemo.dao.impl.UserDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
-->
<!-- 用户DAO实现,实现方式Qhibernte -->
<bean id="userDao" class="cn.tsp2c.sshdemo.dao.impl.hibernate.UserDaoHibernateImpl">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 用户服务bean -->
<bean id="userService" class="cn.tsp2c.sshdemo.service.impl.UserServiceImpl" >
<property name="userDao" ref="userDao"/>
</bean>
<!-- 用户Action bean,scope=prototypeW合struts2的action生成机制 -->
<bean id="userAction" class="cn.tsp2c.sshdemo.web.action.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean>
</beans>
其中集成hibernate需要属性文Ӟjdbc4mysql.properties
driverClassName=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/sshdemodb?useUnicode\=true&characterEncoding\=utf-8
username=root
password=1234
initialSize=1
maxActive=500
maxIdle=2
minIdle=1
需要配|hibernate的二U缓存,如用ehcacheQ在src路径下加入ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
defaultCache 讄节点为缺省的~存{略
maxElementsInMemory 讄内存中最大允许存在的对象数量
eternal 讄~存中的对象是否永远不过?br />
overflowToDisk 把超出内存设定的溢出的对象存攑ֈ盘?br />
timeToIdleSeconds 讄~存对象I闲多长旉p?q期的对象会被清除掉
timeToLiveSeconds 讄~存对象ȝ存活旉
diskPersistent 当jvml束时是否把内存中的对象持久化到盘
diskExpiryThreadIntervalSeconds 讄用于清除q期对象的监听线E的轮询旉
-->
<ehcache>
<diskStore path="e:\cache"/>
<defaultCache maxElementsInMemory="1000" eternal="false" overflowToDisk="true"
timeToIdleSeconds="120"
timeToLiveSeconds="180"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="60"/>
<cache name="cn.tsp2c.sshdemo.domain.User" maxElementsInMemory="100" eternal="false"
overflowToDisk="true" timeToIdleSeconds="300" timeToLiveSeconds="500" diskPersistent="false"/>
</ehcache>
2.2 struts2的配|文Ӟ src/struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"<http://struts.apache.org/dtds/struts-2.0.dtd>">
<struts>
<!-- 指定web应用的默认编码ؓUTF-8Q功能等同于request.setCharacterEncoding() -->
<constant name="struts.i18n.encoding" value="UTF-8"/>
<!-- 指定struts2的请求处理后~Q匹?.action的所有请?-->
<constant name="struts.action.extension" value="action"/>
<!-- 关闭struts2?动态方法调?使用通配W匹配方式实现动态方法调?-->
<constant name="struts.enable.DynamicMethodInvocation" value="false"/>
<!-- 讄览器是否缓存静态页面,默认为trueQ徏议:开发阶D关闭,生环境打开 -->
<constant name="struts.serve.static.browserCache" value="false" />
<!-- 当struts.xml修改时自动重新加载,默认为false。徏议:开发阶D|开Q生产环境关?-->
<constant name="struts.configuration.xml.reload" value="true"/>
<!-- 开发模式下打开Q便于打印详l日志,生环境下关?-->
<constant name="struts.devMode" value="true" />
<!-- 讄视图主题为css_xhtml -->
<constant name="struts.ui.theme" value="simple" />
<!-- 指定struts中action交由spring创徏 -->
<constant name="struts.objectFactory" value="spring"/>
<package name="base" extends="struts-default">
<global-results>
<result name="message">/WEB-INF/page/message.jsp</result>
<result name="error">/WEB-INF/page/error.jsp</result>
</global-results>
</package>
<package name="user" namespace="/user" extends="base">
<action name="login" class="cn.tsp2c.sshdemo.web.action.LoginAction" method="execute">
<result name="success">/index.jsp</result>
<result name="input">/login.jsp</result>
</action>
<action name="user_*" class="cn.tsp2c.sshdemo.web.action.UserAction" method="{1}">
<result name="list">/userlist.jsp</result>
<result name="add" type="redirect">/useradd.jsp</result>
</action>
</package>
</struts>
3、需要把spring、strusts2框架注入到web容器Qhibernate框架被spring集成Q和web容器没有关系。所以不需要在web.xml中配|)
web.xml文gQ?br />
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
<http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd>">
<!-- 配置spring的xml文gQ若配置文g有多个,可用,或空格分?-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!-- web容器加蝲struts2配置 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- web容器加蝲spring配置 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- web容器增加字符集{换的qo?׃struts2框架解决了字W集转码Q此配置可以注释?
<filter>
<filter-name>encoding</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<!-- 解决hibernate的session关闭D延迟加蝲异常的问?-->
<!--
<filter>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<filter-class>
org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.1 web容器集成spring
<!-- 配置spring的xml文gQ若配置文g有多个,可用,或空格分?-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!-- web容器加蝲spring配置 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
3.2 web容器集成struts2
<!-- web容器加蝲struts2配置 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3.3 关于在session范围内解决hibernate的gq加载问?br />
<!-- 解决hibernate的session关闭D延迟加蝲异常的问?-->
<filter>
<filter-name>HibernateSessionInViewFilter</filter-name>
<filter-class>
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateSessionInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
4、如何用s2sh框架实现MVC
4.1 action
struts.xml:
<!-- 指定struts中action交由spring创徏 -->
<constant name="struts.objectFactory" value="spring"/>
<action name="user_*" class="cn.tsp2c.sshdemo.web.action.UserAction" method="{1}">
<result name="list">/userlist.jsp</result>
<result name="add" type="redirect">/useradd.jsp</result>
</action>
在spring中配|:
<!-- 用户Action bean,scope=prototypeW合struts2的action生成机制 -->
<bean id="userAction" class="cn.tsp2c.sshdemo.web.action.UserAction" scope="prototype">
<property name="userService" ref="userService"/>
</bean>
4.2 service
<!-- 用户服务bean -->
<bean id="userService" class="cn.tsp2c.sshdemo.service.impl.UserServiceImpl" >
<property name="userDao" ref="userDao"/>
</bean>
4.3 dao
<!-- 用户DAO实现,实现方式QJDBC -->
<bean id="userDao" class="cn.tsp2c.sshdemo.dao.impl.UserDaoImpl">
<property name="dataSource" ref="dataSource"/>
</bean>
]]> MyEclipse提供便的ҎQhibernate 反向数据? http://www.aygfsteel.com/hxlistiancai/archive/2011/03/22/346739.htmlSoap MacTavish Soap MacTavish Tue, 22 Mar 2011 04:52:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/03/22/346739.html http://www.aygfsteel.com/hxlistiancai/comments/346739.html http://www.aygfsteel.com/hxlistiancai/archive/2011/03/22/346739.html#Feedback 0 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/346739.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/346739.html
原文地址Q?a >http://hi.baidu.com/gg7663/blog/item/f7bfb70f74a5c1f536d122b9.html
开发项目涉及到的表太多Q一个一个的写JAVA实体cd是费事。MyEclipse提供便的ҎQ反向数据库
***选择表反向的时候一ơ全选上Q省的后面配那个发现兌表选项
步骤大致如下:
W一步:
window-->open Perspective-->MyEclipse Java Persistence
操作后会出现一个视图DB Brower:MyEclipse Derby
在空白区点击右键,新徏一个数据库对象。我用的是mysqlQ其实我一直想用oracle之类的,只是机子内存,又懒得倒腾别的Q结果截个图吧:
左边的属性按照自׃用的数据库填p了,左边部分是我建好以后的结果,数据库名叫shopQ有个user?是专门这ơ测试用?/span>
W二步:
新徏一个WEB目
然后选中目右键-->MyEclipse-->add Hibernate Capabilities
如果需要用到在实体cMd注释的话那么选中紧挨着的add Hibernate Annotations SupportQ据说现在都用annotations了就选上吧!Q)
然后下一步选中一个目录存放自动生成hibernate.cfg.xml文gQ一般毫无例外的攑֜src根目录下Q下一步选中一个DB Driver中我们第一步徏立的那个Q对我来说是com.mysql....反正是自己建的那个呗)Q然后下一步选中一个目录存放自动生成的HibernateSessionFactory工具c?Q结果出来以后我看了一下,q个hibernateSessionFactory工具cd是一个拿Session的单例,q有一些其它关闭session之类的方法,一看便知。下图是生成的配|文Ӟ
W三步反向生成实体类
到DB Brower中找到要反向的表选中q且点击右键--->Hibernate Reverse Enginnering
看选项Qjava src folder 源码包,不用多解释,java package——存攑ְ要反转出来的实体c,选择目录Q应该是提前建好的com.xxx.model之类的包Q;Create pojo<>db。。。这个选项选中Q就是我们徏立从表到单java 对象Q即pojoQ的配置Q把下面的add hibernate mapping annotations to pojo的选上Q其它不,q个选项用来“d映射注解到pojo对象?#8221;Q它上面的那个选项用来创徏xml的,据说不太用了Q就用annotation吧!
q样应该够了,下一?/span>
看图Qtype Mapping要选上hibernatetypesQ这栯些注解都是来?nbsp;javax.persistence.*?Q刚观察q!Q?/span>
id generator 看下拉列表就知道是配|id生成{略?/span>
那两个enable 是说映射关系发现QdetectionQ,明白了吧Q英文好是沑օQ不用像我一栯得查字典了?/span>
下一步:没啥理解不了?动手点点q道了
直接完成Q发C码很漂亮Q注释很完美Q而且肯定没有错误Q几分钟都能搞定数十个表Q不得不感叹myeclipseQ真是个大金ѝ?/span>
]]>Linux 命oqxU篏 http://www.aygfsteel.com/hxlistiancai/archive/2011/03/06/345818.htmlSoap MacTavish Soap MacTavish Sun, 06 Mar 2011 02:16:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/03/06/345818.html http://www.aygfsteel.com/hxlistiancai/comments/345818.html http://www.aygfsteel.com/hxlistiancai/archive/2011/03/06/345818.html#Feedback 0 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/345818.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/345818.html
记得刚刚接触Linux的时候,自己真是一名不折不扣的菜鸟Q通过一q的努力Q自己可以单独操作Linux了,我将把以后遇到的比较有用的命令积累在q篇博客上?
1. Fedora 版Linux ifconfig
/sbin/ipconfig
2. 讄tomcatQ系l启动,同时tomcat也启?/p>
echo "/data/webapp/reg/bin/startup.sh">>/etc/rc.local
3. 查看pȝ Java q程
ps -ef|grep java
4. 讄动态IP
ifconfig eth0 192.168.1.101 up
5. 在ubuntu下修Ҏ?/p>
gedit /etc/profile
6. netstat –anput 查看端口占有情况
7. killall –9 java 杀L有系l中javaq程
8. ./startup.sh ; tail –f /data/webapp/tomcat/logs/catalina.out 启动tomcatQƈ且查看日?/p>
9. vi~辑文gӞ误写了,先按ESC 再按u Q可以恢复?/p>
10. 改变一个文件夹下所有文件的所有?/p>
chown –R xg.xg folder
11. tomcat 随着pȝ自启?/p>
1. 把tomcat和程序放?home/user
2. 改变tomcat的所有?nbsp; chown –R hans.hans tomcat
3. echo "/home/hans/tomcat/startup.sh">>/etc/profile
12. q有一点要提醒修改linux文gӞ一定要先备?/p>
13. 扚w修改linux下文件的~码Q?/p>
cd /home/hans/test
find ./ -type f -name "*.c"|while read line;do
echo $line
iconv -f GB2312 -t UTF-8 $line > ${line}.utf8
mv $line ${line}.gb2312
mv ${line}.utf8 $line
done
14. vi / vim ~辑文gӞ昄行号
vim /etc/vimrc
在末行处加上 Q?set number
Fedora 12 ?/p>
1. Fedora 12 安装后不能远E用CRTdQ?/p>
ntsysv
出现囑Ş界面选择ssh服务OK
2. Fedora 12 ?Ubuntu的安装Y件有所不同
Fedora Q?yum install gcc
Ubuntu : apt-get install gcc
3. VMware 全屏
首先 Ctrl+Alt+Enter 全屏 但是linux只是占中间的屏幕Q这是因为linux的分辨率与window的分辨率不一P调整linux的分辨率和windows一样就好了?/p>
4. Fedora 9 安装完后不能使用 ifconfig Q还得这P/sbin/ifconfig 才有?/p>
vi /etc/profile
if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
修改Q把W一行注释掉
#if [ "$EUID" = "0" ]; then
pathmunge /sbin
pathmunge /usr/sbin
pathmunge /usr/local/sbin
fi
然后重启Q就好了!
5. 安装中文输入?
yum install scim* -y
]]> 用java实现Mail的发?/title> http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345228.htmlSoap MacTavish Soap MacTavish Sat, 26 Feb 2011 03:09:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345228.html http://www.aygfsteel.com/hxlistiancai/comments/345228.html http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345228.html#Feedback 0 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/345228.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/345228.html 阅读全文 ]]> TableҎ表头的排序Demo http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345227.htmlSoap MacTavish Soap MacTavish Sat, 26 Feb 2011 02:51:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345227.html http://www.aygfsteel.com/hxlistiancai/comments/345227.html http://www.aygfsteel.com/hxlistiancai/archive/2011/02/26/345227.html#Feedback 0 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/345227.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/345227.html 装h的方法,用到的思\是:
1.规定好排序规则,q里用的是根据第一列升序排?br />
2.排序的列d好事件响?br />
1.q里是排序规则及其实?br />
package com.bx.ui;
import java.text.Collator;
import java.util.Locale;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
public class TableColumnSorter {
public static void addNumberSorter(final Table table,
final TableColumn column) {
column.addListener(SWT.Selection, new Listener() {
boolean isAscend = true; // 按照升序排序
public void handleEvent(Event e) {
int columnIndex = getColumnIndex(table, column);
TableItem[] items = table.getItems();
// 使用冒法进行排?br />
for (int i = 1; i < items.length; i++) {
String strvalue2 = items[i].getText(columnIndex);
if (strvalue2.equalsIgnoreCase("")) {
// 当遇到表g的空目Ӟ停止往下检索排序项?br />
break;
}
for (int j = 0; j < i; j++) {
String strvalue1 = items[j].getText(columnIndex);
// 字W串cd数据转化为floatcd
float numbervalue1 = Float.valueOf(strvalue1);
float numbervalue2 = Float.valueOf(strvalue2);
boolean isLessThan = false;
if (numbervalue2 < numbervalue1) {
isLessThan = true;
}
if ((isAscend && isLessThan)
|| (!isAscend && !isLessThan)) {
String[] values = getTableItemText(table, items[i]);
Object obj = items[i].getData();
items[i].dispose();
TableItem item = new TableItem(table, SWT.NONE, j);
item.setText(values);
item.setData(obj);
items = table.getItems();
break;
}
}
}
table.setSortColumn(column);
table.setSortDirection((isAscend ? SWT.UP : SWT.DOWN));
isAscend = !isAscend;
}
});
}
public static void addStringSorter(final Table table,
final TableColumn column) {
column.addListener(SWT.Selection, new Listener() {
boolean isAscend = true; // 按照升序排序
Collator comparator = Collator.getInstance(Locale.getDefault());
public void handleEvent(Event e) {
int columnIndex = getColumnIndex(table, column);
TableItem[] items = table.getItems();
// 使用冒法进行排?br />
for (int i = 1; i < items.length; i++) {
String str2value = items[i].getText(columnIndex);
if (str2value.equalsIgnoreCase("")) {
// 当遇到表g的空目Ӟ停止往下检索排序项?br />
break;
}
for (int j = 0; j < i; j++) {
String str1value = items[j].getText(columnIndex);
boolean isLessThan = comparator.compare(str2value,
str1value) < 0;
if ((isAscend && isLessThan)
|| (!isAscend && !isLessThan)) {
String[] values = getTableItemText(table, items[i]);
Object obj = items[i].getData();
items[i].dispose();
TableItem item = new TableItem(table, SWT.NONE, j);
item.setText(values);
item.setData(obj);
items = table.getItems();
break;
}
}
}
table.setSortColumn(column);
table.setSortDirection((isAscend ? SWT.UP : SWT.DOWN));
isAscend = !isAscend;
}
});
}
public static int getColumnIndex(Table table, TableColumn column) {
TableColumn[] columns = table.getColumns();
for (int i = 0; i < columns.length; i++) {
if (columns[i].equals(column))
return i;
}
return -1;
}
public static String[] getTableItemText(Table table, TableItem item) {
int count = table.getColumnCount();
String[] strs = new String[count];
for (int i = 0; i < count; i++) {
strs[i] = item.getText(i);
}
return strs;
}
/*
* table.getColumn(0).addSelectionListener(
new SelectionAdapter()
{
public void widgetSelected(SelectionEvent e)
{
//调用排序文gQ处理排?br />
new TableColumnSorter().addStringSorter(table, table.getColumn(0));
}
});
*
*/
}
2.q里在table中每列实例化的时候添加的列监听事?br />
/*
*
* d监听事g
*
*/
table.getColumn(0).addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
// 调用排序文gQ处理排?br />
TableColumnSorter.addStringSorter(table, table
.getColumn(0));
}
});
试l果׃在截图表C?
]]> 一道体现面向对象思想的小例题 http://www.aygfsteel.com/hxlistiancai/archive/2010/10/08/334001.htmlSoap MacTavish Soap MacTavish Fri, 08 Oct 2010 13:24:00 GMT http://www.aygfsteel.com/hxlistiancai/archive/2010/10/08/334001.html http://www.aygfsteel.com/hxlistiancai/comments/334001.html http://www.aygfsteel.com/hxlistiancai/archive/2010/10/08/334001.html#Feedback 0 http://www.aygfsteel.com/hxlistiancai/comments/commentRss/334001.html http://www.aygfsteel.com/hxlistiancai/services/trackbacks/334001.html
q是一道简单的模拟学生理pȝ的小例子Q?br />
①: 首先新徏一个Studentc,里面包含了学生的各个属性,代码如下Q?br />
public class Student {
//学生的属性:int型的q龄Q分敎ͼString型的名字Q等U,专业{?br />
private int age;
private int score;
private String name;
private String level;
private String department;
/**************属性的构造方?***********/
//通过getScore获取分数Q通过setScore讄分数?br />
public int getScore(){
return score;
}
public void setScore(int score){
this.score=score;
}
//通过getName获取姓名Q通过setName修改姓名?br />
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
//通过getAge获取q龄Q通过setAge修改q龄?br />
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
//通过getDepartment获取部门Q通过setDepartment修改部门?br />
public String getDepartment(){
return department;
}
public void setDepartment(String department){
this.department=department;
}
//U别Ҏ
public String getLevel(){
return level;
}
public void setLevel(String level){
this.level=level;
}
}
注:q里其实可以加入cL?
public void Student (int age , int score , String name , String level , String department)
{
this.age = age;
this.score = score;
this.name = name;
this.level = level;
this.department = department;
}
个h认ؓ使用cL法可以在dC实例化的时候直接将参数讄好,减少代码量?br />
②:然后新徏一个等U划分类Q根据学生分敎ͼ划分aQbQcQd四个{Qƈ在控制台命o行中昄出来Q代码如下:
public class GetScore{
public void getScore(Student[] stuArr){
for(int i = 0 ; i < stuArr.length ; i++)
{
if(stuArr[i] != null)
{
int z;
z = stuArr[i].getScore() / 10;
/**************switch函数的应用,本h没有列出每一U的判断只是象征表示了一下,有兴的可以自己把分数的每种情况补全***************/
switch(z){
case 9:{System.out.println(stuArr[i].getName() + "是A{?); break;}
case 8:{System.out.println(stuArr[i].getName() + "是B{?); break;}
case 7:{System.out.println(stuArr[i].getName() + "是C{?); break;}
default:{System.out.println(stuArr[i].getName() + "是D{?);}
}
System.out.println(stuArr[i].getName() + "-----" + stuArr[i].getScore() + "-----" + stuArr[i].getAge());
}
}
}
}
③:最后新Zc,里面实例化每一个学生,q且调用{划分cM的划分函敎ͼ代码如下Q?br />
public class MainStu {
public static void main(String args[]){
Student[] stuArr= new Student[10];
//实例化每一个学生ƈ在学生类数组里添加每一个新人;
Student s0 = new Student();
s0.setName("Soap");
s0.setAge(22);
s0.setScore(60);
s0.setDepartment("计算?);
stuArr[0] = s0;
Student s1 = new Student();
s1.setName("Price");
s1.setAge(21);
s1.setScore(88);
s1.setDepartment("计算?);
stuArr[1] = s1;
Student s2 = new Student();
s2.setName("Rouch");
s2.setAge(24);
s2.setScore(87);
s2.setDepartment("计算?);
stuArr[2] = s2;
Student s3 = new Student();
s3.setName("Ghost");
s3.setAge(20);
s3.setScore(70);
s3.setDepartment("计算?);
stuArr[3] = s3;
/*************Ҏ的调?*********/
GetScore g=new GetScore();
g.getScore(stuArr);
}
}
希望q段代码能够对大家有所帮助Q谢谢各位的参观?br />
]]>
վ֩ģ壺
ˮ |
|
|
ന |
|
|
|
կ |
|
|
|
ƴ |
|
|
ԭ |
|
̨ |
ƺ |
|
Ͼ |
|
ƺ |
Զ |
Ϫ |
Զ |
|
½ |
Ů |
|
ɽ |
|
|
߷ |
|
ɽ |
Զ |
|
ƽɽ |
մ |
պ |
|