servlet笔记

servlet部署在容器里,我们使用的是tomcat
他的生命周期分为以下几个阶段
1.装载servlet由tomcat来完成
2。创建一个servlet实例
3.调用servlet的init ()方法,该方法主要是初始化,只会在第一次访问该servlet时被调用一次
4.服务,调用servlet的servlet()方法,一般的业务逻辑在这里处理,
该方法在访问servlet时,都会被调用。
5.销毁 ,也可以理解为释放内存有三种方法 1.是关闭tomcat 2.关机 3.reload
servlet 部署
<servlet>
    <description>This is the description of my J2EE component</description>
    <display-name>This is the display name of my J2EE component</display-name>
    <servlet-name>haha</servlet-name>
    <servlet-class>com.niit.web.HaHa</servlet-class>
  </servlet>


  <servlet-mapping>
    <servlet-name>haha</servlet-name>
    <url-pattern>/haha</url-pattern>
  </servlet-mapping>
提交表单的时候get 会在地址栏上显示账号和密码,并且提交数据不能大于2K
post 理论上不受限制,但是实际编程中建议不要大于64K
get提交的速度比post快,get要求服务器立即处理请求,post请求可能形成一个队列请求。

request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
解决页面的乱码问题
---------------------
多个servlet如何去共享数据?
1.cookie技术(同一用户的不同页面共享数据)
2.sendRedirect()转向
3.隐藏表单
4.session技术

1.服务器在客户端保存用户的信息,保存在客户端。服务器端通过回调去读取cookie。
cookie父路径设置cookie 子路径可以访问到,子路径设置cookie父路径访问不到
4.session比较重要:当用户打开浏览器,访问某个网站时,服务器就会在服务器为该浏览器分配一个空间,该空间被这个浏览器独占,这个空间就是session空间,该空间中的数据默认存在时间为30min,你也可以修改。
--------------------------
SQl注入漏洞
不能同时验证用户名和密码,应该先从数据库中查询用户名,然后根据用户名返回一个相应的密码,再把这个返回的密码跟输入的密码比较
如果相等的话 就用户存在。
SQL代码 String sql = "select passWord from users where userName = '"+username+"'";
是用单引号''把"+username+"包括起来了。
---------------------------
分页技术:
4个变量
1.int pageSize:每页显示多少个记录。指定的
2.int pageNow 希望显示第几页。用户选择的
3.int pageCount一共有多少页。是计算出来的。取决于pagesize,rowcount
4. int rowCount 一共有多少条记录。从表中查询得到
分页算法 (SQl serve)
if(rowCount%pageSize==0)
{
 pageCount=rowCount/pageSize;
}
else
{
 pageCount=rowCount/pageSize+1;
}
select top pageSize *字段名列表 from 表明 where id not in(select top pageSize x (pageNow-1) id from 表名)
(mysql)分页算法
"select *from student limit "+(pageNow-1)*pageSize+","+pageSize+""

(oracle)分页算法:
 String sqlRownum="select id,stuname,stuage,stugender,stuemail from(select rownum as num,s.*from students s) a  where a.num between "+((pageNow-1)*pageSize+1)+" and "+pageSize*pageNow+"";
-------sendRedirect()和forward()方法的区别--------
HttpServletResponse 接口的sendRedirect()和RequestDisatcher接口
的forward()方法都可以进行跳转。
forward()是透明的
sendRedirect()不但可以位于同一主机上的不同web应用程序之间,进行重定向,而且可以将客户端重定向到其他服务器上的web应用
-------------------------------------------------------
一个参数不能连续传递2个servlet,因为传递到第一个servlet的时候,这个servlet就生命周期就已经结束了。传递过去的参数为null.
可以用session这个技术来解决。
----------servlet中get 和post的区别----------------
Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下:

1、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。

2、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。

3、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。

4、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。

5、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。

6、Get是Form的默认方法。

使用Post传输的数据,可以通过设置编码的方式正确转化中文;而Get传输的数据却没有变化。在以后的程序中,我们一定要注意这一点。
-------------------------------------------------------------
application 所有客户端都可以访问
servlet context 
通过HttpServlet的getServletContext方法可以拿到

ServletContext application=this.getServletContext();
Integer accessCount =(Integer)application.getAttribute("accessCount");
if(accessCount==null)
{
   accessCount=new Integer(0);
}
else {
accessCount=new Integer(accessCount.intValue()+1);
}
application.setAttribute("accessCount",accessCount);
可以应用于来访纪录
 用封装和重载的方法去执行相同的代码
例如数据库连接,creatStatement,关闭connection;
Connection conn=DB.getConn();
Statement stmt=DB.getStatement(conn);
ResultSet  rs=DB.getResultSet(stmt,sql);

posted @ 2011-08-21 16:49  思想至上  阅读(551)  评论(0编辑  收藏  举报