JBOSS 点滴

丰丰的博客

2010年11月3日 #

mysql5.x忘记密码

参考:https://blog.csdn.net/qq_34102150/article/details/126120056


1、停止MySQL服务,输入 net stop mysql 停止服务。
2、切换到MySQL的bin文件下,
    mysql5.x:  mysqld --console --skip-grant-tables --shared-memory

mysqld --console --skip-grant-tables --shared-memory
3、输入mysql -uroot -p回车,不用输入密码,直接按回车跳过,
    输入:  use mysql 
    输入:  update user set password=PASSWORD('123456') where USER='root';
    或者:   GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY '123456' WITH GRANT OPTION;
    输入:  FLUSH PRIVILEGES;
4、重启服务

posted @ 2024-02-17 15:09 半导体 阅读(15) | 评论 (0)编辑 收藏

微信小程序开发流程

准备工作:
    需要https的域名
    1、域名申请、备案   (我是在阿里云买的服务器,域名也在阿里云购买  )
    2、域名与IP绑定 
    3、ssl安全证书 申请(https
    4、下载ssl安全证书布署在tomcat服务器
    4、在云服务器tomcat中布署https           
           参考   https://blog.csdn.net/qq_35206244/article/details/97613498

          ps:任何操作不会,直接打阿里云客服电话 95187
    
小程序开发流程:
    1、在微信官网注册帐号
    2、下载小程序开发工具
    3、小程序开发、上传   
    4、小程序送审,审核通过即可分享给你的朋友

posted @ 2020-08-08 10:11 半导体 阅读(98) | 评论 (0)编辑 收藏

mall 工程创建踩坑

新建项目坑 
www.macrozheng.com项目,打开maven总是引入失败,后来
https://www.cnblogs.com/dk1024/p/10778841.html


https://blog.csdn.net/ken_ding/article/details/85623092这个是前端有可能遇见的坑的解决办法


 安装环境文档:
http://www.macrozheng.com/#/deploy/mall_deploy_windows

posted @ 2020-07-20 21:52 半导体 阅读(100) | 评论 (0)编辑 收藏

springboot 打包 后,在dos命令行运行提示没有主清单属性的解决办法

1.在pom.xml文件中插入
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
2.双击IDEA右侧Maven Projects的lifecycle下的package,打包成jar,重新执行以上命令。

posted @ 2020-06-27 16:42 半导体 阅读(188) | 评论 (0)编辑 收藏

MyBatis出现org.apache.ibatis.executor.ExecutorException异常

DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] 
- PooledDataSource forcefully closed/removed all connections.
DEBUG [main] 
- PooledDataSource forcefully closed/removed all connections.
DEBUG [main] 
- PooledDataSource forcefully closed/removed all connections.
DEBUG [main] 
- Opening JDBC Connection
DEBUG [main] 
- Created connection 29011566.
DEBUG [main] 
- Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@1baae6e]
DEBUG [main] 
- ==>  Preparing: select * from user where username like concat(?,'%') 
DEBUG [main] - ==> Parameters: 张(String)

org.apache.ibatis.exceptions.PersistenceException: 
### 
Error querying database.  Cause: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'username' from result set.  Cause: java.sql.SQLException: Cannot convert value '张三' from column 2 to TIMESTAMP.
### The error may exist in sqlmap/User.xml
### The 
error may involve test.findUserByName3
### The 
error occurred while handling results
### SQL: 
select * from user where username like concat(?,'%')
### Cause: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column 'username' from result set.  Cause: java.sql.SQLException: Cannot convert value '张三' from column 2 to TIMESTAMP.

    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:
30)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:
149)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:
140)
    at com.swjd.test.B.test2(B.java:
40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
43)
    at java.lang.reflect.Method.invoke(Method.java:
497)
    at org.junit.runners.model.FrameworkMethod$
1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:
12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:
47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:
17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:
325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
57)
    at org.junit.runners.ParentRunner$
3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$
1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:
288)
    at org.junit.runners.ParentRunner.access$
000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$
2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:
363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:
137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:
68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:
47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:
242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:
70)
Caused by: org.apache.ibatis.executor.result.ResultMapException: 
Error attempting to get column 'username' from result set.  Cause: java.sql.SQLException: Cannot convert value '张三' from column 2 to TIMESTAMP.
    at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:83)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createUsingConstructor(DefaultResultSetHandler.java:
671)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createByConstructorSignature(DefaultResultSetHandler.java:
654)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:
618)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:
591)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:
397)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:
354)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:
328)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:
301)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:
194)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:
65)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:
79)
    at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:
63)
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:
324)
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:
156)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:
109)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:
83)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:
147)
     
24 more
Caused by: java.sql.SQLException: Cannot convert value 
'张三' from column 2 to TIMESTAMP.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:
956)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:
926)
    at com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:
1328)
    at com.mysql.jdbc.ByteArrayRow.getTimestampFast(ByteArrayRow.java:
124)
    at com.mysql.jdbc.ResultSetImpl.getTimestampInternal(ResultSetImpl.java:
6669)
    at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:
5988)
    at com.mysql.jdbc.ResultSetImpl.getTimestamp(ResultSetImpl.java:
6026)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
43)
    at java.lang.reflect.Method.invoke(Method.java:
497)
    at org.apache.ibatis.logging.jdbc.ResultSetLogger.invoke(ResultSetLogger.java:
69)
    at com.sun.proxy.$Proxy6.getTimestamp(Unknown Source)
    at org.apache.ibatis.type.DateTypeHandler.getNullableResult(DateTypeHandler.java:
39)
    at org.apache.ibatis.type.DateTypeHandler.getNullableResult(DateTypeHandler.java:
28)
    at org.apache.ibatis.type.BaseTypeHandler.getResult(BaseTypeHandler.java:
81)
     
41 more
Caused by: java.lang.NumberFormatException: 张三
    at com.mysql.jdbc.StringUtils.getInt(StringUtils.java:
756)
    at com.mysql.jdbc.ResultSetRow.getTimestampFast(ResultSetRow.java:
1253)
     
54 more


Process finished 
with exit code -1

上网找了一些答案也没有解决我的问题,

后来发现原来是User类的构造函数问题,找不到相关的构造函数;试着在User中加一个默认的构造函数,就解决了。。。

希望能帮到大家。

         默认的构造函数在创建构造函数后,不会自动创建默认构造函数

DEBUG [main] 
- Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
DEBUG [main] - PooledDataSource forcefully closed/removed all connections.
DEBUG [main] 
- PooledDataSource forcefully closed/removed all connections.
DEBUG [main] 
- PooledDataSource forcefully closed/removed all connections.
DEBUG [main] 
- PooledDataSource forcefully closed/removed all connections.
DEBUG [main] 
- Opening JDBC Connection
DEBUG [main] 
- Created connection 27155935.
DEBUG [main] 
- Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@19e5ddf]
DEBUG [main] 
- ==>  Preparing: select * from user where id=
DEBUG [main] 
- ==> Parameters: 27(Integer)

org.apache.ibatis.exceptions.PersistenceException: 
### 
Error querying database.  Cause: org.apache.ibatis.reflection.ReflectionException: Error instantiating class com.swjd.po.User with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.swjd.po.User.<init>()
### The 
error may exist in sqlmap/User.xml
### The 
error may involve test.findUserById-Inline
### The 
error occurred while setting parameters
### SQL: 
select * from user where id=?
### Cause: org.apache.ibatis.reflection.ReflectionException: 
Error instantiating class com.swjd.po.User with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.swjd.po.User.<init>()

    at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:
26)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:
111)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:
102)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:
66)
    at com.test.Test1.test1(Test1.java:
31)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
43)
    at java.lang.reflect.Method.invoke(Method.java:
497)
    at org.junit.runners.model.FrameworkMethod$
1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:
12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:
47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:
17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:
325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:
57)
    at org.junit.runners.ParentRunner$
3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$
1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:
288)
    at org.junit.runners.ParentRunner.access$
000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$
2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:
363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:
137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:
68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:
47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:
242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:
70)
Caused by: org.apache.ibatis.reflection.ReflectionException: 
Error instantiating class com.swjd.po.User with invalid types () or values (). Cause: java.lang.NoSuchMethodException: com.swjd.po.User.<init>()
    at org.apache.ibatis.reflection.factory.DefaultObjectFactory.instantiateClass(DefaultObjectFactory.java:
86)
    at org.apache.ibatis.reflection.factory.DefaultObjectFactory.create(DefaultObjectFactory.java:
48)
    at org.apache.ibatis.reflection.factory.DefaultObjectFactory.create(DefaultObjectFactory.java:
41)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:
528)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:
507)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:
331)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:
291)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:
266)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:
236)
    at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:
150)
    at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:
60)
    at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:
73)
    at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:
60)
    at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:
267)
    at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:
137)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:
96)
    at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:
77)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:
108)
     
25 more
Caused by: java.lang.NoSuchMethodException: com.swjd.po.User.
<init>()
    at java.lang.Class.getConstructor0(Class.java:
3082)
    at java.lang.Class.getDeclaredConstructor(Class.java:
2178)
    at org.apache.ibatis.reflection.factory.DefaultObjectFactory.instantiateClass(DefaultObjectFactory.java:
60)
     
42 more


Process finished 
with exit code -1


  

这种错也是同样的问题,


加上无参构造函数就可以了。


当创建对象来接受sql结果时会遍历实体类的构造方法找到与之匹配的,如果实体类中有构造方法了但是参数不匹配的话就会报上述错误,此时添加无参构造方法(默认的构造方法),会走其他方法,
https://blog.csdn.net/qq_35975416/article/details/80488267




posted @ 2020-03-25 20:01 半导体 阅读(5362) | 评论 (0)编辑 收藏

idea jsp代码不提示Java代码

在<head>里写java代码有提示,在<body>里不写%>就有提示。

这是由于按提示快捷键alt+enter导致。解决方法一直未找到合适的。 
解决方法:

posted @ 2020-03-08 20:11 半导体 阅读(222) | 评论 (0)编辑 收藏

项目管理推荐好文

挣值管理(PV、EV、AC、SV、CV、SPI、CPI)记忆之我见 http://www.cnitpm.com/pm/7707.html https://blog.csdn.net/weixin_38197294/article/details/79852129

posted @ 2020-03-08 11:41 半导体 阅读(102) | 评论 (0)编辑 收藏

jquery传参及获取方式

html写法
<form id="myform">
<input type="radio" value="1" name="gender">
<input type="radio" value="2" name="gender">
<input type="text" name="username" />
<input type="button" value="提交" onclick="fun()"/>
</form>
<div id="myText"></div>



获取值方式一
    <script src="js/jquery-3.3.1.min.js"></script>
    
<script>
        
//定义方法
        function fun(){
           alert($('#myform').serialize());
            
//使用ajax发送异步请求
              $.post("ajaxServletH",$('#myform').serialize(),function(data){
                  
var divA = document.getElementById("myText");
                  divA.innerHTML 
= "<br/><hr><br/>"+data;
               },
"text")
        }
    
</script>
获取值方式二:

var gender = $ ("input [name= 'gender' ] : checked") .val() ;

posted @ 2020-02-08 18:36 半导体 阅读(143) | 评论 (0)编辑 收藏

spring boot结合thymeleaf通过后台传入的数值循环生成标签

spring boot结合thymeleaf通过后台传入的数值循环生成标签

 <span th:each="i:${#numbers.sequence(1,page.pages)}">
   
<span th:text="${i}"/>
</span>

posted @ 2019-10-16 16:06 半导体 阅读(315) | 评论 (0)编辑 收藏

模态框传值

模态框传值:
https://blog.csdn.net/linhaiyun_ytdx/article/details/77417702

posted @ 2019-10-12 16:35 半导体 阅读(136) | 评论 (0)编辑 收藏

Bootstrap 模态框 + iframe > 打开子页面 > 数据传输/关闭模态框

     摘要: 父页面bootstrap模态框: <div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="false" > <div class="modal-dialog modal-lg"> ...  阅读全文

posted @ 2019-05-28 21:23 半导体 阅读(320) | 评论 (0)编辑 收藏

mybatis学习之路----mysql批量新增数据

来源:
https://blog.csdn.net/xu1916659422/article/details/77971867
 
   mysql新增语句 
    insert into 表名(字段,字段。。。) values ( 值,值 。。。);此种适合单条插入。
批量插入,
   一种可以在代码中循环着执行上面的语句,但是这种效率太差,下面会有对比,看看它有多差。
另一种,可以用mysql支持的批量插入语句,
insert into
     表名(字段,字段。。。) values ( 值,值 。。。),( 值,值 。。。),( 值,值 。。。)....
这种方式相比起来,更高效。
实现过程mapper.xml
 

    <!-- 跟普通的insert没有什么不同的地方 ,主要用来跟下面的批量插入做对比。-->
    <insert id="insert" parameterType="com.soft.mybatis.model.Customer">
        <!-- 跟自增主键方式相比,这里的不同之处只有两点
                    1  insert语句需要写id字段了,并且 values里面也不能省略
                    2 selectKey 的order属性需要写成BEFORE 因为这样才能将生成的uuid主键放入到model中,
                    这样后面的insert的values里面的id才不会获取为空
              跟自增主键相比就这点区别,当然了这里的获取主键id的方式为 select uuid()
              当然也可以另写别生成函数。-->
        <selectKey keyProperty="id" order="BEFORE" resultType="String">
            select uuid()
        </selectKey>
        insert into t_customer (id,c_name,c_sex,c_ceroNo,c_ceroType,c_age)
        values (#{id},#{name},#{sex},#{ceroNo},#{ceroType},#{age})
    </insert>
 
    <!-- 批量插入, -->
    <insert id="batchInsert" parameterType="java.util.Map">
        <!-- 这里只做演示用,真正项目中不会写的这么简单。 -->
        insert into
          t_customer (id,c_name,c_sex,c_ceroNo,c_ceroType,c_age)
        values
        <!-- foreach mybatis循环集合用的
              collection="list" 接收的map集合中的key 用以循环key对应的属性
                 separator=","  表示每次循环完毕,在sql后面放一个逗号
                 item="cus" 每次循环的实体对象 名称随意-->
        <foreach collection="list" separator="," item="cus">
            <!-- 组装values对象,因为这张表的主键为非自增主键,所以这里 (select uuid()) 用于生成id的值-->
            ((select uuid()),#{cus.name},#{cus.sex},#{cus.ceroNo},#{cus.ceroType},#{cus.age})
        </foreach>
    </insert>
实体model对象

package com.soft.mybatis.model;

 

/**

 * Created by xuweiwei on 2017/9/10.

 */

public class Customer {

 

    private String id;

    private String name;

    private Integer age;

    private Integer sex;

    private String ceroNo;

    private Integer ceroType;

 

    public String getId() {

        return id;

    }

 

    public void setId(String id) {

        this.id = id;

    }

 

    public String getName() {

        return name;

    }

 

    public void setName(String name) {

        this.name = name;

    }

 

    public Integer getAge() {

        return age;

    }

 

    public void setAge(Integer age) {

        this.age = age;

    }

 

    public Integer getSex() {

        return sex;

    }

 

    public void setSex(Integer sex) {

        this.sex = sex;

    }

 

    public String getCeroNo() {

        return ceroNo;

    }

 

    public void setCeroNo(String ceroNo) {

        this.ceroNo = ceroNo;

    }

 

    public Integer getCeroType() {

        return ceroType;

    }

 

    public void setCeroType(Integer ceroType) {

        this.ceroType = ceroType;

    }

 

    @Override

    public String toString() {

        return "Customer{" +

                "id='" + id + '\'' +

                ", name='" + name + '\'' +

                ", age=" + age +

                ", sex=" + sex +

                ", ceroNo='" + ceroNo + '\'' +

                ", ceroType='" + ceroType + '\'' +

                '}';

    }

}
接口
  1. int add(Customer customer);
  2.     int batchInsert(Map<String,Object> param);

    实现
实现

   
/**

     * 新增数据

     * 
@param customer

     * 
@return

     
*/

    
public int add(Customer customer) {

        
return insert("customer.insert", customer);

    }

 

    
/**

     * 批量插入数据

     * 
@param param

     * 
@return

     
*/

    
public int batchInsert(Map<String,Object> param) {

        
return insert("customer.batchInsert", param);

    }

 

    
/**

     * 公共部分

     * 
@param statementId

     * 
@param obj

     * 
@return

     
*/

    
private int insert(String statementId, Object obj){

        SqlSession sqlSession 
= null;

        
try {

            sqlSession 
= SqlsessionUtil.getSqlSession();

            
int key =  sqlSession.insert(statementId, obj);

            
// commit

            sqlSession.commit();

            
return key;

        } 
catch (Exception e) {

            sqlSession.rollback();

            e.printStackTrace();

        } 
finally {

            SqlsessionUtil.closeSession(sqlSession);

        }

        
return 0;

    }

posted @ 2019-05-23 11:29 半导体 阅读(120) | 评论 (0)编辑 收藏

springboot中树形结构的开发

POM中引入
        <!--JSON树形结构 转换-->
        
<dependency>
            
<groupId>net.sf.json-lib</groupId>
            
<artifactId>json-lib</artifactId>
            
<version>2.4</version>
            
<classifier>jdk15</classifier>
        
</dependency>
实体类创建
import net.sf.json.JSONArray;

import java.util.ArrayList;
import java.util.List;

/**
 * 构造目录JSON树
 * Created by   network on 2019/5/22
 
*/
public class TreeBuilder {

    List
<Node> nodes = new ArrayList<>();

    
public String buildTree(List<Node> nodes) {

        TreeBuilder treeBuilder 
= new TreeBuilder(nodes);

        
return treeBuilder.buildJSONTree();
    }

    
public TreeBuilder() {
    }

    
public TreeBuilder(List<Node> nodes) {
        
super();
        
this.nodes = nodes;
    }

    
// 构建JSON树形结构
    public String buildJSONTree() {
        List
<Node> nodeTree = buildTree();
        JSONArray jsonArray 
= JSONArray.fromObject(nodeTree);
        
return jsonArray.toString();
    }

    
// 构建树形结构
    public List<Node> buildTree() {
        List
<Node> treeNodes = new ArrayList<>();
        List
<Node> rootNodes = getRootNodes();
        
for (Node rootNode : rootNodes) {
            buildChildNodes(rootNode);
            treeNodes.add(rootNode);
        }
        
return treeNodes;
    }

    
// 递归子节点
    public void buildChildNodes(Node node) {
        List
<Node> children = getChildNodes(node);
        
if (!children.isEmpty()) {
            
for (Node child : children) {
                buildChildNodes(child);
            }
            node.setChildren(children);
        }
    }

    
// 获取父节点下所有的子节点
    public List<Node> getChildNodes(Node pnode) {
        List
<Node> childNodes = new ArrayList<>();
        
for (Node n : nodes) {
            
if (pnode.getId().equals(n.getPid())) {
                childNodes.add(n);
            }
        }
        
return childNodes;
    }

    
// 判断是否为根节点
    public boolean rootNode(Node node) {
        
boolean isRootNode = true;
        
for (Node n : nodes) {
            
if (node.getPid().equals(n.getId())) {
                isRootNode 
= false;
                
break;
            }
        }
        
return isRootNode;
    }

    
// 获取集合中所有的根节点
    public List<Node> getRootNodes() {
        List
<Node> rootNodes = new ArrayList<>();
        
for (Node n : nodes) {
            
if (rootNode(n)) {
                rootNodes.add(n);
            }
        }
        
return rootNodes;
    }

    
public static class Node {

        
private String id;
        
private String pid;
        
private String name;
        
private List<Node> children;

        
public Node() {
        }

        
public Node(String id, String pid, String name) {
            
super();
            
this.id = id;
            
this.pid = pid;
            
this.name = name;
        }

        
public String getId() {
            
return id;
        }

        
public void setId(String id) {
            
this.id = id;
        }

        
public String getPid() {
            
return pid;
        }

        
public void setPid(String pid) {
            
this.pid = pid;
        }

        
public String getName() {
            
return name;
        }

        
public void setName(String name) {
            
this.name = name;
        }


        
public List<Node> getChildren() {
            
return children;
        }

        
public void setChildren(List<Node> children) {
            
this.children = children;
        }
    }
}
mapper.xml
    <!--根据条件查询返回Node-->
    
<select id="findByItemtypeTree" parameterType="BsItemtype" resultType="Node">
        SELECT upcode as pid,itemname as name,itemtypecode as id FROM 表名 WHERE 1=1
        
<if test="upcode != null  and upcode != '' ">
            and upcode = #{值}
        
</if>
    
</select>
controller:返回结果
    //树形结构
    @RequestMapping("left")
    ModelAndView left() 
throws JSONException {
        String mavStr 
= "";
        BsItemtype queryItemtype 
= new BsItemtype();
        
//查询根目录树
      
//  queryItemtype.setUpcode("00");
        
// 获取全部目录节点
        List<TreeBuilder.Node> itemtypeTree = itemtypeService.findByItemtypeTree();

        
// 拼装树形json字符串
         mavStr = new TreeBuilder().buildTree(itemtypeTree);
        mavStr 
= mavStr.replaceAll("\"children\"","\"nodes\"");
        mavStr
= mavStr.replaceAll("\"id\"","\"value\"");
        mavStr 
= mavStr.replaceAll("\"name\"","\"text\"");
        ModelAndView mav 
= new ModelAndView("/bs/itemtype/itemtypeLeft.html");//配置返回路径
        System.out.println(mavStr);
        mav.addObject(
"mavStr", mavStr.toString());
        
return mav;
    }
DAO层:
List<TreeBuilder.Node> findByItemtypeTree();

html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<html lang="en">
<head>
    
<meta charset="UTF-8">
    
<title></title>

    
<!-- Required Stylesheets -->
    
<link href="/oastyle/css/bootstrap.css" rel="stylesheet">
    
<!-- Required Javascript -->
    
<script src="/js/jquery.js"></script>
    
<script src="/js//bootstrap-treeview.js"></script>
</head>
<body>
<div id="tree"></div>
<script th:inline="javascript">
var tree = eval([[${mavStr}]]);
         
function getTree() {
        
// Some logic to retrieve, or generate tree structure
        return tree;
    }

    $('#tree').treeview({
        data: getTree(),
        enableLinks: 
true});

    $('#tree').on('nodeSelected',
function(event, data) {
          window.parent.itemtypeRight.location.href
="/itemtype/list?upcode="+data.value;
    });

</script>

</body>
</html>

posted @ 2019-05-21 19:08 半导体 阅读(2047) | 评论 (0)编辑 收藏

技巧

layui
可以做表格排序。

posted @ 2019-05-16 21:14 半导体 阅读(67) | 评论 (0)编辑 收藏

分页方式:

前台:
<form   method="post" action = "/bbs/list"  id="queryform">
        
<input type="hidden" name="start" id="start"/>
        
<li>搜索:</li>
                
<input type="text" placeholder="请输入公告名称" name="title"  th:value ="${queryBbs.title}" />
              
<href="javascript:void(0)" class="button border-main icon-search" onclick="changesearch()" > 搜索</a>
    
</form>
    //搜索
    function changesearch() {
        $(
"#queryform").submit();
    }
通过page传值
<div class="pagelist" th:include="common/footer::page"/>
包含页面
<!--fotter-->
<div class="pagelist" th:fragment="page">
    
<a th:onclick="javascript:page(0)">[首 页]</a>
    
<a th:onclick="javascript:page([[${page.pageNum}]]-1)">[上一页]</a>
    
<a th:onclick="javascript:page([[${page.pageNum}]]+1)">[下一页]</a>
    
<a th:onclick="javascript:page([[${page.pages}]])">[尾 页]</a>
    共[[${page.total}]]条记录
</div>
//分页跳转方法
function page(pageNum) {
$(
"#start").val(pageNum);
$(
"#queryform").submit();
}
此种方法可以将搜索查询框内容通过form表单的方式提交给controller,controller再分页,但点“下一页”事件多点二次很容易导致浏览器假死。

第二种方式:直接通过href传值,这种方式不死机。
                        <div class="pagelist">
                        
<th:href="@{/bbs/list(start=0,title=${queryBbs.title})}">[首  页]</a>
                        
<th:href="@{/bbs/list(start=${page.pageNum-1},title=${queryBbs.title})}">[上一页]</a>
                        
<th:href="@{/bbs/list(start=${page.pageNum+1},title=${queryBbs.title})}">[下一页]</a>
                        
<th:href="@{/bbs/list(start=${page.pages},title=${queryBbs.title})}">[尾  页]</a>
                            共[[${page.total}]]条记录
                        
</div>

posted @ 2019-05-15 15:21 半导体 阅读(104) | 评论 (0)编辑 收藏

org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing

     摘要: 错误如下:Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->org.thymeleaf.exceptions.TemplateInputException: An error happened during&nbs...  阅读全文

posted @ 2019-05-12 15:15 半导体 阅读(7795) | 评论 (0)编辑 收藏

好看的界面

windows风格
https://www.toufu.xyz
layui

网页模板素材
http://www.htmlsucai.com/forum-78-1.html
http://www.cssmoban.com/cssthemes/houtaimoban/
http://www.16sucai.com/
https://www.58pic.com/

posted @ 2019-05-11 23:17 半导体 阅读(92) | 评论 (0)编辑 收藏

Spring+Mybatis 查询所有数据时发生异常:org.apache.ibatis.reflection.ReflectionException: There is no getter for

Spring+Mybatis框架整合时,根据条件查询数据,发生异常
Caused by: org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'sname' in 'class java.lang.String'
userinfoMapper.xml文件:
<select id="findAll" parameterType="string" resultMap="userinfoMap">  select * from userinfo where sname like '%${sname}%' </select>
UserinfoMapper接口:

public List<Userinfo> findAll(String sname);
解决方法:在参数前加@Param标签
public List<Userinfo> findAll(@Param("sname") String sname);

posted @ 2019-05-11 16:05 半导体 阅读(1585) | 评论 (0)编辑 收藏

全选输出checkbox的值

$("input[name='a']").each(function () {
            Aval 
= $(this).val();
            alert(Aval);
        });

解释:取当前页面所有name='a'的input元素,循环每一个取到的元素,将其value的值赋

给Aval,并输出。


posted @ 2019-05-11 14:48 半导体 阅读(81) | 评论 (0)编辑 收藏

mysql8.0使用sqlyog无法连接时

 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

如果mysql只能本地连接,不能远程 连接
第一步:
 update user set host='%' where user='root';
第二步:重启服务

posted @ 2019-05-06 10:14 半导体 阅读(241) | 评论 (0)编辑 收藏

jquery常用语法

$(":text[name='username']").val()

$("#logOn").click(function () {
});
1、jquery引入基本语法:
 $(function(){});

2、触发所有button元素的click事件
    $(
":button").click( ); // 调用不带任何参数的click()函数,会触发每个匹配元素的click事件.
 3、// 点击链接时,阻止链接跳转
    $(
"a").click( function(){
       
return false;
    } );

posted @ 2019-05-04 21:57 半导体 阅读(88) | 评论 (0)编辑 收藏

springboot+ssm+mysql 错误记录

HikariPool-1 - Driver does not support get/set network timeout for connections. (com.mysql.jdbc.JDBC4Connection.getNetworkTimeout()I)
解决办法:在application.properties数据库连接中增加:&serverTimezone=UTC
Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
解决办法:打开mysql,输入set global time_zone='+8:00';
还有给我自己提个醒,报错信息千万别只看一句,如果第一句报错没给你答案,后面的报错信息继续看。

posted @ 2019-04-29 23:05 半导体 阅读(477) | 评论 (0)编辑 收藏

字符串型转换为JSON并获取值

@RequestMapping(value = "updateInvestorApplyAccountNo", method = RequestMethod.POST)
@ResponseBody
public void updateInvestorApplyAccountNo(HttpServletRequest request,
HttpServletResponse response,
@RequestBody String requestBody) {
int num = 0;
String result = "";
//下面是把拿到的json字符串转成 json对象
JSONObject jsStr = JSONObject.parseObject(requestBody); //将字符串{“id”:1}
//int jsID = Integer.parseInt(jsStr.getString("id"));//获取id的值


/** 
* json对象转换成java对象 
*/ 
InvestorApplyModel stud = (InvestorApplyModel) JSONObject.toJavaObject(jsStr,InvestorApplyModel.class);

}

posted @ 2018-08-25 15:38 半导体 阅读(156) | 评论 (0)编辑 收藏

redirect_uri域名与后台配置不一样,错误码10003

微信获取openid时,如遇到以下错误

解决方法如下:
1、获取openid时,链接地址https://open.weixin.qq.com/connect/oauth2/authorize? 中redirect_uri一定要带上http,
   公众号设置->功能设置->网页授权域名中的域名与redirect_uri域名要一模一样,记得一定要加上http://

posted @ 2018-08-22 10:14 半导体 阅读(604) | 评论 (0)编辑 收藏

JAVA+ORACLE+BLOB+Mybatis

实体类:
    private  byte[] richContent;
    
public byte[] getRichContent() {
        
return richContent;
    }


    
public void setRichContent(byte[] richContent) {
        
this.richContent = richContent;
    }

Mapper.xml
    <result column="RICH_CONTENT" property="richContent" jdbcType="BLOB" typeHandler="org.apache.ibatis.type.BlobTypeHandler"/>

      <if test="richContent != null" >
        UPDATE_DATE = #{richContent,jdbcType=BLOB},
      
</if>
JSP
<td class="propname">发布内容:</td>
<td class="propvalue" colspan="6">
<div id="myEditor" type="text/plain" name='content' style="width: 900px;height:400px;"/>
</td>
CONTROL保存
    //利用content转换为二进制,存入richcontent
String strRich = newsBean.getContent();
if(strRich.length()>0) {
byte[] temp = strRich.getBytes();
newsBean.setRichContent(temp);
newsBean.setContent("");
}

CONTROL显示:
if(casNewsModel.getRichContent().length>0) {
content = new String(casNewsModel.getRichContent());
casNewsModel.setContent(content);
}



posted @ 2018-01-22 20:34 半导体 阅读(197) | 评论 (0)编辑 收藏

模拟登录解决方案

最近一直在做单点登录,随着客户需求不同,解决方案也是多种多样,来说说我总结的解决方案:
一、采用标准接口方式实现单点登录,由于夜已深,以后再上传。
二、采用模拟登录,在门户中让用户输入用户名密码,再模拟用户登录的方式实现系统登录。
当客户提出这种方式时,本人是表示不理解,考虑到安全性本想拒绝,但。。。客户永远是god。
说说这种方式实现的思路吧,用户登录无非几种,
第一:输入用户名密码然后uget或post提交,有密码在手,get方式大家都会,post也很容易,登陆页另存为,form action填远程登陆地址,正常就O了。   
        千万注意,如果用户传的中文,一定要保证不乱码,传输的编码要与系统对应,在<post 中增加编码格式就行了,如:
<form action="远程提交地址"   accept-charset="GB2312" onsubmit="document.charset='GB2312';"/>
第二:如果碰到先加密,再私钥配对这种,模拟他的整个过程,因为密码在手,他调什么方法,你也调,他怎么混,你也照着混。只是步骤多,其他都一样,

posted @ 2017-12-24 00:13 半导体 阅读(125) | 评论 (0)编辑 收藏

ajax调用方法

i不跨域调用

$(document).ready(function() {
$.ajax({
type : 'post',
url :' <%=path%>/mplat/InitAllMenu',
data : {},
cache : false,
dataType : 'json',
success : function(data, stats) {alert(data.menus);
// var returnData=JSON.parse(data);
/* var returnData = data;
appname = returnData.appname;
allTreeNodes = JSON.parse(returnData.menus);*/
},
error : function() {debugger;
alert( "加载应用名出现问题..");
}
})
;

跨域请用jsonp访问,由于回调时会报callback错误,请直接用jquery-jsonp插件;

做跨域数据处理的时候经常使用Jquery的getJSONP方法。但是这个方法跟普通的Ajax是完全不一样的,尽管指定了error,当请求发生错误的时候也不会去执行这个函数。

jQuery-JSONP 是一个支持 JSONP 调用的 jQuery 插件,它支持出错时的 Ajax 回调。下载地址:https://github.com/jaubourg/jquery-jsonp

使用方法很简单,直接引用Down到的文件到你的页面。

$.jsonp({
        url: "/Handler/demo",
        data: { yourdata: "data" },
        callback:"callbackAction",
        success: function (json) {
            //your code            
        },
        error: function (xOptions, textStatus) {
            //your code           
        }
    });

  

注意事项:


http://blog.csdn.net/function_jx_/article/details/47124815
  1. callback:假如指定的值是callbackAction,服务端返回的json数据必须包含在callbackAction()里面。(具体原因请了解一下Jsonp实现原理)

posted @ 2017-12-13 16:50 半导体 阅读(173) | 评论 (0)编辑 收藏

java文件上传工具

uploadify:文件可以切片存放,目前常用

http://www.plupload.com/examples/ 

webUploader

swfUpload:界面漂亮,但文件不能切片存放

posted @ 2017-11-20 16:51 半导体 阅读(151) | 评论 (0)编辑 收藏

powerdesigner反向工程时报错odbc驱动问题

找了很久终于找到64位的powerdesigner16.5了,网上基本所有的默认为32位的,但是现在数据库基本都是64位的了,这样在逆向生成pdm时就会报错,请叫我雷锋。

链接:http://pan.baidu.com/s/1slwAjSh

提取密码:d4gw

需要破解文件的可以在我的上传资源里找到,绝对可以用,本人亲测的!

转自:http://blog.csdn.net/danfeixia123/article/details/53381733

posted @ 2017-11-07 15:17 半导体 阅读(232) | 评论 (0)编辑 收藏

IDE环境配置

oracle 下载地址:http://blog.itpub.net/16886618/viewspace-1365348/
MAVEN安装:http://www.cnblogs.com/izecsonLee/p/6155868.html   最后setting文件localRepository改为 本机地址。

posted @ 2017-10-17 23:43 半导体 阅读(211) | 评论 (0)编辑 收藏

微信公众平台申请测试接口URL和TOKEN的配置,怎么在本地让微信能通过80端口访问

  最近开始微信公众平台的捣鼓,但相信和很多新手一样,遇到的第一件事就是如何配置url,主要是微信的80端口的蛋疼限制,我想这其中的流程应该是这样 的。我们在申请测试帐号时,微信需要指定一个URL和TOKEN,这样微信就可以根据分配给你的APPID和SECRET来通过你提供的URL来认证并且 通过这个接口返回你要的数据,所以也就是我们的程序和微信是能过这个URL来完成交互的,根据这个思路,我们需要一个能让微信访问到你项目的URL,至于 TOKEN可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)

在公司,首先应当解决的是怎么让外网访问你的项目,我用的是JAVA语言来做开发,刚 开始想通过3322动态解析平台让外网映射到公司来,然后用路由来做一个映射到我的tomcat 8080端口,但尝试后发现3322这个是不能用80端口做映射(很多都这样),所以没办法,也不能直接上公司的服务器来开发,而且80会被其他端口占 用,如果把项目托管到云服务器上也不方便开发,幸好在一个群里遇到高手,建议用ngrok直接把本地开放给外网(大喜),下载后直接把这个解压(我用的是ubuntu,所以下的linux版),在终端里运行./ngrok 8080,这样ngrok会返回一个动态的URL,果然可以访问了,但问题是我在微信里填写的这个URL不可能每次都变呀,于是运行./ngrok -subdomain=test 8080,但这个需要注册才可以用,于是去官网注册。 再根据提示运行一次验证,然后运行这个就OK了,这样我的URL就固定为http://test.ngrok.com。于是乎,我填写微信的URL为 http://test.ngrok.com/mywork/app/action/service(项目访问路径), 打开这tomcat,这样不要做任何更改就可以让外网访问了,然后点击申请认证,就可以看到微信平台已经访问到这我的项目了,接下来做一些验证(下篇贴出 验证代码-java版),OK。这下可以看到配置成功了。至此结束,开始微信之旅,这里感谢群里的老K,和其他的一些兄弟。


来源:
http://blog.csdn.net/aj1031689/article/details/17436125

posted @ 2015-10-23 13:11 半导体 阅读(374) | 评论 (0)编辑 收藏

android软银盘始终显示,并显示在焦点上

//强制显示软银盘
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//edittext默认焦点
scanbill.setFocusable(true);
scanbill.requestFocus();
scanbill.setFocusableInTouchMode(true);

posted @ 2015-07-03 20:09 半导体 阅读(207) | 评论 (0)编辑 收藏

安卓安装

http://wenku.baidu.com/link?url=7c2-Fo9694hJtWxlwsab09f8fv81BPQmrWMQD8z1zxUSnvnM2FfECc4gN0yewgxkSUhLkdbrG4euc2CULcjQHY7fUn5xzjDedELXAcY-2sG&qq-pf-to=pcqq.c2c

posted @ 2015-06-03 12:17 半导体 阅读(183) | 评论 (0)编辑 收藏

[Android实例] 查找手机中所有的APK,并点击其中任一应用程序进入其中

http://www.eoeandroid.com/forum.php?mod=viewthread&tid=203302

posted @ 2015-05-26 11:37 半导体 阅读(180) | 评论 (0)编辑 收藏

android跳转到另一个类再返回当前类和值

第一步:在A类中点击按钮时调用B类
A类中:
int OUTBILL_CODE = 10;//全局啊
  case R.id.diyoutbill:
   intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
   intent.setClass(ctx, Itemdiydown.class);
   intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
   startActivityForResult(intent,OUTBILL_CODE);
   break;
第二步:
B类中:
      Bundle bundle = new Bundle();   
      bundle.putString("downtype",pubdowntype);
      bundle.putString("startDate",pubstartDate);
      bundle.putString("endDate", pubendDate);
   Itemdiydown.this.setResult(RESULT_OK, this.getIntent().putExtras(bundle));   
   Itemdiydown.this.finish();//关闭当前窗口 
第三类:
返回A类中:
 protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  // TODO Auto-generated method stub
  super.onActivityResult(requestCode, resultCode, data);
  if (requestCode == OUTBILL_CODE&& resultCode == RESULT_OK) {//
    Bundle bundle = data.getExtras();
          startDate = bundle.getString("startDate");
          endDate = bundle.getString("endDate");
          downtype = bundle.getString("downtype");
          //执行事件
  }
 }

posted @ 2015-05-23 16:59 半导体 阅读(185) | 评论 (0)编辑 收藏

android连接数据库sqllist基础操作学习:

基础学习:
http://blog.csdn.net/liuhe688/article/details/6715983/

Android 数据存储——SQLite实例、判断数据库中表是否存在
http://www.2cto.com/kf/201502/375368.html

posted @ 2015-05-23 11:19 半导体 阅读(345) | 评论 (0)编辑 收藏

SharedPreferences存储和读取数据

     摘要: 转自:http://blog.sina.com.cn/s/blog_4f1c99de0101hur1.html除了SQLite数据库外,SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息。其存储位置在/data/data/<包名>/shared_prefs目录下。SharedPrefer...  阅读全文

posted @ 2015-05-21 13:14 半导体 阅读(189) | 评论 (0)编辑 收藏

JAVA获取配置信秘

java.util.Properties props = new java.util.Properties();
  in = getClass().getResourceAsStream("/HotelBeContextDAO.properties");
  try {
   props.load(in);
    props.getProperty("officeCode")
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

posted @ 2015-05-20 09:33 半导体 阅读(161) | 评论 (0)编辑 收藏

用webview写界面,加载本地js,js,html文件

转自:http://www.tuicool.com/articles/3mE7BzR
以jquery mobile为例

1.在android界面拖入一个webview,然后添加一个internet权限

<uses-sdk  
    android:minSdkVersion="8"  
    android:targetSdkVersion="18" />  
<uses-permission android:name="android.permission.INTERNET"/>  
  
<application  
            .............................  
View Code

2.  在assets目录里面放入js,css,html资源文件

3.在写本地html的时候引入assert里的对应路径

<!DOCTYPE html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
<meta name="viewport" content="width=device-width, initial-scale=1">   
<title> 标题 </title>  
<link rel="stylesheet" type="text/css" href="file:///android_asset/css/jquery.mobile-1.4.2.min.css">  
<script src="file:///android_asset/js/jquery-1.7.1.min.js"></script>  
<script src="file:///android_asset/js/jquery.mobile-1.4.2.min.js"></script>  
</head>  
<body>  
  
  
 <div data-role="page">  
   <div data-role="header">  
    <h1>My Title</h1>  
   </div>  
     
   <div data-role="content">  
    <ul data-role="listview" data-inset="true" >  
      <li><a href="#">Acura</a></li>  
      <li><a href="#">Audi</a></li>  
      <li><a href="#">BMW</a></li>  
      <li><a href="#">Cadillac</a></li>  
      <li><a href="#">Ferrari</a></li>  
    </ul>   
   </div>  
 </div><!-- /page -->  
  
</body>  
</html>
View Code

4.在代码里访问页面

package com.example.asd_webview;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.webkit.WebSettings;
import android.webkit.WebSettings.RenderPriority;
import android.webkit.WebView;

public class MainActivity extends Activity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    WebView webview = (WebView)findViewById(R.id.webView1);
    WebSettings wv_setttig = webview.getSettings();
    wv_setttig.setJavaScriptEnabled(true);
    //wv_setttig.setRenderPriority(RenderPriority.HIGH);
    
    String url = "file:///android_asset/index.html";
    webview.loadUrl(url);
    
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
  }

}
View Code

5.最后效果如下:

posted @ 2015-05-15 17:03 半导体 阅读(462) | 评论 (0)编辑 收藏

CSS图片适应DIV或TD

img{
max-width:100%;height:auto;
}

posted @ 2015-05-15 12:19 半导体 阅读(195) | 评论 (0)编辑 收藏

android在布局中图片大小自适应

一、适应某控制:
      XML:

                <WebView
                    android:id="@+id/awaimage"
                    android:layout_width="90dp"
                    android:layout_height="80dp"
                    android:layout_marginLeft="2dp"
            android:layout_marginRight="2dp"
            android:scaleType="fitXY"

     JAVA:
/*            WebSettings webSettings = holder.imageView.getSettings();    
            webSettings.setUseWideViewPort(true); //设置加载进来的页面自适应手机屏幕 
            webSettings.setLoadWithOverviewMode(true); 
*/

            
//允许使用javascript  
       
//     webSettings.setJavaScriptEnabled(true); 

二、自动适应屏幕大小:
         WebSettings webSettings = holder.imageView.getSettings();   
         webSettings.setUseWideViewPort(true); //设置加载进来的页面自适应手机屏幕
         webSettings.setLoadWithOverviewMode(true); 
         //允许使用javascript  
         webSettings.setJavaScriptEnabled(true);

posted @ 2015-05-13 14:39 半导体 阅读(368) | 评论 (0)编辑 收藏

Android图片处理内存溢出学习

    

        Android图片处理内存溢出学习             

原文:

http://blog.csdn.net/huangbiao86/article/details/8072128

最近遇到一个问题,在Android机器上,调用自带的相机拍摄后获得相处,并且对获得的相片进行缩放,旋转,截取等操作,看似很简单,但是却遇到了一个,让人心疼的问题,我这里用五能手机进行测试,当然,功能测试是没有问题,当发给客户去测试的时候,却出现了内存溢出,哎无言啊...

原来他用的是三星的G3手机进行测试的,我们没有这款手机,后来借别人的G3手机测试,果然也出现这个问题:

  1. java.lang.OutOfMemoryError  
  2. at android.graphics.BitmapFactory.nativeDecodeByteArray(Native Method)  
  3. at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:518)  
  4. at android.graphics.BitmapFactory.decodeByteArray(BitmapFactory.java:535)  
  5. at com.yippeearts.flashcards.CameraPage$1.onPictureTaken(CameraPage.java:73)  
  6. at android.hardware.Camera$EventHandler.handleMessage(Camera.java:734)  
  7. at android.os.Handler.dispatchMessage(Handler.java:99)  
  8. at android.os.Looper.loop(Looper.java:137)  
  9. at android.app.ActivityThread.main(ActivityThread.java:4514)  
  10. at java.lang.reflect.Method.invokeNative(Native Method)  
  11. at java.lang.reflect.Method.invoke(Method.java:511)  
  12. at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)  
  13. at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)  
  14. at dalvik.system.NativeStart.main(Native Method)  

这个在不同的手机上出现这种错误还是有点尴尬的。一直以为是对图片的逻辑处理出了什么问题,经过总结发现,估计是因为G3手机拍摄相片分辨率过高,使图片过大,造成过程中内存溢出,通过网上搜索若干解决加载大图片时内存溢出的问题:

 

尽量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource来设置一张大图,因为这些函数在完成decode后,最终都是通过java层的createBitmap来完成的,需要消耗更多内存。

因此,改用先通过BitmapFactory.decodeStream方法,创建出一个bitmap,再将其设为ImageView的 source,decodeStream最大的秘密在于其直接调用JNI>>nativeDecodeAsset()来完成decode,无需再使用java层的createBitmap,从而节省了java层的空间。
如果在读取时加上图片的Config参数,可以跟有效减少加载的内存,从而跟有效阻止抛out of Memory异常
另外,decodeStream直接拿的图片来读取字节码了, 不会根据机器的各种分辨率来自动适应, 使用了decodeStream之后,需要在hdpi和mdpi,ldpi中配置相应的图片资源, 否则在不同分辨率机器上都是同样大小(像素点数量),显示出来的大小就不对了。


内存溢出解决办法:

1、模拟器RAM比较小,只有8M内存,当我放入的大量的图片(每个100多K左右),就出现上面的原因。由于每张图片先前是压缩的情况,放入到Bitmap的时候,大小会变大,导致超出RAM内存,具体解决办法如下:

  1. // 解决加载图片 内存溢出的问题  
  2. // Options 只保存图片尺寸大小,不保存图片到内存  
  3. BitmapFactory.Options opts = new BitmapFactory.Options();  
  4. // 缩放的比例,缩放是很难按准备的比例进行缩放的,其值表明缩放的倍数,SDK中建议其值是2的指数值,值越大会导致图片不清晰  
  5. opts.inSampleSize = 4;  
  6. Bitmap bmp = null;  
  7. bmp = BitmapFactory.decodeResource(getResources(), mImageIds[position],  
  8.                 opts);  
  9. // 回收  
  10. bmp.recycle();  

2、优化Dalvik虚拟机的堆内存分配

 

对于Android平台来说,其托管层使用的Dalvik JavaVM从目前的表现来看还有很多地方可以优化处理,比如我们在开发一些大型游戏或耗资源的应用中可能考虑手动干涉GC处理,使用dalvik.system.VMRuntime类提供的setTargetHeapUtilization方法可以增强程序堆内存的处理效率。当然具体原理我们可以参考开源工程,这里我们仅说下使用方法:   private final static floatTARGET_HEAP_UTILIZATION = 0.75f; 在程序onCreate时就可以调用VMRuntime.getRuntime().setTargetHeapUtilization(TARGET_HEAP_UTILIZATION);即可。

Android堆内存也可自己定义大小

对于一些Android项目,影响性能瓶颈的主要是Android自己内存管理机制问题,目前手机厂商对RAM都比较吝啬,对于软件的流畅性来说RAM对性能的影响十分敏感,除了 优化Dalvik虚拟机的堆内存分配外,我们还可以强制定义自己软件的对内存大小,我们使用Dalvik提供的dalvik.system.VMRuntime类来设置最小堆内存为例:

  1. private final static int CWJ_HEAP_SIZE = 610241024 ;  
  2.   
  3. VMRuntime.getRuntime().setMinimumHeapSize(CWJ_HEAP_SIZE); //设置最小heap内存为6MB大小。当然对于内存吃紧来说还可以通过手动干涉GC去处理  

bitmap 设置图片尺寸,避免 内存溢出 OutOfMemoryError的优化方法
★android 中用bitmap 时很容易内存溢出,报如下错误:Java.lang.OutOfMemoryError : bitmap size exceeds VM budget

 

主要是加上这段:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;

 eg1:(通过Uri取图片)

  1. private ImageView preview;  
  2. BitmapFactory.Options options = new BitmapFactory.Options();  
  3. options.inSampleSize = 2;//图片大小,设置越大,图片越不清晰,占用空间越小  
  4. Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri), null, options);  
  5. preview.setImageBitmap(bitmap);  

eg2:(通过路径去图片)

 

  1. private ImageView preview;  
  2. private String fileName= "/sdcard/DCIM/Camera/2010-05-14 16.01.44.jpg";  
  3. BitmapFactory.Options options = new BitmapFactory.Options();  
  4. options.inSampleSize = 2;//图片宽高都为原来的二分之一,即图片为原来的四分之一  
  5. Bitmap b = BitmapFactory.decodeFile(fileName, options);  
  6. preview.setImageBitmap(b);  
  7. filePath.setText(fileName);  

在图片处理的时候,确保图片引用及时回收。

posted @ 2015-05-12 18:54 半导体 阅读(217) | 评论 (0)编辑 收藏

安卓 html显示时,图片无法加载

<!--  hardwareAccelerated解决4.0启动了硬件加速 ,HTML网络图片无法正常显示的问题-->
android:hardwareAccelerated="false"

posted @ 2015-05-05 20:57 半导体 阅读(260) | 评论 (1)编辑 收藏

安卓显示HTML

方法1、使用 CDATA(推荐)
<string name="demoStr"><Data><![CDATA[ <b>ABC</b> ]]> </Data></string>
方法2、转义HTML标签
<string name="myHeadStr">&lt;b>&lt;u>bold, underline &lt;/u>&lt;/b></string>
在程序里引用:
Html.fromHtml(getResources().getString(R.string.myHeadStr));
效果图
android string html标签用法
string.xml代码
Code   ViewCopyPrint
  1. <string name="test"><Data><![CDATA[ <b><font color="#ff0000">ABC</font></b> ]]></Data></string>  

java代码:

Code   ViewCopyPrint
  1. import android.app.Activity;   
  2. import android.app.AlertDialog;   
  3. import android.content.DialogInterface;   
  4. import android.os.Bundle;   
  5. import android.text.Html;   
  6.   
  7. public class testActivity extends Activity {   
  8.     public void onCreate(Bundle savedInstanceState) {   
  9.         super.onCreate(savedInstanceState);   
  10.         AlertDialog.Builder dialog = new AlertDialog.Builder(testActivity.this);   
  11.         dialog.setTitle("测试HTML标签").setMessage(Html.fromHtml(getString(R.string.test))).setPositiveButton(getString(R.string.btn_confirm), new DialogInterface.OnClickListener() {   
  12.             public void onClick(DialogInterface dialog, int which) {   
  13.   
  14.             }   
  15.         }).create().show();   
  16.     }   
  17. }   

posted @ 2015-05-05 13:39 半导体 阅读(115) | 评论 (0)编辑 收藏

eclipse luna+tomcat7.0+JDK7.0+maven环境配置

eclipse luna+tomcat7.0+JDK7.0+maven环境配置

一、下载相关包:

eclipse luna下载地址 :  http://www.eclipse.org/downloads/

JDK7.0下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Tomcat7.0下载地址:

http://tomcat.apache.org/download-70.cgi

MAVEN下载地址:http://maven.apache.org/

二、环境变量配置(根据软件安装位置配置如下)

JAVA_HOME: D:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_11\;

PATH: D:\Program Files\TortoiseSVN\bin;C:\Program Files (x86)\Java\jdk1.6.0_11\bin;

M2_HOME:  D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5

PATH D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5\bin

三、    运行eclipse luna

绿色环保,直接运行eclipse.exe就行了


四、导入maven项目前配置

    
A,tomcat
配置





B,JDK配置


C,MAVEN
安装:


D,
导入maven项目:


E,
导入后如果项目报错,请执行:

在项目上右击,选择菜单maven->update project MAVEN会自动搜索项目中需要的jar包)

   F、运行服务:

选择run on server->tomcat 7

iE上输入:http://localhost:8080/项目名   测试一下吧。

posted @ 2015-02-12 10:04 半导体 阅读(2875) | 评论 (1)编辑 收藏

MAVEN环境变量配置

一、JDK配置:JAVA_HOME  PATH 
二、新建M2_HOME环境:  如:D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5
三、PATH:如:D:\Program Files (x86)\apache-maven-3.2.5-bin\apache-maven-3.2.5\bin
     测试Maven环境是否搭建成功,在CMD下输入命令:
      mvn -v
     编译maven项目方法:cmd下指向项目目录下,运行命行:mvn compile
     mvn te

posted @ 2015-02-11 17:41 半导体 阅读(188) | 评论 (0)编辑 收藏

sqlserver创建用户,指定数据库,指定表的权限

http://www.cnblogs.com/gaizai/archive/2011/07/14/2106617.html
记住要选择dbo_owner 别选sysadmin

posted @ 2014-12-03 16:57 半导体 阅读(627) | 评论 (0)编辑 收藏

IREPORT报表实现

     摘要: 一、在JSP中通过传参数实现源代码:(在jasper模板中定义好查询条件及参数) Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--><%@ page language="java" import="java.util...  阅读全文

posted @ 2014-11-19 11:47 半导体 阅读(359) | 评论 (0)编辑 收藏

Spring MVC程序中得到静态资源文件css,js,图片文件的路径问题总结

Spring MVC程序中得到静态资源文件css,js,图片

文件的路径


问题总结

用 Spring MVC 开发应用程序,对于初学者有一个很头疼的问题,那就是程序数据都已经查询出来了,但界面样式仍然十分丑陋,加载不了 css,js,图片等资源文件。当你在浏览器上直接输入某个css文件的路径时,直接得到404错误,而路径肯定没有错,其原因就在于在web.xml 中配置了类似如下的 spring servlet:
程序代码 程序代码

<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>

请注意  <url-pattern>/</url-pattern> 这表示这个servlet 拦截了所有的请求,包括css,js等。所以出现上面描述的情况。如何解决这个css,js等路径问题呢,有如下几种解决方案.

1. 使用spring mvc resource 去读取静态文件
比如在 WEN-INF 下建立static 文件夹,并在 static 文件夹里面建立css 文件夹,然后建立 1.css  文件.
修改 mvc-dispatcher-servlet.xml 文件
程序代码 程序代码

<mvc:resources mapping="/static/**" location="/WEB-INF/static/"/>

这样配置之后,可以通过 http://your-ip:port/your-app/static/css/1.css 直接访问了。

2. 采用 default servlet
在 web.xml  里面配置
程序代码 程序代码

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/static/*</url-pattern>
</servlet-mapping>

这样做了之后,所有前缀为static 的请求都交给default servlet 去处理。如果你请求  http://your-ip:port/your-app/static/css/1.css ,就表示在 webcontent 目录下的css文件夹下的1.css文件。

3. 通过文件扩展名进行处理
在 web.xml 里面配置
程序代码 程序代码

<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.png</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
</servlet-mapping>


4. 对spring servlet 不用restful 风格。在url 上加上前缀
程序代码 程序代码

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>/app</url-pattern>
</servlet-mapping>

这样做的目的是让 dispatchservlet 去拦截以/app 开头的那些 URL,并不拦截css,js等。

5. 对spring servlet 不用restful 风格。在url 上加上后缀
程序代码 程序代码

<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>

这样做的目的是让 dispatchservlet 只拦截*.do 的url. 并不拦截css,js等。

上面介绍的5种方法,根据情况自己任意选择一种,现在没办法说那种好,那种方法不好,都有可取之处,用在不同的场景而已。

posted @ 2014-08-24 23:12 半导体 阅读(23830) | 评论 (3)编辑 收藏

easy ui API中文文档

http://www.cnblogs.com/Philoo/archive/2011/10/01/jeasyui_api_layout.html

posted @ 2014-08-20 15:01 半导体 阅读(234) | 评论 (0)编辑 收藏

ajax easy ui总结

1、重新刷新替换iframe:
$("#childRightFrame1").attr('src',"http://www.baidu.com");
2、

取到easyui的tab下iframe方法

http://liuna718-163-com.iteye.com/blog/1672182

3、Easy UI 点击TAB 标签 刷新内容

$('#tabs').tabs({
        onSelect: function (title) {
            var currTab = $('#tabs').tabs('getTab', title);
            var iframe = $(currTab.panel('options').content);
            var src = iframe.attr('src');
            $('#tabs').tabs('update', { tab: currTab, options: { content: createFrame(src)} });
        }
    });

4、页面显示固定值

{
      field : 'tools',
      title : '操作',
      width : 100,
      formatter:function(value,rowData,index){
      var values ="<input type='button' value='设备控制方案'/>";
      return values
      }
      
     }
5、获取选中行的值
  1. var row = grid.datagrid('getSelected');   
  2. if (row){   
  3.   alert(row.id);   
  4. }  

 6、

利用原生JSON对象,将对象转为字符串

 

 

  1. var jsObj = {};  
  2. jsObj.testArray = [1,2,3,4,5];  
  3. jsObj.name = 'CSS3';  
  4. jsObj.date = '8 May, 2011';  
  5. var str = JSON.stringify(jsObj);  
  6. alert(str);  

 

从JSON字符串转为对象

 

 

  1. var jsObj = {};  
  2. jsObj.testArray = [1,2,3,4,5];  
  3. jsObj.name = 'CSS3';  
  4. jsObj.date = '8 May, 2011';  
  5. var str = JSON.stringify(jsObj);  
  6. var str1 = JSON.parse(str);  
  7. alert(str1);  

posted @ 2014-08-20 10:38 半导体 阅读(145) | 评论 (0)编辑 收藏

在JS方法中返回多个值的三种方法 转

在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现:

1 使用数组的方式,如下:

<html>
<head>
    <title>JS函数返回多个值--oec2003</title>
</head>
<body>
    <input type="button" onclick="getNames()" value="test" />

    <script type="text/javascript">
function getData()
{
    var names=new Array("oec2003","oec2004");
    return names;
}
function getNames()
{
    var names=getData();
    alert(getData()[0]); //返回oec2003
}
</script>

</body>
</html>

 

2 将数据封装到Json中返回,如下:

<html>
<head>
<title>JS函数返回多个值--oec2003</title>
</head>
<body>
<input type="button" onclick="getInfo()" value="test"/>
<script type="text/javascript">
function getData()
{
    var info={"name":"oec2003","age":"25"};
    return info;
}
function getInfo()
{
    var info=getData();
    var name=info["name"];
    var age=info["age"];
    alert("姓名:"+name+" 年龄:"+age);
}
</script>
</body>
</html>

更详细的Json的介绍请看这里

3 这是最简单的一种方法,看下面代码:

<html>
<head>
<title>JS函数返回多个值--oec2003</title>
</head>
<body>
<input type="button" onclick="getInfo()" value="test"/>
<script type="text/javascript">
    function getData()
    {
        return ["oec2003", 25]
    }
    function getInfo()
    {
        var info = getData();
        alert("姓名:" + info[0] + "年龄:" + info[1]);
    }
</script>
</body>
</html>

posted @ 2014-08-18 08:23 半导体 阅读(148) | 评论 (0)编辑 收藏

Tomcat部署发布多个工程详细配置;

 

  apache-tomcat-7.0.40配置:

     一、配置解决多个项目出现内存溢出的问题:
 
      找到:D:\apache-tomcat-7.0.40\bin\catalina.bat
      添加:
              set JAVA_OPTS=%JAVA_OPTS% -server -XX:PermSize=128M -XX:MaxPermSize=512m
    
     在:   echo Using CATALINA_BASE:   "%CATALINA_BASE%"  的上一行;
    
    找到:D:\apache-tomcat-7.0.40\bin\catalina.sh
    添加:
            JAVA_OPTS="$JAVA_OPTS -server -XX:PermSize=128M -XX:MaxPermSize=512m"
   
   在:  echo "Using CATALINA_BASE:   $CATALINA_BASE"  的上二行;
    
  二、配置项目路径:
       
     1.找到:D:\apache-tomcat-7.0.40\conf\server.xml
     2.注释掉原来的  Host  标签及标签内的所有:
   eg: 
  <!-- <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"> -->
   <!-- SingleSignOn valve, share authentication between web applications
    Documentation at: /docs/config/valve.html -->
   <!--
   <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
   -->

   <!-- Access log processes all example.
    Documentation at: /docs/config/valve.html
    Note: The pattern used is equivalent to using pattern="common" -->
   <!-- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
    prefix="localhost_access_log." suffix=".txt"
    pattern="%h %l %u %t &quot;%r&quot; %s %b" />

        </Host> -->
      3.添加:(同级位置)
     <Host name="localhost" debug="0" appBase="webapps"
                    unpackWARs="true"  xmlValidation="false" xmlNamespaceAware="false">
         <Context path="/sxzx" docBase="D:\apache-tomcat-7.0.40\webapps\sxzx"  reloadable="true"   caseSensitive="false"   debug="0"></Context>
      <Context path="/ywgl" docBase="D:\apache-tomcat-7.0.40\webapps\ywgl" reloadable="true"   caseSensitive="false"   debug="0"></Context>
     </Host>
  
      附:Host标签内的属性及值不用修改;
       只改变Context标签内的值:path:访问时候的工程名;
                             docBase:工程部署的位置;
           其他属性及值不用修改;
  
                                                         \ywgl\
   三、两个部署的项目:D:\apache-tomcat-7.0.40\webapps\sxzx\WEB-INF\web.xml中分别添加:(区别另一个项目)
    
    <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>web1.root</param-value>
          </context-param>
   
    <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>web2.root</param-value>
          </context-param>
   
   
  *四、一定注意环境变量JDK的版本 :JAVA_HOME=jdk1.6.0_11、JRE_HOME=jre6: 下发布会有启动报错,只能发布成功一个的情况;  
              JAVA_HOME=jdk1.6.0_16、JRE_HOME=jre6: 下启动一闪而过或则启动失败;
                                      JAVA_HOME=jdk1.7.0_17、JRE_HOME=jre7: 下发布成功,没有报错信息; 
   
   

posted @ 2014-05-21 14:23 半导体 阅读(1160) | 评论 (0)编辑 收藏

项管万能模板

摘要:
2011 年8 月(记住,一定要写和考试时间接近的),我作为项目经理参与了xx 省公安厅
xxxxx项目,该项目投资共500 万元人民币(一定需要写),建设工期为1年,通过该项目的建
设,实现了该省公安信息化工作的……..(自己补充完善),该项目于2012 年8 月,通过了业主
方的验收,赢得了用户的好评。本文结合作者的实际经验,以该项目为例,讨论了信息系统项
目建设过程中的xx 管理(具体根据考试题目来),主要从如下几个方面进行了阐述:(一定要
根据题目,如果说是写进度管理的过程,那就是活动定义,活动排序,资源等等----一定要和下
面正文里的提纲对应上。)------摘要就是这个格式,可以写350-400 字。
正文:
2011年8月,我作为项目经理参与了xx 省公安厅xxxxx项目,该项目投资共500万元人
民币,建设工期为1 年,通过该项目的建设,实现了该省公安信息化工作的……..(自己补充完
善),该系统采用java 语言开发,数据库采用oracle 10g,用到了什么中间件、采用什么架构,
数据库服务器、应用服务器分别采用什么??这些大家根据自己的项目去写,写个500字左右,
别太多,别太少。
由于本项目的顺利上线涉及到业务的考核,因此,在本项目中,xx 管理尤为重要,在本项
目中,我作为项目经理特别除了对其余管理领域进行克制恪守的管理外,特别对xx 管理从如
下几个方面进行了管理-----这是一个过渡段,非常重要。

结尾:(这2 个字在论文里可以不写,我这里写,是让大家好看)
经过我们团队不懈的努力,历时1 年,本项目终于于2012 年8 月,通过了业主方组织的
验收,为用户解决了什么问题,或者是达到了什么目的(根据自己的项目去写)得到了业主的
好评。本项目的成功得益于我成功的xx 管理。当然,在本项目中,还有一些不足之处,比如:
在项目的实施过程中,由于项目组2 名成员因为自身原因突然离职,导致项目的团队建设出现
一些小问题,还有,曾经由于需要购买的服务器由于连日暴雨的不可抗力导致环境搭建进度出
现些许异常(自己去想一些小问题,切忌,别出现什么大问题),不过,经过我后期的纠偏,
并没有对项目产生什么影响。在后续的学习和工作中,我将不断的充电学习,和同行进行交流,
提升自己的业务和管理水平,力争为我国信息化建设做出自己的努力。

posted @ 2014-03-27 10:47 半导体 阅读(135) | 评论 (0)编辑 收藏

spring事务配置及事务测试

方法一:
事务配置:applicatoncontext.xml
 1<!-- 配置事务管理器 -->
 2    <bean id="transactionManager"
 3        class="org.springframework.orm.hibernate3.HibernateTransactionManager">
 4        <property name="sessionFactory">
 5            <ref local="sessionFactory" />
 6        </property>
 7    </bean>
 8    <!---->
 9    <bean id="txProxyTemplate" abstract="true"
10        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
11        <property name="transactionManager">
12            <ref bean="transactionManager" />
13        </property>
14        <property name="transactionAttributes">
15            <props>
16                <prop key="query*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
17                <prop key="find*">PROPAGATION_REQUIRED,readOnly,-Exception</prop>
18                <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
19                <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
20                <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
21                <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
22            </props>
23        </property>
24    </bean>
事务测试(BO继承事务):applicationcontext.xml
<bean id="SysJobBO" parent="txProxyTemplate">
        
<property name="target">
            
<bean
                
class="com.gzlt.sys.user.bo.impl.SysJobBOImpl">
                
<property name="commonDAO"
                    ref
="CommonDAO">
                
</property>
            
</bean>
        
</property>
    
</bean>

BOIMPL中:

    @Override
    public boolean updates(SysJob sysJob) throws Exception {
        // TODO Auto-generated method stub
        commonDAO.add(sysJob);
        sysJob.setIsLeaf("453322222222222222ssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssss");
        commonDAO.add(sysJob);
        return true;
    }

如果事务未起作用,请查看:
1、action中的方法是不是不以add,update,。。开头。
2、有可能是抛出的异常将事务舍弃了。 如果try catch   异常为 applicationException  请改为  applicationException 试试。

方法二:
 

posted @ 2014-03-26 16:46 半导体 阅读(256) | 评论 (0)编辑 收藏

映射文件配置org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():

引起问题的原因:

由Hibernate根据数据库表自动生成的"类名.hbm.xml"映射文件引起的。

首先我的表(Info)由两个字段组成,即:

int id;//主建

String name;

(自己做测试,所以就简单的建了个表)

由Hibernate生成的Info.hbm.xml中是这样写的:

-----------------------------------------------------

<id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="assigned"/>
</id>

-----------------------------------------------------

<id>这个是必须有的。它是用来定义实体的标识属性(对应数据库表的主键)

而我这里由于id本身就是主键,所以column的属性便是id

下面是很关键的一点<generator>,由于一时兴趣,于是找了很多资料,关于它的解释是:用于指定主键的生成策略。它的值有多,下面是转来的:

--------------------------------------------------------------------------------

“assigned”
主键由外部程序负责生成,在   save()   之前指定一个。
   
“hilo”
通过hi/lo   算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
   
“seqhilo”
与hilo   类似,通过hi/lo   算法实现的主键生成机制,需要数据库中的   Sequence,适用于支持   Sequence   的数据库,如Oracle。
   
“increment”
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键。这种方式可能产生的问题是:不能在集群下使用。
   
“identity”
采用数据库提供的主键生成机制。如DB2、SQL   Server、MySQL   中的主键生成机制。
   
“sequence”
采用数据库提供的   sequence   机制生成主键。如   Oralce   中的Sequence。
   
“native”
由   Hibernate   根据使用的数据库自行判断采用   identity、hilo、sequence   其中一种作为主键生成方式。
   
“uuid.hex”
由   Hibernate   基于128   位   UUID   算法   生成16   进制数值(编码后以长度32   的字符串表示)作为主键。
   
“uuid.string”
与uuid.hex   类似,只是生成的主键未进行编码(长度16),不能应用在   PostgreSQL   数据库中。
     
“foreign”
使用另外一个相关联的对象的标识符作为主键。

--------------------------------------------------------------------------------

看了上面的介绍,再看看代码,原来是<Generator>属性设置有问题。

然后改为"identity"、"native"问题便解决。



   在Hibernate中的映射文件配置中,如果在数据库中设置一列为自动增长列,但又不是主键,则在配置时需要设置 property 节点的 "insert" 和“update” 属性为false. 即: <property column="ID" name="id" type="int" insert="false" update="false"/>

posted @ 2014-03-16 22:20 半导体 阅读(773) | 评论 (0)编辑 收藏

myeclipse编译慢的问题

删除.project配置中

1、javascript validation和jtds 选项。
  <buildCommand>
   <name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
   <arguments>
   </arguments>
  </buildCommand>

2、打开myeclipse时,会提示是否加入javascriptvalidation 选择否。

再编译时,速度会快很多倍。

posted @ 2014-01-08 15:43 半导体 阅读(346) | 评论 (0)编辑 收藏

ORACLE转为sqlservr碰到的问题集

1、更改配置:application.xml

 <!-- PROXOOL连接池的设置数据源sqlserver -->
 
 <bean id="dataSource"
  class="org.logicalcobwebs.proxool.ProxoolDataSource">
  <property name="driver">
   <value>com.microsoft.sqlserver.jdbc.SQLServerDriver</value>
  </property>
  <property name="driverUrl">
   <value>jdbc:sqlserver://127.0.0.1:1433; DatabaseName=ctts</value>
  </property>
  <property name="user">
   <value>sa</value>
  </property>
  <property name="password">
   <value>sadmin</value>
  </property>
  <property name="alias">
   <value>ctts</value>
  </property>

        <property name="maximumActiveTime" value="300000"/> 
        <property name="prototypeCount" value="0"/> 
        <property name="maximumConnectionCount" value="12000"/> 
        <property name="minimumConnectionCount" value="1"/> 
        <property name="simultaneousBuildThrottle" value="2000"/> 
        <property name="houseKeepingTestSql" value="select CURRENT_DATE"/> 
 </bean>
2、hibernate配置更改:
  <property name="dialect">
   org.hibernate.dialect.SQLServerDialect
  </property>
3、oracle字段类型为DATE,牵移到sqlserver下,会出现类型转换错误,如:

           将 nvarchar 值转换为 JDBC 数据类型 TIMESTAMP 时发生错误   
        sqlserver反映射后,date类型为:java.sql.Timestamp

         oracle反映射后,date类型为:java.util.Date    

    解决办法:方法一:oracle转换为sqlserver时,DATE类型全部转换为DATETIME.
                    方法二:oracle日期类型全部用varchr(7)  ,这样就不存在转换问题。


 

posted @ 2014-01-08 11:28 半导体 阅读(317) | 评论 (0)编辑 收藏

ROW_NUMBER() OVER函数的基本用法

ROW_NUMBER() OVER函数的基本用法

ROW_NUMBER() OVER函数的基本用法用法

 转自:http://www.cnblogs.com/icebutterfly/archive/2009/08/05/1539657.html

语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN)

简单的说row_number()从1开始,为每一条分组记录返回一个数字,这里的ROW_NUMBER() OVER (ORDER BY xlh DESC) 是先把xlh列降序,再为降序以后的没条xlh记录返回一个序号。
示例:
xlh           row_num
1700              1
1500              2
1085              3
710                4

row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的)

实例:

初始化数据

create table employee (empid int ,deptid int ,salary decimal(10,2))
insert into employee values(1,10,5500.00)
insert into employee values(2,10,4500.00)
insert into employee values(3,20,1900.00)
insert into employee values(4,20,4800.00)
insert into employee values(5,40,6500.00)
insert into employee values(6,40,14500.00)
insert into employee values(7,40,44500.00)
insert into employee values(8,50,6500.00)
insert into employee values(9,50,7500.00)

数据显示为

empid       deptid      salary
----------- ----------- ---------------------------------------
1           10          5500.00
2           10          4500.00
3           20          1900.00
4           20          4800.00
5           40          6500.00
6           40          14500.00
7           40          44500.00
8           50          6500.00
9           50          7500.00

需求:根据部门分组,显示每个部门的工资等级

预期结果:

empid       deptid      salary                                  rank
----------- ----------- --------------------------------------- --------------------
1           10          5500.00                                 1
2           10          4500.00                                 2
4           20          4800.00                                 1
3           20          1900.00                                 2
7           40          44500.00                               1
6           40          14500.00                               2
5           40          6500.00                                 3
9           50          7500.00                                 1
8           50          6500.00                                 2

SQL脚本:

SELECT *, Row_Number() OVER (partition by deptid ORDER BY salary desc) rank FROM employee

 

转自:http://www.cnblogs.com/digjim/archive/2006/09/20/509344.html

我们知道,SQL Server 2005和SQL Server 2000 相比较,SQL Server 2005有很多新特性。这篇文章我们要讨论其中的一个新函数Row_Number()。数据库管理员和开发者已经期待这个函数很久了,现在终于等到了!


 通常,开发者和管理员在一个查询里,用临时表和列相关的子查询来计算产生行号。现在SQL Server 2005提供了一个函数,代替所有多余的代码来产生行号。

 我们假设有一个资料库[EMPLOYEETEST],资料库中有一个表[EMPLOYEE],你可以用下面的脚本来产生资料库,表和对应的数据。

 USE [MASTER]
GO

IF  EXISTS (SELECT NAME FROM SYS.DATABASES WHERE NAME = N'EMPLOYEE TEST')
DROP DATABASE [EMPLOYEE TEST]
GO
CREATE DATABASE [EMPLOYEE TEST]
GO
USE [EMPLOYEE TEST]
GO

IF  EXISTS SELECT * FROM SYS.OBJECTS HERE OBJECT_ID = OBJECT_ID(N'[DBO].[EMPLOYEE]') AND TYPE IN (N'U'))
DROP TABLE [DBO].[EMPLOYEE]
GO

CREATE TABLE EMPLOYEE (EMPID INT, FNAME VARCHAR(50),LNAME VARCHAR(50))
GO
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021110, 'MICHAEL', 'POLAND')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021110, 'MICHAEL', 'POLAND')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2021115, 'JIM', 'KENNEDY')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2121000, 'JAMES', 'SMITH')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (2011111, 'ADAM', 'ACKERMAN')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (3015670, 'MARTHA', 'LEDERER')
INSERT INTO EMPLOYEE  (EMPID, FNAME, LNAME) VALUES (1021710, 'MARIAH', 'MANDEZ')
GO

 我们可以用下面的脚本查询EMPLOYEE表。

 SELECT EMPID, RNAME, LNAME FROM EMPLOYEE

 这个查询的结果应该如图1.0 

2021110

MICHAEL

POLAND

2021110

MICHAEL

POLAND

2021115

JIM

KENNEDY

2121000

JAMES

SMITH

2011111

ADAM

ACKERMAN

3015670

MARTHA

LEDERER

1021710

MARIAH

MANDEZ


图1.0

 在SQL Server 2005,要根据这个表中的数据产生行号,我通常使用下面的查询。 

SELECT ROWID=IDENTITY(int,1,1) , EMPID, FNAME, LNAME INTO EMPLOYEE2 FROM EMPLOYEE ORDER BY EMPID

 这个查询创建了一个新的表,用identify函数来产生行号。我们用下面的查询来看看这个表的数据。 

SELECT ROWID, EMPID, FNAME, LNAME FROM EMPLOYEE2

 上面的查询结果如图1.1 

1

1021710

MARIAH

MANDEZ

2

2011111

ADAM

ACKERMAN

3

2021110

MICHAEL

POLAND

4

2021110

MICHAEL

POLAND

5

2021115

JIM

KENNEDY

6

2121000

JAMES

SMITH

7

3015670

MARTHA

LEDERER


图1.1

 这个查询结果很明显EMP=2021110的行是重复的数据。

 要删除EMPID=2021110的重复数据,我们必须在EMPLOYEE2表中删除,不能直接在EMPLOYEE中删除。

 SQL Server 2005提供了一个新的函数(Row_Number())来产生行号。我们可以使用这个新函数来删除原来表中的重复数据,只用通常的表达方式再加上Row_Number()函数。

 让我们用Row_Number()函数根据EMPID来产生ROWID。

 SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE

 上面的查询结果如图1.2 

1

1021710

MARIAH

MANDEZ

2

2011111

ADAM

ACKERMAN

3

2021110

MICHAEL

POLAND

4

2021110

MICHAEL

POLAND

5

2021115

JIM

KENNEDY

6

2121000

JAMES

SMITH

7

3015670

MARTHA

LEDERER


图1.2

 在这个结果中,我们可以区别EMPID是2021110的重复数据。

 我们可以用通用表查询表达式和Row_Numner()函数来选出重复的那行数据。

 WITH [EMPLOYEE ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)
SELECT * FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID =4

上面的查询结果如图1.3 

4

2021110

MICHAEL

POLAND


图1.3

 这一行重复的数据可以用下面这个通用表和Row_Number()函数来删除。

 WITH [EMPLOYEE ORDERED BY ROWID] AS
(SELECT ROW_NUMBER() OVER (ORDER BY EMPID ASC) AS ROWID, * FROM EMPLOYEE)
DELETE FROM [EMPLOYEE ORDERED BY ROWID] WHERE ROWID =4

 删除以后,我们可以用下面的查询语句看一下结果。

 SELECT * FROM EMPLOYEE

 这个查询结果如图1.4 

2021110

MICHAEL

POLAND

2021115

JIM

KENNEDY

2121000

JAMES

SMITH

2011111

ADAM

ACKERMAN

3015670

MARTHA

LEDERER

1021710

MARIAH

MANDEZ


图 1.4

 这里我们可以看到,重复的数据已经被删除了。

 总结

在这篇文章中,我们讨论了SQL Server 2005 的新特性Row_Number()函数,还有通常的表表达式,然后如何使用这两个来删除重复的行。

posted @ 2014-01-08 11:21 半导体 阅读(149) | 评论 (0)编辑 收藏

发送邮件时,报错:Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream

如果你用myEclipse进行开发的话,运行时可能会出现以下的错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
原因是jar包版本不统一,解决方法如下:

删除Java EE 5 Libraries/javaee.jar/mail里的包有东西.

具体方法如下:
用rar打开X:/Program Files/MyEclipse 6.0/myeclipse/eclipse/plugins/com.genuitec.eclipse.j2eedt.core_6.0.1.zmyeclipse601200710/data/libraryset/EE_5/javaee.jar
,然后删除mail,一切就ok了.

posted @ 2013-12-23 23:12 半导体 阅读(274) | 评论 (0)编辑 收藏

struts的html标签和html中的标签有什么区别 .

struts的html标签<html:form></html:from>和html标签<form></from>有什么区别


1、无论是struts1还是struts2的标签,都提供了他们对于验证框架的支持,给我们实现验证提供了很多方便。
struts的html标签<html:form></html:from>和Struts2的<s:form></s:form>标签是对form标签的封装,是struts框架自己定义的标签,便于和他的mvc中的form结合使用。但经过查看两个框架的源码发现,最好还是用html标签,建议少用struts标签,因为一个标签就一位一个class,那必然占用jvm的内存,造成页面加载速度缓慢。

就效果而言,他们达到的效果是一样的,struts 的html标签不能脱离动态form而独立运用。但是我们在平时的开发过程中,有的情况下并不需要struts form的校验功能,但同时希望能把页面的值保留下来,比如:查询条件的输入。所以他有他的局限性


<html:form>的三个特有作用
1.自动生成html文档的<form>标签,其focus属性还可以生成相应的JavaScript代码
2.自动获取action属性中路径所对应的scope域中的FormBean,存在则获取,不存在则创建新的,再把这个FormBean以一个特殊关键字保存在request中,以便其中的<html:xxx>获取值是使用
3.自动检查Session中是否存在Token,是则生成隐藏表单域,以防止表单的重复提交
还有些标签用起来要比普通的html标签方便的多(代码量变少了),比如html_link 、 html_optionsCollection 、 html_checkbox 、 html_multibox 等,像这些下拉列表、复选框等的回显用Struts的html标签非常容易实现,普通html也简单,但代码一大堆。

posted @ 2013-12-19 19:25 半导体 阅读(168) | 评论 (0)编辑 收藏

EL表达式语法 JSTL语法

IF表达式判断:
     <c:choose><c:when test="${param.type=='1'}">星级</c:when><c:otherwise>酒店名称</c:otherwise></c:choose>

获取LIST值:
获取一个:
${roomList[0].roomTypeName}
循环获取:
<select
              name="myOrderform.roomTypeName" id="roomTypeName"
              onChange="fuzhi(this)" isnull="2" desc="房间种类"
              style="width:110px;">

 

               <c:forEach var="rooms" items="${roomList}">
                <option value="${rooms.roomTypeName}|${rooms.lowPrice}">${rooms.roomTypeName}</option>

               </c:forEach>
</select>


 

posted @ 2013-12-14 12:44 半导体 阅读(206) | 评论 (0)编辑 收藏

取得某个文件夹的真实路径

String rootPath = ServletActionContext.getServletContext().getRealPath("/upload_files");

posted @ 2013-12-14 11:00 半导体 阅读(227) | 评论 (0)编辑 收藏

List和arrayList ,Map和HashMap的区别

 

 一个 List<Map>变量的内部数据结构

[{F_CITY_NAME=徐州, CNT=1141}, {F_CITY_NAME=镇江, CNT=577}]

一个Map变量的内部数据结构

{泰州非边界=7, 宿迁无=26, 无锡省边界=6, 常州非边界=10, 淮安地市边界=70, 南京null=21}

 


jsp页面中不能通过${list.size}取列表长度,而是
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
list
的长度是:${fn:length(list)}


List
是接口,List特性就是有序,会确保以一定的顺序保存元素.
ArrayList
是它的实现类,是一个用数组实现的List.
Map
是接口,Map特性就是根据一个对象查找对象.
HashMap
是它的实现类,HashMaphash表实现的Map,就是利用对象的hashcode(hashcode()Object的方法)进行快速散列查找.(关于散列查找,可以参看<<数据结构>>)


一般情况下,如果没有必要,推荐代码只同List,Map接口打交道.
比如:List list = new ArrayList();
这样做的原因是list就相当于是一个泛型的实现,如果想改变list的类型,只需要:
List list = new LinkedList();//LinkedList
也是List的实现类,也是ArrayList的兄弟类
这样,就不需要修改其它代码,这就是接口编程的优雅之处.
另外的例子就是,在类的方法中,如下声明:
private void doMyAction(List list){}
这样这个方法能处理所有实现了List接口的类,一定程度上实现了泛型函数.


如果开发的时候觉得ArrayList,HashMap的性能不能满足你的需要,可以通过实现List,Map(或者Collection)来定制你的自定义类.

PS:MAP是存在内存中,所以他的读取速度要比List快。

 

posted @ 2013-11-28 15:36 半导体 阅读(177) | 评论 (0)编辑 收藏

ServletContextListener使用详解 .

摘自:http://blog.csdn.net/zhaozheng7758/article/details/6103700
Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。

Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由 ServletContextListener 来处理。在 ServletContextListener 接口中定义了处理ServletContextEvent 事件的两个方法。

l  contextInitialized(ServletContextEvent sce) :当Servlet 容器启动Web 应用时调用该方法。在调用完该方法之后,容器再对Filter 初始化,并且对那些在Web 应用启动时就需要被初始化的Servlet 进行初始化。

l  contextDestroyed(ServletContextEvent sce) :当Servlet 容器终止Web 应用时调用该方法。在调用该方法之前,容器会先销毁所有的ServletFilter 过滤器。

下面通过两个具体的例子来介绍 ServletContextListener 的用法。

例一:在服务启动时,将数据库中的数据加载进内存,并将其赋值给一个属性名,其它的 Servlet 就可以通过 getAttribute 进行属性值的访问。有如下两个步骤:

1 ServletContext 对象是一个为整个 web 应用提供共享的内存,任何请求都可以访问里面的内容  

2 :如何实现在服务启动的时候就动态的加入到里面的内容:我们需要做的有:  

1 实现 servletContextListerner 接口 并将要共享的通过 setAttribute name,data )方法提交到内存中去  

2 )应用项目通过 getAttribute(name) 将数据取到

package ServletContextTest; 

 

import java.sql.Connection; 

import java.sql.PreparedStatement; 

import java.sql.ResultSet; 

import java.util.HashMap; 

import java.util.Map; 

 

import javax.servlet.ServletContext; 

import javax.servlet.ServletContextEvent; 

import javax.servlet.ServletContextListener; 

 

import util.ConnectTool; 

 

public class ServletContextLTest implements ServletContextListener{ 

    // 实现其中的销毁函数

    public void contextDestroyed(ServletContextEvent sce) { 

        System.out.println("this is last destroyeed");    

    } 

    // 实现其中的初始化函数,当有事件发生时即触发

    public void contextInitialized(ServletContextEvent sce) { 

        ServletContext sct=sce.getServletContext(); 

        Map<Integer,String> depts=new HashMap<Integer,String>(); 

        Connection connection=null; 

        PreparedStatement pstm=null; 

        ResultSet rs=null; 

         

        try{ 

            connection=ConnectTool.getConnection(); 

            String sql="select deptNo,dname from dept"; 

            pstm=connection.prepareStatement(sql); 

            rs=pstm.executeQuery(); 

            while(rs.next()){ 

                depts.put(rs.getInt(1), rs.getString(2)); 

            } 

            // 将所取到的值存放到一个属性键值对中

            sct.setAttribute("dept", depts); 

            System.out.println("======listener test is beginning========="); 

        }catch(Exception e){ 

            e.printStackTrace(); 

        }finally{ 

            ConnectTool.releasersc(rs, pstm, connection); 

        } 

    } 

在完成上述编码后,仍需在 web.xml 中进行如下配置,以使得该监听器可以起作用。

<listener> 

   <listener-class>ServletContextTest.ServletContextLTest</listener-class> 

</listener> 

在完成上述配置后, web 服务器在启动时,会直接加载该监听器,通过以下的应用程序就可以进行数据的访问。

package ServletContextTest; 

import java.io.IOException; 

import java.io.PrintWriter; 

import java.util.*; 

import javax.servlet.ServletContext; 

import javax.servlet.ServletException; 

import javax.servlet.http.HttpServlet; 

import javax.servlet.http.HttpServletRequest; 

import javax.servlet.http.HttpServletResponse; 

public class CreateEmployee extends HttpServlet{ 

 

    @Override 

    protected void service(HttpServletRequest request, HttpServletResponse response) 

            throws ServletException, IOException { 

        ServletContext sct=getServletConfig().getServletContext(); 

// 从上下文环境中通过属性名获取属性值

        Map<Integer,String> dept=(Map<Integer,String>)sct.getAttribute("dept"); 

        Set<Integer> key=dept.keySet(); 

        response.setContentType("text/html;charset=utf-8"); 

        PrintWriter out=response.getWriter(); 

        out.println("<html>"); 

        out.println("<body>"); 

        out.println("<form action='/register' action='post'>"); 

        out.println("<table alignb='center'>"); 

        out.println("<tr>"); 

        out.println("<td>"); 

        out.println("username:"); 

        out.println("</td>"); 

        out.println("<td>"); 

        out.println("<input type='text' name='username'"); 

        out.println("</tr>"); 

        out.println("<tr>"); 

        out.println("<td>"); 

        out.println("city:"); 

        out.println("</td>"); 

        out.println("<td>"); 

        out.println("<select name='dept'"); 

        for(Integer i:key){ 

            out.println("<option value='"+i+"'>"+dept.get(i)+"</option>"); 

        } 

        out.println("</select>"); 

        out.println("</td>"); 

        out.println("<tr>"); 

        out.println("</table>"); 

        out.println("</form>"); 

        out.println("</body>"); 

        out.println("</html>"); 

        out.flush(); 

    } 

例二:书写一个类用于统计当Web 应用启动后,网页被客户端访问的次数。如果重新启动Web 应用,计数器不会重新从1 开始统计访问次数,而是从上次统计的结果上进行累加。在实际应用中,往往需要统计自Web 应用被发布后网页被客户端访问的次数,这就要求当Web 应用被终止时,计数器的数值被永久存储在一个文件中或者数据库中,等到Web 应用重新启动时,先从文件或数据库中读取计数器的初始值,然后在此基础上继续计数。

向文件中写入或读取计数器的数值的功能可以由自定义的 MyServletContextListener 类来完成,它具有以下功能:

1 、在 Web 应用启动时从文件中读取计数器的数值,并把表示计数器的 Counter 对象存放到 Web 应用范围内。存放计数器的文件的路径为helloapp/count/count.txt

2 、在Web 应用终止时把Web 应用范围内的计数器的数值保存到count.txt 文件中。

package ServletContextTest; 

import javax.servlet.ServletContext; 

import javax.servlet.ServletContextEvent; 

import javax.servlet.ServletContextListener; 

public class MyServletContextListener implements ServletContextListener{

  public void contextInitialized(ServletContextEvent sce){

    System.out.println("helloapp application is Initialized.");

    // 获取 ServletContext 对象

    ServletContext context=sce.getServletContext();

    try{

       // 从文件中读取计数器的数值

       BufferedReader reader=new BufferedReader(

           new InputStreamReader(context.

           getResourceAsStream("/count/count.txt")));

       int count=Integer.parseInt(reader.readLine());

       reader.close();

       // 创建计数器对象

       Counter counter=new Counter(count);

       // 把计数器对象保存到 Web 应用范围

       context.setAttribute("counter",counter);

       } catch(IOException e) {

          e.printStackTrace();

       }

   }

   public void contextDestroyed(ServletContextEvent sce){

       System.out.println("helloapp application is Destroyed.");

       // 获取 ServletContext 对象

       ServletContext context=sce.getServletContext();

       // Web 应用范围获得计数器对象

       Counter counter=(Counter)context.getAttribute("counter");

       if(counter!=null){

       try{

          // 把计数器的数值写到 count.txt 文件中

          String filepath=context.getRealPath("/count");

          filepath=filepath+"/count.txt";

          PrintWriter pw=new PrintWriter(filepath);

          pw.println(counter.getCount());

          pw.close();

         } catch(IOException e) {

             e.printStackTrace();

         }

     }

   }

}

将用户自定义的 MyServletContextListener 监听器在 Servlet 容器进行注册, Servlet 容器会在启动或终止 Web 应用时,会调用该监听器的相关方法。在 web.xml 文件中, <listener> 元素用于向容器注册监听器:

<listener>
<listener-class>
ServletContextTest
.MyServletContextListener<listener-class />
</listener>

通过上述两个例子,即可以非常清楚的了解到 ServletContextListener 接口的使用方法及技巧。 Container 加载Web 应用程序时(例如启动 Container 之后),会呼叫contextInitialized() ,而当容器移除Web 应用程序时,会呼叫contextDestroyed () 方法。 通过 Tomcat 控制台的打印结果的先后顺序,会发现当 Web 应用启动时,Servlet 容器先调用contextInitialized() 方法,再调用lifeInitinit() 方法;当Web 应用终止时,Servlet 容器先调用lifeInitdestroy() 方法,再调用contextDestroyed() 方法。由此可见,在Web 应用的生命周期中,ServletContext 对象最早被创建,最晚被销毁。  

posted @ 2013-11-20 10:13 半导体 阅读(280) | 评论 (0)编辑 收藏

航信接口碰到的问题锦集

1、加入包:httpcore-4.2.1.jar hotelbe-pure-sdk-6.1.1.jar  date4j-1.0.0.jar包   httpclient-4.2.1.jar

重点说一下import org.apache.http.Consts;
这个类在httpcore-4.2.1.jar这个包中,以前的版本如httpcore-4.0.1.jar 没有。(找S我了)

posted @ 2013-11-15 19:20 半导体 阅读(258) | 评论 (0)编辑 收藏

配置sqlserver2000数据源

1、sqlserver2000配置加入包:msbase.jar,mssqlserver.jar,msutil.jar
用得tomcat6.0配置数据库连接池
并在tomcat的lib下加入上文件
和WebRoot\WEB-INF\lib下加入上文件
 
dbcp连接池程序包,要在同一目录下即web-inf/lib下
 
 
 
SQL Server2000的JDBC驱动程序的DriverClassName是 "com.microsoft.jdbc.sqlserver.SQLServerDriver"

SQL Server2005的JDBC驱动程序的DriverClassName是 "com.microsoft.sqlserver.jdbc.SQLServerDriver"

Tomcat *\conf\context.xml配置
 <Resource name="jdbc/pubs" auth="Container" type="javax.sql.DataSource" maxActive="100" maxldle="30"
    maxWait="10000" username="sa" password="sa" driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    url="jdbc:microsoft:sqlserver://localhost:1433;tabaseName=webshop"
    factory="org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory"/>
    <ResourceLink global="jdbc/pubs" name="jdbc/pubs" type="javax.sql.DataSource"/>
并web.xml里配置
<resource-ref>
      <description>DataSource</description>
      <res-ref-name>jdbc/pubs</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
   </resource-ref>
applicationContext.xml
设置
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
     <property name="jndiName" value="java:/comp/env/jdbc/pubs"/>
 </bean>


2、SQL Error: 208, SQLState: 42S02
HBM中catalog scheme的配置问题.

posted @ 2013-11-03 11:15 半导体 阅读(418) | 评论 (0)编辑 收藏

DIV切换 标签页切换

<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function aa(){
 contain.style.visibility=contain.style.visibility=="hidden"?"visible":"hidden";
}
</SCRIPT>
</HEAD>
<BODY>
<button onclick=aa()>test</button>
<div id="contain">
<iframe id="iframe1" name="iframe1" src="http://www.51js.com" style="width:400px;height:200px"></iframe>
</div>
</BODY>
</HTML>

posted @ 2013-10-31 13:37 半导体 阅读(171) | 评论 (0)编辑 收藏

连接池配置

配置连接池

 本文旨在给程序开发人员提供一个比较具体的Tomcat连接池参考方案,为了提高文章的可读性,文章前端引用了一位前辈的话,如果构成误解,请多多谅解,本文不是从商业考虑的。有问题请联系作者MSN:hpj2001(at)hotmail.com,Email:tocow(at)google.com。

连接池简介
   程序开发,存在很多问题:首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
      数据库连接池(connection pool)的工作原理:
      由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。
对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配、释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发、测试及性能调整提供依据。
一、Tomcat一般性说明
1、本压缩包内的tomcat为apache-tomcat-5.5.20,截止到2006-10-12,是www.apache.org上最新的tomcat版本。
2、Tomcat使用的端口都是默认的。两个比较重要的端口说明,shutdown port:8005;non-SSL HTTP/1.1 Connector port:8080。
3、涉及到修改的文件:
   a../ conf下server.xml、web.xml
   b../common/lib下增加ms-sql jdbc的三个jar包msbase.jar、mssqlserver.jar、msutil.jar
二、Tomcat配置连接池方案
       本文针对的是tomcat 5.5版本的连接池介绍,其它版本可能不适用。
       数据源可以配置成全局的和局部的:可以在任意Context中引用全局的数据源,在某一Context配置的数据源,不能在其它Context引用它。理解了全局和局部数据源的关系,下面就来介绍一下详细配置说明,如下:
1、编辑打开./confCatalina/localhost/gdczsam.xml可以看到:
<!--F hpj 2006-10-12 
    Defualt, we set all different Resources as Global-Resource[which defined in server.xml <GlobalNamingResources></GlobalNamingResources>], 
    and get special Resource we needed in per-web-application contexts from Global-Resource.
    otherwise,we can set Resource we needed in any special Context, all two solutions are offered.

    A.during application development set reloadable="true", when deployed production set reloadable="false"

    B.many other datebase, url and driverClassName like underside list:
      1.ms-sql       driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                     url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
加载包mssqlserver.jar、msbase.jar、msutil.jar.

      2.oracle       driverClassName="oracle.jdbc.driver.OracleDriver"
                     url="jdbc:oracle:thin:@127.0.0.1:1521:SAM_GDCZ"

      3.postgresql   driverClassName="org.postgresql.Driver"
                     url="jdbc:postgresql://127.0.0.1:5432/SAM_GDCZ"

      4.mysql        driverClassName="org.gjt.mm.mysql.Driver"[old mySql jdbc driver]
                     driverClassName="com.mysql.jdbc.Driver"
                     url="jdbc:mysql://127.0.0.1:3306/SAM_GDCZ"
-->

<Context docBase="setup directory" path="/gdczsam" reloadable="true" cookies="true" crossContext="true" privileged="true" antiResourceLocking="false" antiJARLocking="false">

<!--
    <Resource name="jdbc/mssql-SAM_GDCZ"
              auth="Container"
                type="javax.sql.DataSource"
                driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
                username="sa"
                password=""
                maxIdle="30"
                maxWait="10000"
                maxActive="100"/>
-->

<!--F hpj 2006-10-12 
    name: The name of the resource link to be created, which will be used in this web-application context environment.
    global: The name of the linked global resource in the global JNDI context.
    type: The fully qualified Java class name expected by the web application when it performs lookup for this resource link.
-->
   <ResourceLink name="mssql-SAM_GDCZ" global="jdbc/mssql-SAM_GDCZ" type="javax.sql.DataSource"/>

</Context>
         本文提供的tomcat连接池的默认配置如上述,代码的说明性很强,既采用在./ conf/server.xml配置的全局数据源,然后在指定的Context中调用的方式。
         server.xml中的数据源就是上述代码段注释的Resource节点,被包含在server.xml中的GlobalNamingResources节点中。
         其中需要注意的是,该数据源需要在./conf/web.xml中加入一段声明,如下:
    <resource-ref>
        <descrīption>DB Connection</descrīption>
        <res-ref-name>jdbc/mssql-SAM_GDCZ</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
    </resource-ref>
2、第二种tomcat数据源的配置方式是本人推荐的:不在server.xml的GlobalNamingResources节点中加入Resource节点,而是对每个指定的Context配置数据源,这样结构比较清晰。采用这种方式的gdczsam.xml配置如下:
<Context docBase="setup directory" path="/gdczsam" reloadable="true" cookies="true" crossContext="true" privileged="true" antiResourceLocking="false" antiJARLocking="false">

    <Resource name="jdbc/mssql-SAM_GDCZ"
             auth="Container"
                type="javax.sql.DataSource"
                driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
                username="sa"
                password=""
                maxIdle="30"
                maxWait="10000"
                maxActive="100"/>

</Context>
3、以上两种方式,只要是不同的数据源都必须在./conf/web.xml中加入resource-ref声明。
4、产品部署时,不论使用什么方式来部署程序,都需要在./confCatalina/localhost中加入类似gdczsam.xml的文件来配置数据源。

posted @ 2013-10-26 16:39 半导体 阅读(183) | 评论 (0)编辑 收藏

Eclipse 格式化时不自动换行 Ctrl+shift+f .

Java代码

打开Eclipse的Window菜单,然后Preferences->Java->Code Style->Formatter->Edit/Show(根据不同版本可用的按钮会不一样) ->Line Wrapping->Maximum line width:由80改成800就行了。

2.Html代码

Window->Preferences->MyEclipse->Files and Editors->Html->Html Source->Line width->加个0以后保存

posted @ 2013-10-18 21:44 半导体 阅读(426) | 评论 (0)编辑 收藏

用GET方法时出现乱码的问题。URL传中文出现乱码时:。

最近遇到一个问题:用get方法传递中文有问题,用post没有问题。
问题简单的描述是这样的:
<a href="userGroup.jsp?userGroupName=<%=userGroupName%>">aa</a>
这里userGroupName是中文

在userGroup.jsp页面得到的userGroupName却是乱码。
每个页面也都有<%@ page language="java" pageEncoding="GBK" %>说明。

后来上网找了一下才知道:pageEncoding这个只对post起作用。get方法提交时,大家可以从地址栏里看到提交的参数,这是因为get方法传递是作为报文头提交的,而pageEncoding对报文头是没有作用的,所以仍然按照 iso8859-1编码,才出现了刚才的乱码问题。而post提交的是form表单的内容,pageEncoding指定了它的编码,所以他会按照指定编码传递。

问题清楚了,下面就来解决它:

由于tomcat的servlet实现中ServletRequest.setCharacterEncoding方法未对HTP报文头的内容进行解码,因此
使用HTTP的GET方法提交的数据将不能正确的解码.解决方案为修改其服务器的配置server.xml文件中对HTTP协议的
Connector配置,加上URIEncoding="GBK"属性,配置完成以后"可能"的内容为
< Connector port="8080"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000" 
disableUploadTimeout="true" URIEncoding="GBK" /> 


URL传中文出现乱码时:
问题:
如传类似这样的地址" index.jsp?ddurl="+"我们是";ddurl获得的就是乱码。
解决办法:这种传值方式相当于get传值,在传值时对他加密:
encodeURI(url);

posted @ 2013-10-17 11:47 半导体 阅读(155) | 评论 (0)编辑 收藏

数据库查询时间没有了时分秒的解决办法

数据库查询时间没有了时分秒的解决办法

转自:http://www.cnblogs.com/lidabo/archive/2013/03/08/2950107.html

    
    问题出处,公司一个项目中使用动态sql方式查询Oracle数据库,在展示时Date类型字段只展示日期,无时分秒。
    
    分析:
    
    1、众所周知Oralce的日期类型有很多种,Date ,Timestamp等。其中Date类型对用的是java.sql.Date类型,Timestamp对用的是java.sql.Timestamp类型。这两个类型均继承自java.util.Date,其中java.sql.Date是没有时分秒的大家可以查看一下javaApi
    
    2、ResultSet 的getObject(*)方法对用Date类型默认返回的是java.sql.Date
    
    3、网上很多人提供的解决方案是将数据库Date类型改为Timestamp类型,显示当中数据库类型DBA是不会允许你改动的,且Oracle中对于时分秒要求不严格的地方DBA反而是建议用Date而不用Timestamp以节省资源
    
    4、ibatis的ResultMap中对Date类型指定为Timestamp却能够正常显示
    
    经过一番思考后发现对用Date类型的字段使用rs.getTimestamp(*)即可正常显示
    
    方案二、
    
    增加服务器/Java应用的虚拟机参数:-Doracle.jdbc.V8Compatible=“true” 

posted @ 2013-10-12 15:08 半导体 阅读(497) | 评论 (0)编辑 收藏

启动参数放MAP,转换为对象,用户编码找到用户名

方法一:类转换为map
JAVA中编写类CacheManager,方法如下:
    

 public void contextInitialized(javax.servlet.ServletContextEvent arg0) {
  WebInfoDBO webInfoDBO = (WebInfoDBO) SpringContext.getBean("WebInfoDBO");
  List list = webInfoDBO.queryBySql(" select detail_id as \"detailId\", genre_id as \"genreId\",type_two as \"typeTwo\", " + "title_name as \"titleName\",is_issue  as \"isIssue\",is_hot  as \"isHot\",content  as \"content\"" + "from   (select detail_id,genre_id,type_two, title_name, is_issue,is_hot,(select content from web_content c where web_info_d.detail_id=c.detail_id and is_hot='1') content,"
    + "rank() over(partition by genre_id order by sort_code,upt_date desc) rn      from web_info_d where is_issue='1') where rn<=1", WebInfoD.class);
  for (int i = 0; i < list.size(); i++) {
   WebInfoD webInfoD = (WebInfoD) list.get(i);
   tableComent.put("webInfoD", webInfoD);
  }

 }
在JSP页面获取值方法:CacheManager:
CacheManager cm = new CacheManager();
WebInfoD webInfoD = (WebInfoD) cm.tableComent.get("webInfoD");
out.println(webInfoD.getDetailId());
out.println(cm.tableComent.get("detailId"));

方法二:类转换为map中KEY,VALUE
JAVA中:

 public void contextInitialized(javax.servlet.ServletContextEvent arg0) {
  SysDictBO sysDictBO = (SysDictBO) SpringContext.getBean("SysDictBO");
  List list = sysDictBO.queryBySql(" select TYPE_DESC_ID as \"typeDescId\", TYPE_DESC_NAME as \"typeDescName\"  from  Sys_Dict_d d,sys_dict h where h.type_id=d.type_id", SysDictD.class);
  for (int i = 0; i < list.size(); i++) {
   SysDictD sysDictD = (SysDictD) list.get(i);
   tableComent.put(sysDictD.getTypeDescId(),sysDictD.getTypeDescName());
  }

 }

JSP中:
<%@ page import="com.gzlt.framework.cache.CacheManager" %>

CacheManager cm = new CacheManager();
WebInfoD webInfoD = (WebInfoD) cm.tableComent;

out.println(cm.tableComent.get("402881c9405be55f01405c12f8240003"));


posted @ 2013-09-06 16:00 半导体 阅读(203) | 评论 (0)编辑 收藏

对象取值,无属性名称的取值。

             Object[] o = (Object[]) page.getListSum().get(0);//这里是对象
             System.out.println("==="+o[1]);


01.在hibernate中,用hql语句查询实体类,采用list方法的返回结果为一个List,该List中封装的对象分为以下三种情况:  
02.  
03.1.查询全部字段的情况下,如"from 实体类",list中封装的对象为实体类本身,各属性都将得到填充。  
04.  
05.2.只查询一个字段,默认情况下,list中封装的是Object对象。  
06.  
07.3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。  
08.  
09.对于后两种情况,用标签遍历时不太方便,因为无法直接转换成实体类的对象。  

3.查询两个或两个以上的字段,默认情况下,list中封装的是Object[],长度与所查询的字段数一致。
  
set的时候,list里面保存的是对象[]

posted @ 2013-09-03 15:26 半导体 阅读(212) | 评论 (0)编辑 收藏

判断是什么类型

.getClass().getName()

posted @ 2013-09-03 15:20 半导体 阅读(146) | 评论 (0)编辑 收藏

获取值方法

application.getRealPath("/");    获取项目根目录,如:D:\apache-tomcat-7.0.23\webapps\sxzx\
   String baseURL = request.getContextPath();
   String uri = request.getRequestURI();

posted @ 2013-08-22 17:25 半导体 阅读(150) | 评论 (0)编辑 收藏

ajax实现获取文件内容并写入

       <div id="formcontent"></div>
        <script type="text/javascript">
        //发文呈报模板
       $.get("../formfiles/export/402881c9405ba15a01405bc2f0fe000a.txt",
       function(data){//写入到对应ID
        document.getElementById("formcontent").innerHTML=data;
        });   
       </script>

posted @ 2013-08-22 16:42 半导体 阅读(206) | 评论 (0)编辑 收藏

oracle管理员身份登录

//用sys用户登录

C:\Users\Administrator>sqlplus

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 8月 19 16:25:18 2013

Copyright (c) 1982, 2007, Oracle.  All rights reserved.

请输入用户名:  sys/sys as sysdba

//用操作系统登录:

C:\Users\Administrator>sqlplus  / as sysdba

 

posted @ 2013-08-19 16:28 半导体 阅读(323) | 评论 (0)编辑 收藏

ORACLE中常用语法

生成UUID:sys_guid()
字符转换为小写:NLS_LOWER()

查看'_"字符:instr(english_name,'_')
字符全部转换为大写:NLS_UPPER(x[,y])
首字母转换为大写:NLS_INITCAP

posted @ 2013-08-16 17:15 半导体 阅读(179) | 评论 (0)编辑 收藏

取实体类的属性名

  Map<String, String> classColumnMap = new HashMap();
  Class classType=null;
  classType = Class.forName(beanName); 
  Field allFields[]=classType.getDeclaredFields();
    for(int i=0;i<allFields.length;i++)
    {

     classColumnMap.put(allFields[i].getName(),allFields[i].getType());

    }

posted @ 2013-08-16 15:17 半导体 阅读(164) | 评论 (0)编辑 收藏

把对象传入session在JSP页面取值方法:

JAVA中:
super.getSession().put("sysobject", list);
JSP中:、
    <select id="def" name="def">
    <c:forEach var="sysobject" items="${session.sysobject }" >
      <option name="" value=" ${sysobject.englishName}" datevalue="ddd"> ${sysobject.chnName}</option>
   </c:forEach>
   </select>
或用struct标签实现:
<s:iterator value="#session.list">

posted @ 2013-08-16 10:40 半导体 阅读(210) | 评论 (0)编辑 收藏

JAVA规范写法

更新某个对象时: 
// 发布
 public String issue() throws Exception {
  String defineId = super.getRequest().getParameter("defineId");
  try {
   boolean isSuccess = false;
   // 修改
   if (defineId != null && !Utility.isEmpty(defineId)) {
    //更新某个字段时,先清空对象。
    fmDefine = new FmDefine();
    fmDefine.setDefineId(defineId);
    fmDefine.setState("已发布");
    isSuccess = fmDefineBO.update(fmDefine);
   }
   if (isSuccess) {
    super.addActionMessage("发布成功!");
   } else {
    super.addActionMessage("保存失败!");
   }
//   super.getRequest().setAttribute("isSuccess", isSuccess);
  } catch (Exception e) {
   e.printStackTrace();
  }
  return query();
 }

posted @ 2013-08-15 15:11 半导体 阅读(181) | 评论 (0)编辑 收藏

文件上传

         FileWriter writer;
         try {
          String path = System.getProperty("user.dir")+"/../webapps/sxzx/formfiles/"+session.get("objectID")+".txt";
             writer = new FileWriter(path);
             writer.write(content);
             writer.flush();
             writer.close();
         } catch (IOException e) {
             e.printStackTrace();
         }

posted @ 2013-08-15 11:30 半导体 阅读(279) | 评论 (0)编辑 收藏

数据库最大连接数原理

1、JAVA做一个循环,每做一次事务(CRUD)加一个连接,一个连接相当于占2M内存。
50秒后自动释放。
如果超过最大连接数报错如下:
ORA-12519: TNS:no appropriate service handler found 解决  

有时候连得上数据库,有时候又连不上.

可能是数据库上当前的连接数目已经超过了它能够处理的最大值.


select count(*) from v$process --当前的连接数
select value from v$parameter where name = 'processes' --数据库允许的最大连接数
修改最大连接数:
alter system set processes = 300 scope = spfile;
重启数据库:
shutdown immediate;
startup;
--查看当前有哪些用户正在使用数据
SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine
from v$session a, v$sqlarea b
where a.sql_address =b.address order by cpu_time/executions desc;

连接数配置在:applicationcontext.xml中
另一种解决办法:直接用存储过程,一个存储过程只占一个连接。

查看当前最大连接数:
BasicDataSource dataSource = (BasicDataSource)SpringTools.getBean("dataSource");
System.out.println(dataSource.getNumActive());

posted @ 2013-08-14 17:07 半导体 阅读(277) | 评论 (0)编辑 收藏

myeclipse环境配置

当myeclipse慢时,请查看以下原因:
1、检查:.project文件,去掉<nature>org.eclipse.wst.jsdt.core.jsNature</nature>。
    或:右键项目 -> properties -> Builders 去掉JavaScript Validator 前面的勾

posted @ 2013-08-14 09:32 半导体 阅读(166) | 评论 (0)编辑 收藏

Jquery Eeay UI Validatebox 常用自定义效验

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->$.extend($.fn.validatebox.defaults.rules, {         ...  阅读全文

posted @ 2013-07-26 23:01 半导体 阅读(265) | 评论 (0)编辑 收藏

中文排序

import java.text.Collator;
import java.util.Arrays;


public class Test2 {

    
/**
     * 
@param args
     
*/

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        String[] names ={"王飞","李明","赵六"};
        Arrays.sort(names, Collator.getInstance(java.util.Locale.CHINA));
        System.out.println(Arrays.toString(names));

    }

}

posted @ 2013-07-26 22:39 半导体 阅读(136) | 评论 (0)编辑 收藏

输出日志。myeclipse中

1、在hibernate.cfg.xml中配置如下:
  <property name="hibernate.jdbc.batch_size">0</property>
  <property name="format_sql">false</property>
  <property name="use_sql_comments">false</property>
  
  <property name="show_sql">true</property>

posted @ 2013-07-03 16:18 半导体 阅读(211) | 评论 (0)编辑 收藏

struct2.0语法

字符串条件判断:
   <s:if   test="%{#listD.genreId == '402881b73e11d5f5013e11dc118f000a'}">
数字型判断:
   <s:iterator value="list" id="listD" status="ind1">
   <s:if test="#ind1.getIndex()<=6"   >
对象的取值方法:
        <s:iterator value="page" id="list" status="ind1">
      <s:iterator value="list" id="listD" status="ind1">
        <s:if test="#ind1.getIndex()<=5"   >
         <li> <a href="#"><span
           class="news">${listD.titleName}</span> </a> <span class="right"><s:date
            name="issueDate" format="yyyy-MM-dd" /> </span>
       </s:if>
      </s:iterator>
     </s:iterator>
在一个页面重复取list对象(不要id,,var,status):
        <s:iterator value="#list">
      <s:if test="%{genreId == '402881b73e11d5f5013e11dd21ea000c'}">
       <li><a href="../opt/PortalInfoDAction_queryContent.do?detailId=${detailId}"><span class="news">${titleName}</span> </a>
        <span class="right"><s:date name="issueDate"
          format="yyyy-MM-dd" /> </span>
      </s:if>
     </s:iterator>
sql条件的取值方法:
<s:iterator value="#a19list" var="a19list" status="ind1">
           <s:if test="#ind1.getIndex()<4">
           <li>
            <a
             href="<c:url value="/web/WebHomeAction_content.do?detailId=${detailId}"/>">${titleName}</a>
           </li>
          </s:if>
         </s:iterator>

判断大小: <s:property value="sysRegisterList.size()"/>

下拉框获取值:            
<select id="radioName" name="radioName"    >
    <c:forEach var="sysobject" items="${session.sysobject }" >
      <option name="" value="${sysobject.englishNames}" typeCode="${sysobject.dictName}" >${sysobject.chnName}</option>
   </c:forEach>
   </select> 
session取值:
JAVA中:ActionContext.getContext().getSession().put("sum2", (String)sumObject[1]);
取值:${session.sum2}

在struts中用#来访问ActionContext中的对象。

posted @ 2013-05-14 17:15 半导体 阅读(174) | 评论 (0)编辑 收藏

样式表学习

1、文字太长,加省略号。
li{
  white-space:nowrap;
  text-overflow:ellipsis;
  -o-text-overflow:ellipsis; /*opera*/
  overflow: hidden;
 }

posted @ 2013-05-14 16:33 半导体 阅读(140) | 评论 (0)编辑 收藏

jerichoTab 加载完默认选中最后一个,如何让他选择第一个

第一步:

改代码吧。 改文件jquery.jerichotab.js 第205行, 原为

.animate({ 'opacity': '1', width: opts.tabWidth }, function() {

$.fn.setTabActive(curIndex);

});

直接删除205行,或注解掉205行

//$.fn.setTabActive(curIndex);
第二步:改JSP页面
     把activeTabIndex:1改为activeTabIndex:0

posted @ 2013-05-03 15:56 半导体 阅读(730) | 评论 (1)编辑 收藏

javascript常用函数 HTML常用关键

双击:ondblClick="edit_on('I104120130400011')"
单击:onclick="lightonRow(this);"


嵌入页面:<iframe  allowtransparency="true" width=420 height=330 frameborder=0 scrolling=auto src=URL></iframe>
 
           allowtransparency:代表透明景色

posted @ 2013-04-12 14:24 半导体 阅读(129) | 评论 (0)编辑 收藏

网站安全性考虑

用户输入内容 输出用 htmlspecialchars
服务端 sql过滤
xss漏洞过滤

使用工具:Acunetix Web Vulnerability Scanner 7

posted @ 2013-02-01 10:09 半导体 阅读(252) | 评论 (0)编辑 收藏

明宇报表安装

卸载客户端已经安装的插件,升级服务器上的插件到最新版本,再访问服务器上的报表下载新的插件
卸载插件方法:
如果是从服务器自动下载安装的插件:首先关闭浏览报表的浏览器窗口,重新打开一个浏览器窗口,选择浏览器的菜单:
工具-->Internet选项-->设置-->查看对象-->Ming-WebReport Viewer-->右键菜单-->删除
如果是在客户端运行安装程序安装的插件:在客户端运行 regsvr32 /u "C:\.....\MRViewer.ocx"卸载安装的插件。


升级插件到最新版本    windows7
正式版下载地址是http://www.soft2web.com/v4/MRLic/opendownload.asp,下载V3版本
解压缩以后(不需要运行安装程序),更新服务器上报表应用程序下的文件
    报表根目录下的MREngine.prop文件;
    报表根目录\Viewer\MRViewer.CAB文件;
更新以后,重启一下。
服务器上文件正确升级以后,客户端会自动下载安装新版本的插件

注意客户端需要管理员帐户登陆以后再安装浏览器插件。

windows7下   按F8  禁用数字签名驱动。

posted @ 2013-01-24 16:29 半导体 阅读(3070) | 评论 (2)编辑 收藏

获取父窗口的值

获取父窗口的名称
parent.frames["otherframe"].name
parent.frames["otherframe"].location.href
parent.frames["otherframe"].document.all.控件ID.value
获取父窗口内容:
$(parent.window.frames["frameMain"].document.body).html()
 
在body中增加内容:
当前页的body增加内容:$("body").append('4444'); 
增加父窗口代码:parent.frameContent.$(parent.frameContent.document).find("body").append('<font size="17" color="red">类别编码: </font>'); 

posted @ 2013-01-16 16:45 半导体 阅读(382) | 评论 (0)编辑 收藏

工作流表单自定义的误区

 

本人觉得写得很有道理,值得学习。
转自【IT168知识库】

表单自定义功能看似非常方便,可以不用写代码即可完成表单的开发设计,表面上看的确是减少不少开发成本,但深入研究,发现是有不少误区的。

1、              对于整体成本来讲,当表单自定义功能能满足实际客户需求的60%时,会为另外的40%需求付出多少成本。现实中所见到的表单自定义工具一般至多能满足实际客户需求的50%。一般容易实现的仅布局、字段的增减、简单的脚本控制等,但有很多诸如复杂脚本控制、自动计算、特殊逻辑验证、主从关系,复杂基础数据选择(过滤、合并)、与其它功能模块的交互等等需求,自定义工具都不能实现。最终可能带来的代价是重做,甚至推翻整个系统架构重新实现,付出成本是预计成本的2-4倍以上均有可能;

2、              表单自定义功能实现的方式一般是数据库表中预制了很多字段或者是一个表中的记录存储为 ID、字段名、值、字段类型,而且值的类型往往是字符型,这些做法给数据的查询统计及SQL优化带来的是非常大的性能损失和阻力,业务系统数据量不大的时候看不出,一旦数据业务表大到一定程度的时候,性能瓶颈就会出现。我们知道需要工作流的业务系统都是大量用户和大规模业务数据的。对于表单自定义做法,性能瓶颈是一定要考虑的;

3、              表单自定义往往实现的是一个数据实体的增、删、改,但对于一个系统来讲一个表单仅仅是一个功能点而已,这个功能点对于整个系统来讲远不是那么单纯的,有可能一个数据实体的资料分别在多个表单里进行更新和维护,自定义逻辑往往是处理不了它们之间的冲突,还有查询和统计分析,这些是需要关联很多基础数据、关联其它业务数据。自定义表单功能本身也只是从功能特性的角度去出发,对于系统复杂的实体关系、业务模式、设计模式的支持几乎为零,一个高质量系统需要的因素基本实现不了;

4、              我们企业使用表单自定义工具的时候往往已经有了很多的系统,比如HRCRM甚至ERP系统,我们很多关联数据会是来自于这些系统的数据。表单自定义工具往往无法提供高可靠性的集成方案,即使能集成也是勉强的,后续会付出很多手工同步、统计口径不一致等代价,为企业整体的信息化效果大打折扣;

5、              另外从实际的使用情况而言,我们实现一个表单自定义功能的目标往往是为了方便用户实现自己的业务逻辑,但实际上很少客户会自己去自定义这些表单。而开发人员都会热忠于实现一个表单自定义工具,但不会愿意长期去做表单的定制工作,从开发人员的成长角度来说是不利的。对于团队的管理者来说用程序员的工资去做表单配置工作也是不划算的;

6、              透过这些现象的分析,假如我们一定要去实现一个好的表单自定义工具,一定是有很多事件接口的、一定是要能支持调试的、布局一定要能有足够的细致、自定义过程中要有提供给业务人员的自动向导(比开发人员需要的向导更加傻瓜化)、一定能做到足够的优化或支持优化的实现、能支持缓存、调用程序集、从WebService获取信息、能对页面交互过程进行优化。。。。。。这些都实现后,会发现做的表单定义工具其实就是大软件公司研发的IDE开发环境,如:visual studio开发环境,我们是否有这个能力呢?

 

表单自定义工具在软件投标过程中实现快速原型有帮助,但实际应用系统还是需要用大厂商提供的开发工具进行开发,假如一个表单自定义工具真那么容易实现的话,而且那么有用的话,为什么微软、IBM等公司不去做这样的工具呢?

posted @ 2013-01-11 16:57 半导体 阅读(187) | 评论 (0)编辑 收藏

ECLIPSE插件安装,防乱码

eclipse classic 是eclipse的标准版:标准版;

Eclipse Classic的带有source

建议使用Eclipse Classic,需要插件自己安装配置即可

安装相应插件:
1.安装wtp,方便web开发
打开菜单help->Install new Software,单击“add..”按钮,弹出框的name和location都填入“http://download.eclipse.org/webtools/updates/”,等待一会,勾选“Web Tools Platform (WTP) 3.1.2”

2.安装“java decompiler”
打开菜单help->Install new Software,单击“add..”按钮,弹出框的name和location都填入“http://java.decompiler.free.fr/jd-eclipse/update”,等待一会,勾选“Java Decompiler Eclipse Plug-in”,按向导进行安装。

相关配置:
1.统一设置为utf-8编码,Window->Preferences->General->Workspace->Text file encoding->Other->UTF-8。

2.修改jsp等默认编码为utf-8,打开Window->Preferences->Web->Jsp Files,修改右面的encoding为(utf-8)。

3.统一设置为utf-8编码,Window->Preferences->General->Content Types,在右面选择“Text”,在default encoding输入“UTF-8”,点“update”按钮更新。

经过配置后,所有的新建的java、jsp、txt、html、xml、文件夹等编码都是utf-8,这样在jsp、html等文件中设定编码为utf-8,可以避免乱码。

posted @ 2012-12-06 15:10 半导体 阅读(298) | 评论 (0)编辑 收藏

JAVA中类型转换

1,Long转换为BigDecimal.
    btn.setSortCode(BigDecimal.valueOf(2l));

posted @ 2012-11-22 10:25 半导体 阅读(198) | 评论 (0)编辑 收藏

ORACLE启动与停用

一、oracle启动:把以下代码另存为批处理文件(.bat)
@echo off
@ ECHO 启动 Oracle 11g 服务
net start "OracleDBConsoleorcl"
net start "OracleOraDb11g_home1TNSListener"
net start "OracleServiceORCL"
@ ECHO 启动完毕 按任意键继续
exit

二、oracle停止:把以下代码另存为批处理文件(.bat)

@echo off
@ ECHO 停止 Oracle 11g 服务
net stop "OracleDBConsoleorcl"
net stop "OracleOraDb11g_home1TNSListener"
net stop "OracleServiceORCL"
@ ECHO 停止完毕 按任意键继续
pause
exit

posted @ 2012-11-21 10:21 半导体 阅读(192) | 评论 (0)编辑 收藏

IREPORT安装、使用

一。安装ireport,到iReport的官方网站:http://ireport.sourceforge.net/去下载。
二。安装完后制作report模板文件:
   1.新建一个文件:档案-->开启新档
   2.配置数据源:data-->连接资源来源-->new-->DataBase JDBC connection,输入名称,选择驱动,填写url.
   3.插入数据,选择data-->报表查询,在这里写要查询的sql,写好后会在field里自动生成查后的列;
    4.拖动field到detail里。这样就制作完成了。
    5.建立--->编译会在ireport的安装目录下生成.jasper结尾的文件。这就是我们需要的模板文件。
   很简单的一个报表例子。
三。写jsp文件: (偶用的是IREPORT300,包请在IREPORT300中lib里找吧)
   1。导入需要的降包:itext-1.3.1.jar,iTextAsian.jar,jasperreports-1.0.1.jar,poi-2.0-final-20040126.jar,classes12.jar。注意:不要是classes12.zip,我导入classes12.zip就是报找不到OracleDriver错误。
   2.写jsp文件:
Java代码 复制代码 收藏代码
  1. <%@ page language="java" import="java.util.*" pageEncoding="gbk"%>   
  2. <%@ page import="java.sql.*"%>   
  3. <%@ page import="java.io.*"%>   
  4. <%@ page import="net.sf.jasperreports.engine.JasperFillManager"%>   
  5. <%@ page import="net.sf.jasperreports.engine.JasperPrint"%>   
  6. <%@ page import="net.sf.jasperreports.engine.JRException"%>   
  7. <%@ page import="net.sf.jasperreports.engine.JRExporterParameter"%>   
  8. <%@ page import="net.sf.jasperreports.engine.export.JRXlsExporterParameter"%>   
  9. <%@ page import="net.sf.jasperreports.engine.export.JRXlsExporter"%>   
  10.   
  11. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">   
  12. <html>   
  13.     <body>   
  14.   
  15.         <%   
  16.             String Name = "aa";//初始化变量   
  17.             Class.forName("oracle.jdbc.driver.OracleDriver");   
  18.             Connection conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","lshh","lshh");   
  19.             //装载jasper文件application   
  20.             File exe_rpt = new File(application.getRealPath("/test.jasper"));   
  21.             //rowid就是iReport的变量$P{rowid}的名称   
  22.             Map parameters = new HashMap();   
  23.             parameters.put("Name", Name);   
  24.             try {   
  25.                 // fill   
  26.                 JasperPrint jasperPrint = JasperFillManager.fillReport(exe_rpt   
  27.                 .getPath(), parameters, conn);   
  28.                 // excel输出   
  29.                 ByteArrayOutputStream oStream = new ByteArrayOutputStream();   
  30.                 JRXlsExporter exporter = new JRXlsExporter();   
  31.                 exporter.setParameter(JRExporterParameter.JASPER_PRINT,   
  32.                 jasperPrint);   
  33.                 exporter.setParameter(JRExporterParameter.OUTPUT_STREAM,   
  34.                 oStream);   
  35.                 exporter.setParameter(   
  36.                         JRXlsExporterParameter.IS_REMOVE_EMPTY_SPACE_BETWEEN_ROWS,   
  37.                         Boolean.TRUE); // 删除记录最下面的空行   
  38.                 exporter.setParameter(   
  39.                 JRXlsExporterParameter.IS_ONE_PAGE_PER_SHEET,   
  40.                 Boolean.FALSE);// 删除多余的ColumnHeader   
  41.                 exporter.setParameter(   
  42.                 JRXlsExporterParameter.IS_WHITE_PAGE_BACKGROUND,   
  43.                 Boolean.FALSE);// 显示边框   
  44.                 exporter.exportReport();   
  45.   
  46.                 byte[] bytes = oStream.toByteArray();   
  47.   
  48.                 if (bytes != null && bytes.length > 0) {   
  49.                     response.reset();   
  50.                     response.setContentType("application/vnd.ms-excel");   
  51.                     response.setContentLength(bytes.length);   
  52.                     ServletOutputStream ouputStream = response   
  53.                     .getOutputStream();   
  54.                     ouputStream.write(bytes, 0, bytes.length);   
  55.                     ouputStream.flush();   
  56.                     ouputStream.close();   
  57.   
  58.                 } else {   
  59.                     out.print("bytes were null!");   
  60.                 }   
  61.                 conn.close();   
  62.             } catch (JRException ex) {   
  63.                 out.print("Jasper Output Error:" + ex.getMessage());   
  64.             }   
  65.         %>   
  66.   
  67.   
  68.     </body>   
  69. </html>  
强烈强调一句,如果你要在线显示PDF,excel直接把response.setHeader("Content-disposition", "attachment; filename="     + fileName);
改为:response.setHeader("Content-disposition","inline; filename=MyExcel.pdf");     就行了,
再强调一点,首先确定一定要安装adobe reader阅读器啊(别说,我就因为没装这个,折腾了二天,呵呵。。。)

升级处理:
需要包:iText-2.1.7.jar、iTextAsian.jar、jasperreports-5.5.0.jar、poi-3.9-20121203.jar
 

posted @ 2012-10-25 16:40 半导体 阅读(418) | 评论 (0)编辑 收藏

EL表达式

相当于request.getparameter()的EL语句:
1、 ${param.method}
2、 <s:property value="#parameters.method"/>
3、 <s:if test="%{#parameters.method[0]=='delete'}">
4、<%    String sysCode = (String)request.getSession().getAttribute("sysCode");%>
     <c:url value="/${sysCode}/LoginAction_left.do"/>

posted @ 2012-09-27 12:06 半导体 阅读(367) | 评论 (0)编辑 收藏

解决Myeclipse不能自动编译的问题

Myeclipse不能自动编译java类,造成这种状况的原因很多。以下是解决方案: 1. 确保 project->build automatically 已经被选上.这时候可以使用两种方法,一个是在未选中build automatically之前,手动编译项目文件;然后选中build automatically自动编译文件。 2. 如果选上了,也不好使, 使用这一招: project->clean..->选第2个clean select project, 勾上start build immediatelly 3.如果项目里引了某个不用的jar包,而那个包又被你删了,就会出现不报错但怎么也编译不出来class文件的情况,可以把所有包都删除,然 后一个一个的再引入(需要的),不要一下子把所有包都引入来,没用的可能会引起不良后果. 4. 想删掉某个class文件重新生成,删除class文件后,但classes目录下的文件夹被其它程序打开,比如Total Commander。此时编译 也不会通过,在problems下可能会提示“con''t delete classes ……”。关掉其它程序重新编译即可。 5.还有种情况是remove掉 JRE System Library,重新导入即可编译。但是什么原因导致的还不清楚。 6.把build path中所有包都remove掉。然后又add jars,add libraries把需要的加进去,居然又开始编译了。。。 7.project->properties->java build path->source->.../WEB-INF/src的output folder不要默认,编辑让它指向../WEB-INF/classes 然后重新点击build工程即可自动编译。 8.实在不行就新建项目吧!嘿嘿

posted @ 2012-08-31 11:57 半导体 阅读(495) | 评论 (0)编辑 收藏

JQUERY1.4与jquery1.7区别

jquery1.4: $(this).attr("checked")返回当前元素的checked属性值 $(this).attr("checked", true)返回的则是当前对象 jquery1.6的用法: $(this).prop("checked")

posted @ 2012-08-29 16:24 半导体 阅读(842) | 评论 (0)编辑 收藏

jquery获取cookie值

cookie里保存的是键值对。要用JQuery里的cookie要调一下jquery.cookie.js文件。 取值跟赋值分别是 $.cookie("name"); $.cookie("name","赋值"); 具体的还有保存cookie的天数跟路径等等。 现在用cookie做一个小例子:保存皮肤颜色
red
gray
yellow
------------------------------------------------------- 引用jquery文件跟cookie文件

posted @ 2012-08-29 16:23 半导体 阅读(1005) | 评论 (1)编辑 收藏

javascript 获取值

HTML页面: 获取复选框名字全为chk的对象值: function lightonRow(obj){ var tablelist=obj.parentElement;//parentElement 获取对象层次中的父对象。 var objsCheckBox=tablelist.all("chk");}

posted @ 2012-08-20 15:40 半导体 阅读(187) | 评论 (0)编辑 收藏

oracel 数据源配置 PDM反向工程

打开 Windows NT 控制面板。 双击数据源(ODBC)图标。将显示 ODBC 数据源管理器对话框。 选择系统 DSN 选项卡。(记住一定是系统DSN) 单击添加。 选择与 Oracle 数据库客户机一同安装的 ODBC 驱动程序。 单击完成。 在数据源字段中输入数据库的名称。 在描述字段中输入数据源的描述。 在服务器名称字段中输入 RDBMS 服务器的主机全限定名称。 单击确定。 PDM反向工程 文件->反向工程->数据库

posted @ 2012-08-07 16:31 半导体 阅读(290) | 评论 (0)编辑 收藏

报表工具比较

Ireport BIRT IWEB 明宇 正在研中,不知道哪个最好用!

posted @ 2012-08-01 15:02 半导体 阅读(332) | 评论 (0)编辑 收藏

javascript金额计算

在JSP页中中增加 onChange="check_sum()" /**数量*单价=金额*/ function check_sum(){ var num,item_price,item_money; num = trim(myform.num.value); item_price =trim(myform.item_price.value); if(num == "") num=0.0; alert("dd="+num); if(item_price == "") item_price=0.0; item_money=num*item_price; window.parent.record_handler.myform.item_money.value=item_money.toFixed(2); }

posted @ 2012-07-23 12:10 半导体 阅读(371) | 评论 (0)编辑 收藏

错误:java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer

错误: description The server encountered an internal error () that prevented it from fulfilling this request. exception org.apache.jasper.JasperException: java.lang.ClassCastException: java.lang.Long cannot be cast to java.lang.Integer org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:522) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:416) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266) javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
解决办法: 关于在Hibernate里使用select count(*) 返回值的问题说明 由于我使用的是Hibernate 3.2版本,经确认,这个版本已经把以前返回 Integer的改成了 Long, 因为JPA里面的返回值规定是Long, Hibernate为了兼容这个,所以修改了返回值。 如果你从Hibernate 3.0.x/3.1.x升级到最新的3.2版,一定要注意,3.2版的很多sql函数如count(), sum()的唯一返回值已经从Integer变为Long,如果不升级代码,会得到一个ClassCastException。 这个变化主要是为了兼容JPA,可以在hibernate.org的最新文档中找到说明。 Hibernate Team也提供了一个与原来兼容的解决方案: Configuration classicCfg = new Configuration(); classicCfg.addSqlFunction( "count", new ClassicCountFunction()); classicCfg.addSqlFunction( "avg", new ClassicAvgFunction()); classicCfg.addSqlFunction( "sum", new ClassicSumFunction()); SessionFactory classicSf = classicCfg.buildSessionFactory();
详见:http://topic.csdn.net/u/20080725/14/239ee1ee-c1c7-4489-b752-22e884476b61.html

posted @ 2012-07-05 18:06 半导体 阅读(1542) | 评论 (0)编辑 收藏

java单点登录的实现 --摘自 http://blog.163.com/litianyichuanqi@126/blog/static/11597944120121119163128/

     摘要: java单点登录的实现    2012-02-11 09:19:00 |  分类: Java |  标签: java  web单点登录   | 字号大中小   订阅 ...  阅读全文

posted @ 2012-06-20 17:10 半导体 阅读(943) | 评论 (1)编辑 收藏

明宇脚本语法

1,基本语法
begin
if  Frac([usp_pickbill_order."plan_num"])>0 then
  memo15.memo:= CNumber([usp_pickbill_order."plan_num"],1)+'吨 '
  else
  memo15.memo:= CNumber([usp_pickbill_order."plan_num"],1)+'吨整' ;
end

posted @ 2012-05-16 14:42 半导体 阅读(210) | 评论 (0)编辑 收藏

Visio画图时技巧

1,Visio画图时提示:
此UML形状所在的绘图页不是UML模型图的一部分
解决办法:
1、将保护里的文本勾掉,设置双击的行为为编辑图形文本.

posted @ 2012-05-05 10:50 半导体 阅读(1723) | 评论 (1)编辑 收藏

Struct 1.0语法说明:

1,满足hsClass<>2时,执行中间内容.
<logic:notEqual name="auth" property="hsClass" value="2">
 中间内容
</logic:notEqual>

posted @ 2011-12-14 11:22 半导体 阅读(215) | 评论 (0)编辑 收藏

一台机器上跑多个JBOSS

文章来源:http://dzq2008.iteye.com/blog/627078
一台机器运行多个
jboss

环境(一): jboss4·0·1sp1 JDK1.5

步骤一、

打开 $JBOSS_HOME/server/default/conf/jboss-service.xml

       1、  查找到: mbean - ServiceBindingManager ,将其注释去掉。

       2、  修改 8083 1098 1099 4444 4445 端口值。

步骤二、

打开 $JBOSS_HOME/server/default/conf/jboss-minimal.xml
      
修改 1099 1098 端口值,与“步骤一”中保持一致。

步骤三、

打开 $JBOSS_HOME/docs/examples/binding-manager/sample-bindings.xml

修改 ports-01 端口,避免出现 port 冲突的问题。

步骤四、

打开 $JBOSS_HOME/server/default/deploy/jbossweb-tomcat50.sar/server.xml
      
修改 8080 8009 8443 端口值。

步骤五、

打开 $JBOSS_HOME/server/default/deploy/jms/uil2-service.xml
      
修改 8093 端口值。

环境 (二) jboss-4.2.3.GA JDK1.5 ,配置如下:

步骤一、

打开 $JBOSS_HOME/server/default/conf/jboss-service.xml

       1、  查找到:mbean - ServiceBindingManager,将其注释去掉。

       2  修改808310981099444444454446端口值。

步骤二、

打开 $JBOSS_HOME/server/default/conf/jboss-minimal.xml
      
修改 1099 1098 端口值,与“步骤一”中保持一致。

步骤三、

打开 $JBOSS_HOME/docs/examples/binding-manager/sample-bindings.xml

修改 ports-01 端口,避免出现 port 冲突的问题。

步骤四、

打开 $JBOSS_HOME/server/default/deploy/jboss-web.deployer /server.xml
      
修改 8080 8009 8443 端口值。

步骤五、

打开 $JBOSS_HOME/server/default/deploy/jms/uil2-service.xml
      
修改 8093 端口值。

步骤六、

打开 $JBoss_home/server/default/deploy/ejb3.deployer/META-INF/jboss-service.xml

修改 3873 端口的值

JBoss 官方文档如下连接:

http://www.jboss.org/community/docs/DOC-9384

posted @ 2011-12-13 14:58 半导体 阅读(330) | 评论 (0)编辑 收藏

、The type java.lang.Object cannot be resolved.It is indirectly referenced from required.class files。

1、The type java.lang.Object cannot be resolved.It is indirectly referenced from required.class  files。 
     出现以上信息的原因是因为你装了多个版本的jre或jdk的关系。本来Eclipse在建立工程时,会自动参  照你的jre路径,但多个版本就没办法了。
  你只能手动建立…
   a. 进入window\preferences\java\Installed JREs
       1)按Add
       2)输入JRE Name, 例JDK1.5.0.03
       3)JRE home directory, 选择安装的路径
       4)按OK
  b. 进入Project\properties\Java Bulid Path
      1)Add library
      2)选JRE System Library后按Next
     3)选workplace default JRE后按finish...
2、The import javax.servlet cannot be resolved
   上面问题的解决办法如下:将servlet-api.jar(在%TOMCAT_HOME%/\common\lib目录下面可以找  到 这个文件)或者javaee.jar导入每个动态web工程。

posted @ 2011-12-05 16:05 半导体 阅读(433) | 评论 (0)编辑 收藏

sqlserver 语法归纳

1,--更改默认值:
alter table tablename_h add default ('0') for state with values

posted @ 2011-11-17 10:48 半导体 阅读(116) | 评论 (0)编辑 收藏

SVN错误问答

编号
出错信息
问题剖析
解决方案

1.
svn: Server sent unexpected return value (500 Internal Server Error) in response to OPTIONS request for 'http://svn.moon.ossxp.com/svn/test'
错误的用户名
检查登录的用户名是否输入错误

svn: 服务器发送了意外的返回值(500 Internal Server Error),在响应 “OPTIONS” 的请求 “http://svn.moon.ossxp.com/svn/test” 中

2.
svn: OPTIONS of 'http://svn.moon.ossxp.com/svn/test': authorization failed: Could not authenticate to server: rejected Basic challenge (http://svn.moon.ossxp.com)
错误的口令
用正确的用户名/口令登录

svn: 方法 OPTIONS 失败于 “http://svn.moon.ossxp.com/svn/test”: 认证失败: Could not authenticate to server: rejected Basic challenge (http://svn.moon.ossxp.com)

3.
svn: Server sent unexpected return value (403 Forbidden) in response to OPTIONS request for 'http://svn.moon.ossxp.com/svn/test'
用户无权限
联系管理员,为用户分配权限

svn: 服务器发送了意外的返回值(403 Forbidden),在响应 “OPTIONS” 的请求 “http://svn.moon.ossxp.com/svn/test” 中

4.
svn: OPTIONS of 'http://www.moon.ossxp.com/svn/test': 200 OK (http://www.moon.ossxp.com)
服务器地址错误,是普通Web页面,不支持SVN的 WebDAV 协议
确认输入正确的 SVN 服务地址。可以在浏览器中输入该地址进行确认

svn: 方法 OPTIONS 失败于 “http://www.moon.ossxp.com/svn/test”: 200 OK (http://www.moon.ossxp.com)

5.
The version of your subversion (client) is below 1.5.0, upgrade to 1.5.0 or above. SVN below 1.5.0 can not handle mergeinfo properly. It can mess up our automated merge tracking!
是由于客户端的软件版本低于1.5.0造成的。服务器端对客户端软件版本进行了限制,以免对合并跟踪破坏。
升级本地的Subversion客户端软件到1.5.0或以上版本。

6.
svn: This client is too old to work with working copy '.'. You need to get a newer Subversion client, or to downgrade this working copy. See http://subversion.tigris.org/faq.html#working-copy-format-change for details.
安装了多个版本的SVN客户端(TSVN,Subclipse,...),且各个客户端的版本不一致。高版本的SVN客户端会自动更新本地工作目录中的 .svn 目录下的文件格式,导致旧版本的SVN客户端不能继续访问该本地工作目录
将本机安装的所有的SVN客户端都更新到同一个大版本,以避免本地工作目录的格式不一致

svn: 此客户端对于工作副本 “.” 太旧。你需要取得更新的 Subversion 客户端,或者降级工作副本。 参见 http://subversion.tigris.org/faq.html#working-copy-format-change 以获得更详细的信息。

7.
svn: Working copy 'trunk/src' locked svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details)
异常操作导致目录没有解锁。
一个简单的重现方法:在 .svn 目录下创建空的名为 lock的文件
使用命令行 "svn cleanup" 或者类似的“清理”动作删除锁定

svn: 工作副本“trunk/src”已经锁定 svn: 运行“svn cleanup”删除锁定 (输入“svn help cleanup”得到用法)

8.
日志中没有作者信息: ------------------------------------ r9 | (没有作者信息) | … ossxp.com anonymous commit test
匿名提交导致没有作者信息
检查版本库权限控制,禁止匿名提交

9.
正在发送 ... 传输文件数据.svn: 提交失败(细节如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: 提交说明至少应包含 4 个字符, 或者太简单了。
这是由于用户提交的提交说明(commit log),太过简单了。在提交时需要输入有意义的 commit log。
写有意义的提交说明,或者请求管理员更改版本库插件

10.
增加 Logger.c 传输文件数据.svn: 提交失败(细节如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: Wide character in print at /opt/svn/svnroot/myrepos/hooks/scripts/check-case-insensitive.pl line 259. 发现文件名大小写冲突: trunk/src/Logger.c 已经存在于 logger.c
管理员设置了对新增文件是否重名(只有大小写不同)的文件进行检查。文件名只有大小写不同,在Windows上进行检出会造成麻烦
不要添加重名(仅大小写不同)文件

增加 src/文件aBc.txt 传输文件数据.svn: 提交失败(细节如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: Clash: '/trunk/src/文件aBc.txt' '/trunk/src/文件abc.txt'

11.
svn: While preparing '/home/jiangxin/tmp/svn.test/trunk/src/README.txt' for commit svn: Inconsistent line ending style
提交的文件已经设置了 svn:eol-style 属性,但是该文本内的换行符有DOS的换行符CRLF,也有Unix换行符LF,不一致!
统一该文本文件内的换行符。Linux 下可以用dos2unix, unix2dos, sed等命令。Windows下可用UltraEdit 进行转换。

svn: 当为提交操作准备“/home/jiangxin/tmp/svn.test/trunk/src/README.txt”时 svn: 不一致的行结束样式

12.
svn: Failed to add file 'Makefile': an unversioned file of the same name already exists
执行更新(svn up)时报错。因为其他人新增一个文件到服务器,而本地却存在一个同名文件(未版本控制)
先将本地重名文件改名,再执行"svn up",之后再比较、合并文件。或者执行 "svn up --force"

svn: 增加文件 'Makefile' 失败: 同名未版本控制的文件已存在

13.
Adding src/Makefile svn: Commit failed (details follow): svn: File '/svn/test/trunk/src/Makefile' already exists
添加新文件,提交时报错。因为其他人已经先于我增加了该文件。
先执行更新操作("svn up"),再根据提示进行操作:合并/提交...

增加 src/Makefile svn: 提交失败(细节如下): svn: 文件“/svn/test/trunk/src/Makefile”已存在

14.
$ svn up Conflict discovered in 'Makefile'. Select: (p) postpone, (df) diff-full, (e) edit, (mc) mine-conflict, (tc) theirs-conflict, (s) show all options: p C Makefile Updated to revision 5. Summary of conflicts: Text conflicts: 1
多人同时编辑同一个文件时,可能会遇到冲突。别人先于我提交,则当我提交时要先更新。更新可能遇到不能自动解决的冲突
使用工具进行冲突解决

$ svn up 在 “Makefile” 中发现冲突。 选择: (p) 推迟,(df) 显示全部差异,(e) 编辑, (mc) 我的版本, (tc) 他人的版本, (s) 显示全部选项: p C Makefile 更新到版本 5。 冲突概要: 正文冲突:1

15.
svn: Commit failed (details follow): svn: File 'Makefile' is out of date svn: File not found: transaction '6-d', path '/trunk/src/Makefile'
提交的文件已被他人删除
先执行更新操作("svn up"),再根据提示解决该树冲突:删除文件或继续添加...

svn: 提交失败(细节如下): svn: 文件 “Makefile” 已经过时 svn: File not found: transaction '6-c', path '/trunk/src/Makefile'

16.
svn: Commit failed (details follow): svn: File or directory '/trunk/XXX' is out of date; try updating svn: resource out of date; try updating
基于旧版本修改是不允许的
先更新("svn update"),再提交

svn: 提交失败(细节如下): svn: 文件或目录 “/trunk/XXX” 已经过时;请先更新 svn: resource out of date; try updating

17.
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent svn: At least one property change failed; repository is unchanged svn: Error setting property 'log': Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook
修改提交说明等操作属于高风险操作,因为该操作没有被版本控制,属于不可恢复的操作。缺省禁止。
请联系管理员,启用该版本的相关钩子,允许修改“版本属性”。参见 管理员钩子设置

svn: DAV 请求失败;可能是版本库的 pre-revprop-change 钩子执行失败或者不存在 svn: 至少有一个属性变更失败;版本库未改变 svn: 设置属性 “log” 出错: Repository has not been enabled to accept revision propchanges; ask the administrator to create a pre-revprop-change hook

18.
传输文件数据.svn: 提交失败(细节如下): svn: Commit blocked by pre-commit hook (exit code 1) with output: ==================== trunk/src/File.c : 属性 svn:mime-type 或者 svn:eol-style 没有设置 ==================== 管理员已经启用换行符属性检查。每一个新添加的文件必须 指定换行符。如果 svn:mime-type 属性为文本文件,则 必须设置 svn:eol-style 属性。 对于二进制文件,执行如下命令: svn propset svn:mime-type application/octet-stream path/of/file 对于文本文件,可以执行如下命令: svn propset svn:mime-type text/plain path/of/file svn propset svn:eol-style native path/of/file 为了避免每次添加文件手动设置,可以启用自动属性设置 ...
管理员启用了检查新文件换行符的扩展
为新增文件设置正确的 svn:mime-type 和/或 svn:eol-style 属性

posted @ 2011-08-04 15:45 半导体 阅读(468) | 评论 (0)编辑 收藏

页面导出到EXCEL

转自:http://hi.baidu.com/fableking/blog/item/39a33ac7ee78e8dcd10060d5.html
网上倒是找到了不少的资料,发现一段javascript的功能实现代码,很不错:
var elTable = document.getElementById("tb");
var oRangeRef = document.body.createTextRange();
oRangeRef.moveToElementText( elTable );
oRangeRef.execCommand( "Copy" );

var appExcel = new ActiveXObject( "Excel.Application" );
appExcel.Visible = true;
appExcel.Workbooks.Add().Worksheets.Item(1).Paste();
appExcel = null;

实现功能就是把id为tb的表格内的数据都生成为excel,我试试了可行,但是放到服务器来运行就是script error的提示,然后网上到处求问,也找了百度空间的几位高手朋友问了下,可是还是不得其法。。不过还是很感谢他们的热心帮助

没办法,我只能用别的方法来实现了,其实满喜欢上面的这个javascript的功能的,比较人性化。。可惜我黔驴技穷,无法用上它,哎!~

既然我帮客户用jsp写的程序,那么我就还是用jsp来实现这个功能吧。。

于是找到了这么一个方法:
原文出自:http://www.jsp.mlc.edu.tw/viewitem.jsp?itemid=0000000065

***************************************************************************************************
一、将网页资料以excel报表以线上浏览方式呈现
xls651.jsp原始码如下


<%@ page contentType="application/msexcel" %>
<!-- 以上这行设定本网页为excel格式的网页 -->
<%
   response.setHeader("Content-disposition","inline; filename=test1.xls");
   //以上这行设定传送到前端浏览器时的档名为test1.xls
   //就是靠这一行,让前端浏览器以为接收到一个excel档
%>
<html>
<head>
<title>Excel档案呈现方式</title>
</head>
<body>
  <table border="1" width="100%">
    <tr>
      <td>姓名</td><td>身份证字号</td><td>生日</td>
    </tr>
    <tr>
      <td>李玟</td><td>N111111111</td><td>1900/11/12</td>
    </tr>
    <tr>
      <td>梁静如</td><td>N222222222</td><td>1923/10/1</td>
    </tr>
    <tr>
      <td>张惠妹</td><td>N333333333</td><td>1934/12/18</td>
    </tr>
  </table>
</body>
</html>

二、将网页资料以excel报表以下载的方式呈现
这个jsp档和上一个差不多,只有差别在这一行:
线上浏览的方式: response.setHeader("Content-disposition","inline; filename=test1.xls");
下载的方式: response.setHeader("Content-disposition","attachment; filename=test2.xls");
附注: 1.以上纯以静态网页的方式呈现excel档,配合资料库,你便能以动态的报表方式做出excel报表了
2.完全不用安装任何元件,或只能受限於win平台,一个简单的方式解决你的报表需求
3.聪明的你,应该能举一反三,知道如何将网页资料以word的doc格式展现了吧!
(是不是只要把contentType改成"application/msword"以及filename的副档名改成.doc就可以了!)

***************************************************************************************************

posted @ 2011-08-01 17:03 半导体 阅读(370) | 评论 (1)编辑 收藏

出现乱码时

MyEclipse打开文件乱码处理。
由于文件编码不一致。解决方法:

Windows -->Preferences --> Content Types

比如我打开一个js文件是乱码。那我就在Content Types下面的列表框内找到"JavaScript"
在下边的File associations列表中选择 *.js
它默认的编码方式为:ISO-8859-1,改为GBK即可


posted @ 2011-07-28 17:42 半导体 阅读(127) | 评论 (0)编辑 收藏

sqlserver中文说明

sqlserver中文说明查询:
select P.smallid,C.ID,O.name   表名,     C.Name   列名,     P.Value   中言语描述     from sysobjects   O 
   left   outer   join   syscolumns   C   on   O.ID=C.ID     left   outer   join   sysproperties   P
  on   C.ID=P.ID   and   C.colid=P.smallid     where O.Type='U' and P.Value='tte4'

posted @ 2011-06-30 17:58 半导体 阅读(107) | 评论 (0)编辑 收藏

I/O exception

环境说明:
        在测试webservice上报时,本机与服务器程序及软件版本一致,但本机调试不报错,服务器报错信息如下:
18:45:09,110 INFO  [HttpMethodDirector] I/O exception (java.net.ConnectException) caught when processing request: Connection timed out: connect
18:45:09,110 INFO  [HttpMethodDirector] Retrying request
18:45:10,673 WARN  [RequestProcessor] Unhandled Exception thrown: class org.apache.catalina.connector.ClientAbortException
只有info信息,没有error信息,首先排除是程序或配置文件引起的错误信息,
再仔细查看,发现服务器上安装了一个hp network 工具,听说这个工具可以拿来配置双卡成一卡,处理负载均衡,
本人直接在本地连接中取消了此属性,再测试上报,问题解决!

posted @ 2011-04-27 17:38 半导体 阅读(1360) | 评论 (0)编辑 收藏

JAVA语法(一)

转换为整型:Integer.valueOf()
含小数位型:BigDecimal.valueOf()
当字段过长时,需省略,但鼠标放在上面,需要显示全部(title=):
       <div align="center" title="<bean:write name="result" property="uploadMemo"/>">
         <logic:notEqual name="result" property="uploadMemo" value="">
      <bean:define id="uploadMemo" name="result" property="uploadMemo" type="java.lang.String"></bean:define> 
            <%if(uploadMemo.length()>10){ %> 
                <%=uploadMemo.substring(0,10) %>...  
            <%}else{ %>
                <%=uploadMemo%>
            <%} %>         
         </logic:notEqual>
         &nbsp;
      </div>    
防止刷新页面:

   在写用户注册或其它程序时,会出现刷新成功页面后重复提交数据的情况

   运用Struts令牌机制可以解决这儿一问题

  在注册页面中加入
  <%
  org.apache.struts.util.TokenProcessor.getInstance().saveToken(request);
   %>
  并在表单中加入HIDDEN值
  <input type="hidden" name="org.apache.struts.taglib.html.TOKEN" value="<%=session.getAttribute("org.apache.struts.action.TOKEN")%>" />

  在注册成功页面(如Struts或其实框架可以加入到action)中
  if(org.apache.struts.util.TokenProcessor.getInstance().isTokenValid(request,true)) { 
      org.apache.struts.util.TokenProcessor.getInstance().resetToken(request);
      .....
    }

posted @ 2011-04-13 16:09 半导体 阅读(191) | 评论 (0)编辑 收藏

DATA,calendar日期转换

1.Calendar和Date的转化

(1) Calendar转化为Date
Calendar cal=Calendar.getInstance();
Date date=cal.getTime();

(2) Date转化为Calendar
Date date=new Date();
Calendar cal=Calendar.getInstance();
cal.setTime(date);

3,如果日期为空,默认一个日期
      cal.set(1990,01,01);

posted @ 2011-04-12 18:00 半导体 阅读(331) | 评论 (0)编辑 收藏

明宇报表支持IE8

 升级插件到最新版本
正式版下载地址是http://www.soft2web.com/MRLic,下载V3版本
解压缩以后(不需要运行安装程序),更新服务器上报表应用程序下的文件
    报表根目录下的MREngine.prop文件;
    报表根目录\Viewer\MRViewer.CAB文件;

posted @ 2011-04-11 16:53 半导体 阅读(400) | 评论 (0)编辑 收藏

明宇报表打印出来是空白

请先确认一下,点了打印按钮以后,打印机队列里是否有内容,如果有,并且打印机走纸了,但是打印出来的是白纸,请再看一下点了打印按钮以后,弹出的打
印设置对话框里,右下角的“缩放比例”设置,正确的应该是100。设置以后,保存为默认的打印参数(在工具栏上打印机按钮右面的下拉列表里设置);
如果打印队列里没有内容,就是打印机驱动的问题,需要换一个打印机驱动。

posted @ 2011-04-11 15:48 半导体 阅读(330) | 评论 (0)编辑 收藏

sqlserver连接mysql

在mssql的服务器上安装MySQL的ODBC驱动MyODBC

1、为MySQL建立一个ODBC系统数据源,例如:选择数据库为test ,数据源名称为 myDSN

2、建立链接数据库
EXEC sp_addlinkedserver  @server = 'MySQLTest', @srvproduct='MySQL', @provider = 'MSDASQL', @datasrc = 'myDSN'
GO
EXEC sp_addlinkedsrvlogin  @rmtsrvname='MySqlTest',@useself='false',@locallogin='sa',@rmtuser='mysql的用户名',@rmtpassword='mysql的密码'

3、操作数据

SELECT * FROM OPENQUERY (MySQLTest ,'select * from 表' )

posted @ 2011-03-16 10:04 半导体 阅读(357) | 评论 (0)编辑 收藏

webservice调用心得

一,设置AXIS2_HOME环境
set  AXIS2_HOME=F:\axis2-1.4.1-bin\axis2-1.5.1     
注意,如果调试不通过,请多试几个版本.最好不要用axis1 因为他不支持BPEL协议
版本分析:axis2-1.5.1    =JDK1.5   axis2.1.4.1=JDK1.4(个人经验,不代表官方意见:}
二,生成代码:
%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:808/HS_Service/Upload.asmx?wsdl -p client -s -o stub
生成文件放在C:\Documents and Settings\机器名下>
三,编写客户端代码


package client;

import java.math.BigDecimal;
import java.net.MalformedURLException;
import java.rmi.RemoteException;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.xml.rpc.ServiceException;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class ClientTask {
    

    
/**
     * 
@param args
     * 
@throws RemoteException 
     * 
@throws ServiceException 
     * 
@throws MalformedURLException 
     
*/

    
public static void main(String[] args) throws RemoteException, ServiceException, MalformedURLException {
        
// TODO Auto-generated method stub
        Calendar calendar = new GregorianCalendar();
        Date trialTime 
= new Date();
        calendar.setTime(trialTime);
//fly --add 
        
        ClientTask ct 
= new ClientTask();
        UploadStub us 
= new UploadStub();
        UploadStub.JX jx 
= new UploadStub.JX();
        System.out.println(
"校验用户开始.");
        ct.getLogin(
"test_admin","1");

        
        UploadStub.UploadProject uproject 
= new UploadStub.UploadProject();
  
        jx.setJX010000028(
"283333");
        jx.setJX010000001(
"上报状态");
        jx.setJX010000004(
4);
        jx.setJX010000005(
5);
        jx.setJX030305001(
"1");
        jx.setJX010000020(
new BigDecimal("20.0"));
        jx.setJX010000031(
1);
        jx.setJX010000032(
3);
        jx.setJX010000035(
"5");
        jx.setJX010000019(
new BigDecimal(1));
        jx.setJX010000014(calendar.getInstance());
//原为calendar
        jx.setJX010000017(calendar.getInstance());
        jx.setJX030308008(calendar.getInstance());
        jx.setJX010000033(
new BigDecimal(1));
        jx.setJX010000034(
new BigDecimal(1));
        jx.setJX030302005(calendar.getInstance());
        jx.setJX030303013(calendar.getInstance());
        jx.setJX030304007(calendar.getInstance());
        jx.setJX030306004(calendar.getInstance());
        System.out.println(calendar.getInstance());
        

        uproject.setJx(jx);
        us.uploadProject(uproject);
        System.out.println(
"上报状态:"+us.uploadProject(uproject).getUploadProjectResult());

    }

    
public boolean getLogin(String username,String password) throws RemoteException {
        RPCServiceClient serviceClient 
= new RPCServiceClient();  
        Options options 
= serviceClient.getOptions();  
        options.setManageSession(
true);
        
        UploadStub stub 
= new UploadStub();
        UploadStub.Login lg 
= new UploadStub.Login();
        

        
        lg.setPUserName(username);
        lg.setPPassword(password);
        stub.login(lg);  
        System.out.println(stub.login(lg).getLoginResult());
        
        
return stub.login(lg).getLoginResult();
        
    }



}

    



服务端保持状态:
        MessageContext mc  =  MessageContext.getCurrentMessageContext();
        ServiceContext sc  =  mc.getServiceContext();
客户端保持状态
        RPCServiceClient serviceClient = new RPCServiceClient(); 
        Options options = serviceClient.getOptions(); 
        options.setManageSession(true);

posted @ 2011-03-13 20:04 半导体 阅读(272) | 评论 (0)编辑 收藏

ORACLE,更换表空间

创建表空间
CREATE SMALLFILE TABLESPACE "TABLESPACE "
  DATAFILE 'e:\ORACLE\PRODUCT\10.2.0\ORADATA\TABLESPACE _user\TABLESPACE '
  SIZE 50M LOGGING EXTENT MANAGEMENT
  LOCAL SEGMENT SPACE MANAGEMENT AUTO

更换表空间:
select 'alter   table '||table_name|| ' move tablespace   new_tablespace_name;'   from all_tables where tablespace_name='old_tablespace_name';

更换索引表空间:
BLOB字段
select 'alter table ' || table_name ||
       ' MOVE tablespace tablespace _name LOB (' ||
        (select column_name
          from cols
         where table_name = dba_indexes.table_name
           and DATA_TYPE
               like '%LOB' and rownum = 1 )|| ') STORE AS (TABLESPACE tablespace _name );' from
         dba_indexes
         where tablespace_name = 'old_tablespace _name '
           and index_type = 'LOB'
      说明:用了 rownum = 1 可能有些字段无法更新,需要查看如:
         select *
          from cols   where table_name='' and data_type like '%LOB'
普通字段:
select 'alter index '||index_name||' rebuild tablespace tablespace _name;'
from dba_indexes
where  tablespace_name=''
查询在旧空间是否还存在索引
select * from dba_indexes where  tablespace_name=''  and table_owner=''

posted @ 2010-11-29 18:09 半导体 阅读(746) | 评论 (0)编辑 收藏

eclipse中outline里面函数前面的符号说明

红色代表私有,蓝色代表公有
实体方形代表方法
空心方形代表属性
图形后加字母S代表该属性或方法为static静态的,加字母F代表它为final的。
方法后加蓝色三角代表它是继承至父类的方法
断点为蓝色小圆形
蓝色旗状图形代表书签
白底上加蓝色对钩代表task 

posted @ 2010-11-25 15:53 半导体 阅读(491) | 评论 (0)编辑 收藏

WebLogic内存溢出问题配置

在weblogic/common/bin/commEnv.sh中配置

  MEM_ARGS="-Xms32m -Xmx200m -XX:MaxPermSize=128m"

  -Xms:内存初始值

  -Xmx:内存最大值(不要超过内存的80%)

  MaxPermSize:PermGen(Class和Meta存放区域)区域内存最大值。

  可调整为:

  MEM_ARGS="-Xms512m -Xmx512m -XX:MaxPermSize=256m"

   -XX:MaxPermSize改为256或512

posted @ 2010-11-25 14:11 半导体 阅读(1170) | 评论 (0)编辑 收藏

当JAVA不能断点调试时

首先,你有这个源文件吗?
如果有,最简单的办法是将源文件复制到工程下面的src下面去。
如果不行,你可以试着删除有你需要调试的相关的class文件,只保留源文件。
这样DEBUG就会进入到源文件中。
至于原因:如果你把源文件放在和class文件同一级目录下面。那么它会优先执行class文件。你试着想一下。class文件时java文件编译之后的.那么你在运行的时候,虚拟机要去编译java文件,而java文件在编译的时候,计算机就已经找到了class文件并执行了..
如果不在同一级目录下,这种情况一般是大工程,需要打补丁的那种,那么在执行的时候底层开发人员会设置执行的先后顺序。。比如优先执行classes下面的文件,再执行lib包里面的文件。

如果删除报错的话,就说明你的java文件路径没有被检测到啊...如果确定java文件没有放错位置..那确实有可能是你说的环境问题了..你可以在另一台机子上面测试一下。

环境变量特别要注意的是:eclipse中项目名称->右击属性->JAVA complier ->查看complier compliance level  版本,是否与当前JDK版本一致!

posted @ 2010-11-17 15:13 半导体 阅读(524) | 评论 (0)编辑 收藏

Velocity语法(VM)

  Velocity语法(VM)  
 

1.     变量

(1) 变量的定义 :

#set($name = "hello")      说明:velocity中变量是弱类型的。

当使用#set 指令时,括在双引号中的字面字符串将解析和重新解释,如下所示:

#set($directoryRoot = "www" )

#set($templateName = "index.vm" )

#set($template = "$directoryRoot/$templateName" )

$template

输出将会是: www/index.vm

注: 在velocity中使用$2.5这样的货币标识是没有问题得的,因为velocity中的变量总是以一个大写或者小写的字母开始的。

(2) 变量规范的写法

${name} ,也可以写成:$name。提倡用前面的写法。

例如:你希望通过一个变量$vice 来动态的组织一个字符串。

 Jack is a $vicemaniac.

本来变量是 $vice现在却变成了$vicemaniac,这样Veloctiy就不知道您到底要什么了。所以,应该使用规范的格式书写 : Jack is a ${vice}maniac
现在Velocity知道变量是$vice而不是$vicemaniac。

注意:当引用属性的时候不能加{}

(3) 变量的赋值: 

$name="hello"

赋值的左边必须是一个变量或者是属性引用。右边可以是下面六种类型之一:

变量引用,字面字符串,属性引用,方法引用,字面数字,数组列表。

下面的例子演示了上述的每种类型:

#set( $monkey = $bill ) ## variable reference

#set( $monkey.Friend = "monica" ) ## string

#set( $monkey.Blame = $whitehouse.Leak ) ## property reference

#set( $monkey.Plan = $spindoctor.weave($web) ) ## method reference

#set( $monkey.Number = 123 ) ##number

#set( $monkey.Say = ["Not", $my, "fault"] ) ## ArrayList

注意: ①如果上述例子中的右值是null, 则左值不会被赋值,也就是说会保留以前的值。

②velocity模板中未被定义的变量将被认为是一个字符串。例如:

#set($foo = "gibbous")
$moon = $foo
输出结果为:
$moon = gibbous

③ velocity 模板中不会将 reference 解释为对象的实例变量。例如: $foo.Name 将被解释为 Foo 对象的 getName ()方法,而不是 Foo 对象的 Name 实例变量。例如:

$ foo.getBar()  等同于 $ foo.Bar ;

$ data.getUser("jon") 等同于 $ data.User("jon") ;

data.getRequest().getServerName() 等同于

$ data.Request.ServerName 等同于 $ {data.Request.ServerName}

 

2.     循环

#foreach ($element in $list)
     This is $element.
     $velocityCount
#end

例子:

#set( $list = ["pine", "oak", "maple"])

#foreach ( $ element in  $ list)

$velocityCount

This is  $ element.<br>
#end

输出的结果为:

1 This is pine.
2 This is oak.
3 This is maple.

每次循环 $list 中的一个值都会赋给 $element 变量。
$list 可以是一个 Vector、 Hashtable 或者 Array 。分配给 $element 的值是一个 java 对象,并且可以通过变量被引用。例如:如果 $element t 是一个 java 的 Product 类,并且这个产品的名字可以通过调用他的 getName() 方法得到。

#foreach ( $key in $list.keySet())
Key: $key -> Value: $list.get($key) <br>
#end

提示 :velocity中大小写敏感。

Velocity还特别提供了得到循环次数的方法,$velocityCount变量的名字是Velocity默认的名字。

 

例子:

First example:
  #foreach ( $foo in [1..5] )
    $foo
  #end

  Second example:
  #foreach ( $bar in [2..-2] )
    $bar
  #end

  Third example:
  #set ( $arr = [0..1] )
  #foreach ( $i in $arr )
    $i
  #end
上面三个例子的输出结果为:
  First example :
  1 2 3 4 5

  Second example :
  2 1 0 -1 -2

  Third example :
  0 1

 

3.     条件语句

#if (condition)

#elseif (condition)

#else

#end

4.     语句的嵌套

    #foreach ($element in $list)

       ## inner foreach 内循环

       #foreach ($element in $list)

       This is $element. $velocityCount < br > inner < br >

       #end

       ## inner foreach 内循环结束

    ## outer foreach

    This is $element.

    $velocityCount < br > outer < br >

    #end

语句中也可以嵌套其他的语句,如#if…#else…#end等。

5.       注释
(1)单行注释:
  ## This is a single line comment.
(2) 多行注释:
  #*
   Thus begins a multi-line comment. Online visitors won’t
   see this text because the Velocity Templating Engine will
  ignore it.
  *#
(3)文档格式:
  #**
   This is a VTL comment block and
   may be used to store such information
  as the document author and versioning
   information:
   @version 1.1

   @author  xiao
     *#

6.     关系和逻辑操作符

Velocity 也具有逻辑AND, OR 和 NOT 操作符。

## example for AND

#if($foo && $bar)

   <strong> This AND that</strong>

#end

例子中#if() 指令仅在$foo 和$bar 斗为真的时候才为真。如果$foo 为假,则表达式也为假;并且 $bar 将不被求值。如果 $foo 为真,Velocity 模板引擎将继续检查$bar的值,如果 $bar 为真,则整个表达式为真。并且输出This AND that 。如果 $bar 为假,将没有输出因为整个表达式为假。

7.Velocity 中的宏

Velocity中的 宏我们可以理解为函数。

①宏的定义

#macro(宏的名称 $参数1 $参数2 …)

   语句体(即函数体)

#end

②宏的调用

#宏的名称($参数1 $参数2 …)

    说明:参数之间用空格隔开。

8. #stop

   停止执行模板引擎并返回,把它应用于debug是很有帮助的。

9.#include 与#parse

#include和#parse的作用 都是 引入本地文件, 为了安全的原因,被引入的本地文件只能在TEMPLATE_ROOT目录下。

区别:

(1) 与#include不同的是,#parse只能指定单个对象。而#include可以有多个

如果您需要引入多个文件,可以用逗号分隔就行:
#include ( " one.gif " , " two.txt " , " three.htm " )
在括号内可以是文件名,但是更多的时候是使用变量的:
#include ( “greetings.txt”, $seasonalstock )

(2) #include被引入文件的内容将不会通过模板引擎解析;

而#parse 引入的文件内容 Velocity 将解析其中的 velocity 语法并移交给模板,意思就是说相当与把引入的文件 copy 到文件中。

#parse是可以递归调用的,例如:如果dofoo.vm包含如下行:

Count down.<br>

#set ($count = 8)

#parse ("parsefoo.vm")

<br>All done with dofoo.vm!

那么在parsefoo.vm模板中,你可以包含如下VTL:

$count

#set($count = $count - 1)

#if ( $count > 0 )<br>

#parse( "parsefoo.vm" )

#else

<br>All done with parsefoo.vm!

#end 的显示结果为:

Count down.

8

7

6

5

4

3

2

1

0

All done with parsefoo.vm!

All done with dofoo.vm!

注意:在 vm中使用#parse来嵌套另外一个vm时的变量共享问题。如:
->a.vm 里嵌套 b.vm;
->a.vm 里定义了变量 $param;
->b.vm 里可以直接使用$param,无任何限制。
但需要特别注意的是,如果b.vm里同时定义有变量$param,则b.vm里将使用b.vm里定义的值。

10.转义字符'\'的使用

如果reference被定义,两个’\’意味着输出一个’\’,如果未被定义,刚按原样输出。如:

#set($email = "foo" )

$email

\$email

\\$email

\\\$email

输出:

foo
$email
\foo
\$email

如果 $email 未定义

$email

\$email

\\$email

\\\$email

输出:

$email
\$email
\\$email
\\$email

 

11. 内置对象
Velocity内置了一些对象,在vm模版里可以直接调用,列举如下:
$request、$response、$session,另外,模板内还可以使用 $msg内的消息工具访问 Struts 的国际化资源,达到简便实现国际化的方法。

12. 数组访问

对数组的访问在Velocity 中存在问题,因为Velocity只能访问对象的方法,而数组又是一个特殊的Array,所以虽然数组可以进行循环列举,但却不能定位访问特定位置的元素,如 strs[2],数组对固定位置元素的访问调用了Array的反射方法get(Object array, int index),而Velocity没能提供这样的访问,所以数组要么改成List等其他类容器的方式来包装,要么就通过公用Util类的方式来提供,传入数组对象和要访问的位置参数,从而达到返回所需值的目的。

 

 

示例部分

1.Hello world的示例代码:

(1)Velocity模板 (hello.html)

<!DOCTYPE HTML PUBLIC "-//W 3C //DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

</HEAD>

<BODY>

    hello,$name!                 (注意:这里的name与VelocityTest.java中的名称要一致)

</BODY>

</HTML>

(2)将velocity模板的内容转换的类(VelocityTest.java)

import java.io.File;

import java.io.FileOutputStream;

import java.io.PrintWriter;

import java.io.Writer;

import org.apache.velocity.Template;

import org.apache.velocity.VelocityContext;

import org.apache.velocity.app.Velocity;

import org.apache.velocity.app.VelocityEngine;

 

/**

 * Velocity转换

 * @author

 */

public class VelocityTest

{

    /**

     * 主函数

     * @param args

     */

    public static void main(String[] args)

 {

      //获取模板引擎

        VelocityEngine ve = new VelocityEngine();

        //模板文件所在的路径

        String path = "D:/java/jproject/regedit/webroot";      

        //设置参数

        ve.setProperty(Velocity.FILE_RESOURCE_LOADER_PATH, path);

//处理中文问题

        ve.setProperty(Velocity.INPUT_ENCODING,"GBK");

        ve.setProperty(Velocity.OUTPUT_ENCODING,"GBK");

        try

        {

            //初始化模板

            ve.init();

            //获取模板(hello.html)

Velocity 模板的名称
 
            Template template = ve.getTemplate("hello.html");   

            //获取上下文

            VelocityContext root = new VelocityContext();

            //把数据填入上下文

            root.put("name","world");                     (注意:与上面的对应)

//输出路径

            Strint outpath = "e:/helloworld.html";

            //输出

            Writer mywriter = new PrintWriter(new FileOutputStream(

                new File(outpath)));           

            template.merge(root, mywriter);

            mywriter.flush();          

        }

        catch (Exception e)

        {

            e.printStackTrace();

        }

    }

}

(3)环境的搭建

在lib目录内分别copy 进:velocity-1.4.jar,velocity-dept.jar;

下载地址:http://jakarta.apache.org/velocity/

(4)运行后的结果如下:

<!DOCTYPE HTML PUBLIC "-//W 3C //DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD>

<TITLE> New Document </TITLE>

</HEAD>

<BODY>

hello,world!

</BODY>

</HTML>

 

2. Servlet和Velocity结合 示例

(1)example.html

  <html>
  <head><title>Velocity</title></head>
  <body bgcolor="#ffffff">
    <center>
    <h2>Welcom to Velocity!</h2>
    <i>Here's the list of people</i>
    <table cellspacing="0" cellpadding="5" width="20%" >
    <tr>
    <td bgcolor="#eeeeee" align="center">
    Names:
    </td>
    </tr>
    #foreach ($name in $theList)
    <tr>
    <td bgcolor="#eeeeee" align="center">$name</td>
    </tr>
    #end
    </table>
    </center>
  </body>
</html>

(2)servlet

package com.koal.velocity;

 

import java.io.IOException;

import java.io.FileNotFoundException;

import java.util.ArrayList;

import java.util.Properties;

import java.util.Vector;

import javax.servlet.ServletConfig;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.velocity.Template;

import org.apache.velocity.context.Context;

import org.apache.velocity.servlet.VelocityServlet;

import org.apache.velocity.app.Velocity;

import org.apache.velocity.exception.ResourceNotFoundException;

import org.apache.velocity.exception.ParseErrorException;

 

public class SampleServlet extends VelocityServlet 

{

    /**

     *   由VelocityServlet.init()调用,

     *   在此找出模版的路径

     */

    protected Properties loadConfiguration(ServletConfig config )

        throws IOException, FileNotFoundException {

        Properties p = new Properties();

        //取得路径

        String path = config.getServletContext().getRealPath("/");

        if (path == null)

        {

            System.out.println(" SampleServlet.loadConfiguration() : unable to "

                    + "get the current webapp root.  Using '/'. Please fix.");

            path = "/";

        }

        //设置路径

        p.setProperty( Velocity.FILE_RESOURCE_LOADER_PATH, path);

       

        return p;

    }

 

    /**

     *  Velocity主要的商业逻辑处理方法,由VelocityServlet自动调用

     *  @param ctx 模板上下文            

     *  @return Template 模板信息

     */  

    public Template handleRequest( HttpServletRequest request,

       HttpServletResponse response, Context ctx )

   {       

        //主要在此设置演示用的数据,开发中在此调用相应的业务处理流程,

 

        //并设置返回到页面的数据

        //待展示的列表数据
        String p1 = "第一位:LiuDong";
        String p2 = "第二位:Liang.xf";
        Vector personList = new Vector();
        //中文需要转换
        try {
            personList.addElement(new String(p1.getBytes(), "ISO-8859-1") );
            personList.addElement(new String(p2.getBytes(), "ISO-8859-1") );
        } catch (Exception e) {
            System.out.println("数据转换异常:"+e);   
        }
        //设置数据,供页面模版替换成显示的数据
        ctx.put("theList", personList );    

        //定义模板       

        Template outty = null;       

        try

        {

            //取模板

            outty =  getTemplate("example.html");           

        }

        catch( ParseErrorException pee )

        {

            System.out.println("SampleServlet: parse error for template " + pee);

        }

        catch( ResourceNotFoundException rnfe )

        {

            System.out.println("SampleServlet: template not found " + rnfe);

        }

        catch( Exception e )

        {

            System.out.println("Error " + e);

        }

       

        return outty;

}

 

(3)在web.xml中的配置:

<web-app>

<servlet> 

       <servlet-name>SampleServlet</servlet-name>

       <servlet-class>com.koal. velocity .SampleServlet</servlet-class>

</servlet>

    <servlet-mapping>

       <servlet-name>SampleServlet</servlet-name>

       <url-pattern>/SampleServlet</url-pattern>

</servlet-mapping>

</web-app>

 

(4)环境的搭建

在lib目录内分别 copy进:commons-collections.jar , velocity- 1.4.jar,velocity-dept.jar;
    Tomcat运行环境正常。
    启动Tomcat,在IE上输入: http://localhost:8080/example ,页面显示数据列表:

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mmm123lmj/archive/2009/11/19/4833620.aspx

posted @ 2010-11-16 16:43 半导体 阅读(11068) | 评论 (1)编辑 收藏

oracle语法

--增加字段
alter table table_name add (col1 type,col2 type);


ALTER TABLE TABLE_AAA ADD (STOCKMAN NUMBER(18))//添加一列

COMMENT ON COLUMN TABLE_AAA.STOCKMAN IS '管理人员' //给列添加注释
 
ALTER TABLE TABLE_AAA ADD CONSTRAINT FK_TABLE_AAA_R_TABLE_BBB_S FOREIGN KEY (STOCKMAN) REFERENCES TABLE_BBB (ID)//给列添加外键


--查看空间所有表
set pause on --分页

select * from all_tables where tablespace_name=''

--函数列表:
 row_number()  查看行号

--在oracle查询分析器中直接插入记录:

   select * from 表名 for update ;

posted @ 2010-11-03 10:11 半导体 阅读(164) | 评论 (0)编辑 收藏