servlet学习笔记

来源:互联网 发布:哪个网领淘宝优惠券 编辑:程序博客网 时间:2024/06/05 06:41

开发servlet三种方法:
1、实现servlet接口
2、继承GenericServlet
3、继承HttpServlet

webapps下建立自己的工程目录
然后再下建立WEB-INF
在WEB-INF下面建立lib,classes文件夹
web.xml文件
lib放入要用到的库 classes类

开发servlet引入servlet-api.jar
a、继承servlet
public void init(ServletConfig parm1) throws ServletException
//该函数用于初始化该Servlet(类似于类的构造函数)
//该函数只会被调用一次(当用户第一次访问该Servlet时被调用)

public void service(ServletRequest req,ServletResponse res)
//这个函数用于处理业务逻辑
//程序员应该把业务逻辑代码写在这里。该函数被调用多次
//当用户每访问一次servlet都会调用。
//req:用户获得客户端(浏览器)的信息
//res:用于向客户端浏览器)返回信息

//从res中得到PringWriter
PrinterWriter pw=res.getWriter();
pw.println("hello world");向浏览器信息。

serlvet开发流程 servlet的生命周期Servlet 部署在容器里(我们使用的是tomcat,也可是别的比如jboss,
weblogic..),它的生命周期由容器来管理:
Servlet的生命周期分为以下几个阶段:
1 装载servlet,由相应的容器来完成。
2. 创建一个Servlet实例。
3. 调用servlet的init()方法,该方法只会在第一次访问该servlet时被
调用一次。
4. 服务 :调用servlet的service()方法,一般业务逻辑在这里处理。
该方法在访问该servlet时,都会被调用。
5. 销毁:调用servlet的destory()方法,销毁该servlet实例. 该方法在
以下情况被调用:
a: tomcat重新启动      b: reload该Webapp     c: 重新启动电脑


web.xml配置
<servlet>
<!-- Servlet名字,名字可以随意-->
         <servlet-name>org.apache.jsp.index_jsp</servlet-name>
<!-- Servlet类名,用包名+类名,不要后缀-->
         <servlet-class>org.apache.jsp.index_jsp</servlet-class>
     </servlet>

     <servlet-mapping>
<!-- Servlet名字,名字可以随意-->
         <servlet-name>org.apache.jsp.index_jsp</servlet-name>
<!-- Servlet访问名称,名字可以随意定-->
         <url-pattern>/index.jsp</url-pattern>
     </servlet-mapping>

b、继承GenericServlet这个类
javax.servlet.GenericServlet
重写service方法即可
public class HeeloGen extends GenericServlet{
//重写service方法
public void service(ServletRequest req,ServletResponse rep)
{
try{
PrinterWriter pw=res.getWriter();
pw.println("hello world!GenericServlet");
}catch(Exception ex)
{
es.printStackTrace();}

}
}

Reload重新加载
c、通过继承HttpServlet 引入的包是javax.servlet.http.*
需要重写doGet、doPost方法。
表单提交数据get请求和post请求
1、从安全性看get<post get提交的数据会在浏览器的地址上显示
2、从提交的内容大小看get<post get提交的数据不能大于2K,而post提交的数
据理论上是不受限制的,但实际编程中不要大于64K
3、从请求响应速度看:get>post get要求服务器立即处理请求,而post请求可
能形成一个队列请求。

例子:
package com.blue;
import javax.servlet.http.*;
import java.io.*;
public class HelloHttp extends HttpServlet{
//处理get请求
//req:用于获得客户端(浏览器)的信息
//res:用户向客户端(浏览器)返回信息
public void doGet(HttpServletRequest req,HttpServletResponse res)
{
//业务处理逻辑
try{PrintWriter pw=res.getWriter();
pw.print("hello!");}catch(Exception ex)
{
ex.printStackTrace();}
}
//处理post请求
//req:用于获得客户端(浏览器)的信息
//res:用户向客户端(浏览器)返回信息
public void doPost(HttpServletRequest req,HttpServletResponse res)
{
this.doGet(req,res);//调用doGet方法
}
}


简单的用户登网站(Servlet版本世纪)
字符编码方式设置,解决中文乱码:
res.setContentType("text/html:charset=gbk");

//接收用户客户端表单信息
String u=req.getParameter("name");
String p=req.getParameter("password");
//name password是表单控件的名字

//页面跳转
res.sendRedirect("");
//跳转到指定页面,名字写要到的servlet的那个URL地址
跳转的时候可以带参数传递用?号连接,连接多个参数用&号隔开


使用Session
1.得到session
HttpSession hs=request.getSession(true);
2.向session添加属性
hs.setAttribute(String name,Object val);
3.从session得到某个属性
String name=hs.getAttribute(String name);
4.从session删除调某个属性
hs.removeAttribute(String name);
注意事项:
1、session中属性存在的默认时间是30min,你也可
修改它存在时间:a修改web.xml(session-timeout中修改) b在程序上修改
2、上面说的这个30min指的是用户在发呆时间,而不是
累计时间。
3、当某个浏览器访问网站时,服务器会给浏览器分配一个
唯一的session id,并以此来区分不同的浏览器(客户端)
4、因为session的各个属性要占用服务器的内存,因此软件
公司都是在迫不得已的情况下,才使用。
修改session存中时间:hs.setMaxInactiveInterval(20);//20秒 为负数-1永不过期,为0清空session实例
getId()得到session的唯一ID号
建立session
建立session对象,用setAttribute方法得到。

得到session
建立session对象,用getAttribute方法得到。

res.setCharacterEncoding("gbk");//解决中文乱码

 

原创粉丝点击