JBOSS 点滴

丰丰的博客

#

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 半导体 阅读(173) | 评论 (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 半导体 阅读(213) | 评论 (0)编辑 收藏

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

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

posted @ 2013-12-14 11:00 半导体 阅读(233) | 评论 (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 半导体 阅读(181) | 评论 (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 半导体 阅读(289) | 评论 (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 半导体 阅读(265) | 评论 (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 半导体 阅读(429) | 评论 (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 半导体 阅读(177) | 评论 (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 半导体 阅读(431) | 评论 (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 半导体 阅读(161) | 评论 (0)编辑 收藏

仅列出标题
共27页: First 上一页 3 4 5 6 7 8 9 10 11 下一页 Last