关于Servlet

来源:互联网 发布:郭天祥51单片机百度云 编辑:程序博客网 时间:2024/05/01 08:30

1.   符合j2ee标准的web-app的目录结构

WEB-INF

-----classes

-----web.xml

-----lib

 

2.   servlet开发过程

httpservlet继承,重写doget / doPost方法

部署web.xml

3.  servlet声明周期

只有一个对象

第一次请求的时候被初始化,只一遍

初始化后先调用init方法,只一遍

 每个请求,调用一遍service->service->doGet/doPost。以多线程的方式运行

 尽量不要在servlet中设计成员变量。

卸载前或reload时调用destroy方法

 

4.   为什么有2init方法

因为init(ServletConfig servletConfig)方法中有this.servletConfig = servletConfig这样一句话,很多人重写该方法时容易忘写这一句话,HTTPServlet中的成员变量servletConfig为空,导致出现错误。而这个init方法中调用了init()方法,所以init()方法才是供给程序员去重写的方法。

 

5.  /的含义

form

--  form提交中action的路径可以为虚拟路径,

-- 也可以为绝对路径,/代表http://127.0.0.1/

 web.xml

---web.xmlurl-patternwebapplication根路径,/代表http://127.0.0.1/Test/

 

6.   乱码

场合1:页面本身

解决方法:servlet:response.setContentType("text/html;charset=GBK");

                    JSP:<%@ page contentType="text/html;charset=GBK"%>

 

注意:一定要写在PrintWriter out = resp.getWriter();之前

场合2:解决get方法乱码

解决方法:在server.xml中connector标签中的添加URIEncoding="GBK"

 

场合3:解决post方式提交内容的乱码

解决办法:request.setCharacterEncoding("GBK");

注意:一定要写在存取第一个参数之前   

不要调用response.setCharacterEncoding("GBK");

 

场合:<jsp:param name="user" value="<%=s%>"/>url地址包含中文参数

解决办法:<%request.setCharacterEncoding("GBK");%>

注意:一定要在调用之前

 

7. Cookiesession的区别

注意cookie有时候禁不掉

Cookie

session

存储在客户端

存储在服务器端

两种类型

l  有声明周期

l  无声明周期

两种实现方式

l  依赖于cookie

l  url重写 response.encodeURL(request.getRequestURL().toString());

父路径不能访问子路径的cookie

同一个session的窗口共享一个session

典型应用:

l  3个月不用再登陆

l  购物车(http://www.china-pub.com/

典型应用:

l  用户登陆

l  购物车也可以用session实现。·

不可靠

可靠

 

8.Servlet多线程

 

 Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。
 当客户端第一次请求某个Servlet时,Servlet容器将会根据web.xml配置文件实例化这个Servlet类。当有新客户端请求该Servlet时,一般不会再实例化该Servlet类,也就是有多个线程在使用这个实例。
 Servlet容器会自动使用线程池等技术来支持系统的运行

 

9. application (ServletContext)的概念

 

用于保存整个WebApplication的生命周期内都可以访问的数据
API中表现为ServletContext
通过HttpServletgetServletContext方法可以拿到
通过ServletContextget / setAttribute方法取得/设置相关属性