Servlet 的一些学习心得

1.       Servlet类只实例化一次(在正常情况下),且常驻内存中,任何短期内不会引发内存泄漏的问题在这里最终都会暴露出来,所以在写程序时一定要注意内存方面的问题,最好事先要测试一下。

2.       Servlet中声明变量时,要始终记住一点,就是Servlet的访问规则是线程级的,所以在声明每个变量前都要思考,这个变量是用来干什么的,是给所有线程也可以说是用户来使用的公共变量,还是一个针对每个线程或用户都不同(特有)的变量。Servlet的变量可分为三种,一种是静态变量,这种变量的用途显而易见。另外的就是局部变量和实例变量,这两种很难区分,我个人理解为:局部变量是为每个线程准备的,这样每个线程使用的变量地址都不同,各自声明自己不同的变量,不易发生错误。而实例变量则不同,他(可能)是声明给所有用户的,但这并不是你的本意,因为你忽略了正常情况下Servlet只实例化一次,所以当单用户时不会发生问题,但当用户多了即多线程访问时就可能出现问题,如A用户访问的变量A实际上返回的可能时B用户中的变量A。下面给出局部变量和实例变量的例子,读者一看就明白了,还是那句话,要记住Servlet正常情况下只实例话一次,而访问是往往是多线程的,个人建议新手如果区分不开变量用途话尽量使用局部变量,这样虽然浪费一点内存和效率,但却保证了程序的正确性。局部变量和实例变量例子如下(这里简写拉呵呵):

1,局部变量,每个线程都会声明各自的局部变量,因此访问不冲突。
public class getDemo extents HttpServlet {
   public void doget(…….)throws…..{
       ……….
       String A=new String();//
局部变量,每个线程调用doget()方法时都会
       A=
…..;            //重新声明此变量
       ……….
   }
}

2,实例变量,这种变量一般只随Servlet实例话一次后常驻内存,使用时要慎重。
public class getDemo extents HttpServlet {
String A=new String(); //
实例化变量,在此声明后,每个线程都使用一个变量。
   public void doget(…….)throws…..{
       ……….
       A=
…..//此处A没有声明,因此当一个线程改变了这个之后,其它的线程中此值也变了。
       ……….
   }
}

 

3如何获得错误类型:
可以在error.jsp页面声明:
   if(exception instanceof NumberFormatException){

……………….

}

因此同理可以在error页面处理各种已知的错误类型了。

4 DomSax的区别:

编程因素              Dom                                                 Sax

内存要求              可能很大                                          取决与内存中保留项目的大小

启动时间              较慢,因为要分析每个元素。              很快,特别是所要元素易于找到

重复搜索时间       很快,一切都在内存中。                     很慢,每次都得重新运行分析

修改功能              很灵活                                              只限于每次编写新的XML文档

 

所以日后若用到解析XML时要根据需要选择不同的解析器。

5.servlet中的转发机制

如果servlet组件要把一个请求转发个一个jsp页面,如hello.jsp时,可以利用下面的代码:

RequestDispather rd=request.getRequestDispather(“hello.jsp”);

       rd.forward(request,response);

重定向可用下面代码:

       response.sendRedirect(“hello.jsp”);

区别:利用forward可以转发request里的数据,而重定向只是强制跳转到某个页面,什么数据都不传递。

6.怎样使用数据库中的回滚功能,以及预处理命令,怎么控制异常和关闭连接。

public void insert()throws Exception{

  Connection con=DBCon.getConnection();

PrepareadStatement pre=null;

try{

Pre=con.prepareStatement(insert into A (id,name) values(?,?));

Con.setAutoCommit(false);

Pre.setInt(1);

Pre.setString(“mc”);

Con.commit()

       }catch(Exception e){

              try{

                     con.rollback();

}catch(SQLException ee){

              ……..

}

throw e;

}finally{

       try{

              pre.close();

              con.close();

}catch(Exception e){

…….

}

}

}

7如何配置Servlet,及其含义。

首先在web.xml中,添加<servlet></servlet><servlet-mapping></servlet-mapping>节点,例子如下:

<servlet>

<servlet-name>action</servlet-name>//……….1

<servlet-class>edu.cust.mm</servlet-class>//….2

</servler>

<servlet-mapping>

<servlet-name>action</servlet-name>//……….3

       <url-pattern>*.do</url-pattern>//………………4

</servlet-mapping>

具体含义是在1处声明你在网页中要访问的servlet的名字。

2处指出您要访问的servlet的类地址

3处是映射,要注意32必须一致,4处的意思是凡是在URL中,以do结尾的,都转到action这个servlet中处理。例如:http://127.0.0.1/mc/11111.do;如果将其改为/do/*,则表示action将处理所有以/do为前缀的url,如,http://127.0.0.1/mc/do/afasdfa;

另外,<init-param>可以用来配置servlet的初始化参数,常用<param-name><param-value>来配对。<welcome-file-list> 中的<welcome-file>可以用来设置多个欢迎文件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值