论坛首页 入门技术论坛

最近项目开发知识总结积累

浏览 3495 次
精华帖 (0) :: 良好帖 (1) :: 新手帖 (2) :: 隐藏帖 (13)
作者 正文
   发表时间:2009-09-23   最后修改:2009-09-23
1、关于时间格式问题

(1)对系统时间利用java时间的歌是函数进行处理
SimpleDateFormat dateFm = new SimpleDateFormat("yyyy-MM-dd HH-mm-ss"); //格式化当前系统日期
String reqDate = dateFm.format(new java.util.Date());
以上是对系统时间格式化成:年-月-日 时-分-秒

(2)请参照jdk—Api进行操练
2、在HTNL中获得下拉项的值,可以利用一个隐藏域,把取出的数据赋给隐藏域,然后通过js获得下拉单中的


3、对于在js中进行url跳转要用window.location=url

4、在js中弹出确认按钮后跳转页面,如以下就是经过确认后跳转到/sms/student/delete.action?id=<%=

student.getId()%>页面:
<a onclick="return confirm('真的要删除该信息吗?')" href="/sms/student/delete.action?id=<%=

student.getId()%>">删除</a>

5、加载读取某一个文件的操作(特别是对于数据库的配置文件比较适合):
(1)首先声明Properties
private static Properties config = new Properties();
(2)通过输入流来读取文件
InputStream in = ConnectionFactory.class.getClassLoader()
.getResourceAsStream("jdbc.properties");
(3)通过properties来加载输入流
config.load(in);
(4)关闭输入流
in.close();

6、读取JNDI数据源(在5的基础上)
Connection con = null;
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(config.getProperty("jndiName"));
con = ds.getConnection();

7、JNDI连接池配置
以tomcat6.0为例:

将数据库驱动jar包导入到tomcat6.0的/lib下,修改以下类

//连接数据库的类
class  connectDB:

public static Connection getConnection(){

Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/restrant");
conn = ds.getConnection();
}

在你的项目的配置文件web.xml中增加下面一段:
web.xml
  <resource-ref>
    <res-ref-name>jdbc/restrant </res-ref-name>
    <res-type>javax.sql.DataSource </res-type>
    <res-auth>Container</res-auth>
  </resource-ref>

最后,在tomcat/webapps/yourpro/META-INF/下增加context.xml文件
新建txt文件,复制下面代码,重命名为context.xml

<?xml version='1.0' encoding='utf-8'?>
<Context>
<Resource name="jdbc/restrant"
type="javax.sql.DataSource"

//增加数据库驱动,我的是sqlserver2005
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

//指定数据库,并定义登录名和密码
url="jdbc:sqlserver://localhost:1433;databaseName=restrant"
username="sa" password="sa" maxActive="200" maxIdle="10"
maxWait="-1"/>
</Context>

重新启动服务器--------->结束


8、在sturts2中让action实现ModelDriven接口,在Web层和业务逻辑层使用相同的对象,即如
LoginAction 实现了ModelDriven<User>接口,在页面中,这个模型对象中的属性可以直接通过
属性名来访问(如username),而不需要使用形如“user.username”这种格式的表达式,在action
中也不需要为这个模型对象提供JavaBean风格的getter和setter方法。

9、在struts2中记录登陆人数,和其他的一样,需要把信息存放到application中,在页面取得
:${requestScope.greeting}  和 ${applicationScope.counter}
(1)在action的execute中添加
ActionContext context = ActionContext.getContext();
    Map request = (Map)context.get("request");
    Map session = context.getSession();
    Map application = context.getApplication();
    equest.put("greeting", "欢迎您光顾本站!!!");     
     
      //把user信息存放到session中
      session.put("user", user);
     
      //
      Integer count = (Integer)application.get("counter");
      if(null == count)
        count=1;
      else
        count++;
      application.put("counter", count);
(2)在action开始声明
  private Map request;
  private Map session;
  private Map application;
public void setRequest(Map request)
  {
    this.request = request;
  }


  public void setSession(Map session)
  {
    this.session = session;
  }


  public void setApplication(Map application)
  {
    this.application = application;
  }
在execute中调用
      request.put("greeting", "欢迎你光临本站");
      session.put("user", user);  
      Integer count = (Integer)application.get("counter");
      if(null == count)
        count=1;
      else
        count++;
      application.put("counter", count);

(3)在execute中
HttpServletRequest request = ServletActionContext.getRequest();      
HttpSession session = request.getSession();
ServletContext context = ServletActionContext.getServletContext();

request.put("greeting", "欢迎你光临本站");
      session.put("user", user);  
      Integer count = (Integer)application.get("counter");
      if(null == count)
        count=1;
      else
        count++;
      application.put("counter", count);
(4)在action中先声明
HttpServletRequest request;
ServletContext context;
添加get、set方法
在execute中添加
HttpSession session = request.getSession();

request.put("greeting", "欢迎你光临本站");
      session.put("user", user);  
      Integer count = (Integer)application.get("counter");
      if(null == count)
        count=1;
      else
        count++;
      application.put("counter", count);

10、注意struts2.1.6和struts2.0.14不同
(1)与struts2.0.14不同,要想正常使用struts2.1.6,至少需要6 个jar包:

struts2-core-2.1.6.jar

freemarker-2.3.13.jar

commons-logging-1.0.4.jar

ognl-2.6.11.jar

xwork-2.1.2.jar

commons-fileupload-1.2.1.jar

(2) 在使用零配置( zero configuration)的时候按照struts2.0.14中那样在sturts2-core-2.0.11中

org.apache.struts2.config下找了半天都没有那个包,上网才晓得“struts2.1.6中还需要引用struts2-

convention-plugin-2.1.6.jar文件,而且注释类的包也变了(又增加了一些新的注释类),Struts2.0.14中

的注释类在org.apache.struts2.config包中,而struts2.1.6的注释类在

org.apache.struts2.convention.annotation包中。除此之外,有些注释的属性名也变了,如Result注释在

struts2.0.14中有一个value属性,表示一个要转入的URL,而
Struts2.1.6的Result注释中使用location属性代替了value属性(不再有value属性了),但它们的使用方法

相同。”

(3)记得在struts2.0.14中,@result中type为类名,然后利用反射机制装载这个类例如

type=org.apache.struts2.dispatcher.ServletRedirectResult.class,而struts2.1.6中type应填入名称如

type="redirect",否则会报错。

(4)在action包设置的时候<package name="action" extends="struts-default" namespace="/">如果缺省

namespace就会报错,找不到result

(5)在一个action返回result访问另一个package中的action时:<result  type="chain">/xxx/test</result>

来访问
<action name="test" namespace="/xxx"会报错,找不到这个action,但是如果改成
<result type="chain">
   <param name="actionName">test</param>
   <param name="namespace">/xxx</param>
</result>
这种方法来访问就没有问题。

11、页面经过刷新几秒后跳转到另一个页面示例如下:
<head>
    <META HTTP-EQUIV="Refresh" CONTENT="0;URL=Welcome.do">
</head>
注:content表示的是间隔几秒刷新一次
12、页面刷新的实现:
(1)页面自动刷新js版1
<script language="JavaScript">
function myrefresh()
{
       window.location.reload();
}
setTimeout('myrefresh()',1000); //指定1秒刷新一次
</script>
(2)页面自动刷新js版2
//如何刷新包含该框架的页面用  
<script language=JavaScript>
   parent.location.reload();
</script>  

//子窗口刷新父窗口
<script language=JavaScript>
    self.opener.location.reload();
</script>
(或<a href="javascript:opener.location.reload()">刷新</a>)

//如何刷新另一个框架的页面用
 
<script language=JavaScript>
   parent.另一FrameID.location.reload();
</script>

(3)页面自动刷新js版3

    history.go(0)
    location.reload()
    location=location
    location.assign(location)
    document.execCommand('Refresh')
    window.navigate(location)
    location.replace(location)
    document.URL=location.href


   发表时间:2009-09-23  
引用

5、加载读取某一个文件的操作(特别是对于数据库的配置文件比较适合):
(1)首先声明Properties
private static Properties config = new Properties();
(2)通过输入流来读取文件
InputStream in = ConnectionFactory.class.getClassLoader()
.getResourceAsStream("jdbc.properties");
(3)通过properties来加载输入流
config.load(in);
(4)关闭输入流
in.close();


在Spring中用
<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<list>
				<value>classpath:*.properties</value>
                           </list>
                  </property>
<bean>
0 请登录后投票
   发表时间:2009-09-23  
楼主这样的总结值得学习啊.温故而知新
0 请登录后投票
   发表时间:2009-09-23  
sunway00 写道
楼主这样的总结值得学习啊.温故而知新

呵呵,谢谢你这么鼓励,是的,经常由于某个知识被忘记,所以一旦想起来就记下来,还是在入门徘徊
0 请登录后投票
   发表时间:2009-09-23  
基本是常用的知识点,有的时候忘了也挺麻烦的,lz的习惯很好。
0 请登录后投票
   发表时间:2009-09-24  
不错,真的不错!收藏了,好多东东,时间长不用了,就忘了。
0 请登录后投票
   发表时间:2009-09-25  
thinkinperson 写道
2、在HTNL(ps:楼主有错别字)中获得下拉项的值,可以利用一个隐藏域,把取出的数据赋给隐藏域,然后通过js获得下拉单中的

我是直接使用c:foreach把<option></option>输出

for example:
<select>
  <c:foreach var="" items="">
     <option>data</option>
  </c:foreach>
</select>

呵呵,谢谢您的指出我的错误,我这个是当时需要把参数传到控制操作层出的下策
0 请登录后投票
   发表时间:2009-09-25  
漫步壁虎 写道
LZ的分享精神值得大家学习,但是我想给LZ提一点建议,也就是既然是拿出来分享,可否将格式调整一下,使可读性增强一些。有时候再好的贴,一旦看上去排版极差,也会让人趣味减半

不好意思,我如果有闲时间的话,一定好好整理编辑一下
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics