servlet一般笔记

WCATALINA_HOME指的是tomcat的安装目录,如C:/Tomcat6.0
bin目录:控制tomcat的启动与关闭,以及与启动关闭有关的安全管理
conf目录:配置文件
lib目录:Tomcat容器使用的所有jar包和多个web应用程序共享的jar包
log目录:Tomcat生成的日志文件。日志文件是按天为单位生成
temp目录:Tomcat用来存放临时文件
webapps目录: Tomcat默认的web应用程序存放位置
work目录: Tomcat将jsp文件转换为java servlet的地方
...................................................................

执行效率高
支持多线程
功能强大
直接和服务器交互,在多个程序间共享数据
可移植性非常好
纯JAVA开发,跨平台运行
技术成熟

....................................................................

 //forward
this.getServletConfig().getServletContext()
.getRequestDispatcher("/servlet_jsp/ServletUseJsp.jsp")
.forward(req, resp);
这样转向不会丢失post信息。
...........................................................
定义

       public interface ServletConfig

       这个接口定义了一个对象,通过这个对象,
Servlet引擎配置一个Servlet并且允许Servlet获得
一个有关它的ServletContext接口的说明。
每一个ServletConfig对象对应着一个唯一的Servlet。
............................................................
 public interface ServletContext

定义了一个Servlet的环境对象,通过这个对象,
Servlet引擎向Servlet提供环境信息。

一个Servlet的环境对象必须至少与它所驻留的主机是一一对应的。
在一个处理多个虚拟主机的Servlet引擎中
(例如,使用了HTTP1.1的主机 头域),
每一个虚拟主机必须被视为一个单独的环境。
此外,Servlet引擎还可以创建对应于一组Servlet的环境对象。
..............................................................

定义

       public interface ServletRequest

       定义一个Servlet引擎产生的对象,通过这个对象,
Servlet可以获得客户端请求的数据。
这个对象通过读取请求体的数据提供包括参数的名称、
值和属性以及输入流的所有数据。
................................................................
定义

       public interface ServletResponse

       定义一个Servlet引擎产生的对象,通过这个对象,
Servlet对客户端的请求作出响应。这个响应应该是一个MIME实体,
可能是一个HTML页、图象数据或其他MIME的格式。
...................................................................

 


...................................................................
sendredirect
resp.sendRedirect(req.getContextPath() + "/servlet_jsp/ServletUseJsp.jsp");
这样转向会丢失信息。
其中:req.getContextPath()是获得"/工程名",就是工程根目录。
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
servlet声明周期
? 只有一个对象
? 第一次请求的时候被初始化,只一遍
? 初始化后先调用init方法,只一遍
? 每个请求,调用一遍service?service?doGet/doPost。
        以多线程的方式运行
? 不要在servlet中设计成员变量。
? 卸载前调用destroy方法
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

6.乱码
场合:页面本身有中文的时候
解决办法:servlet:resp.setContentType("text/html;charset=gbk");
Jsp: <%@ page contentType="text/html;charset=gb2312"%>
注意:一定要写在PrintWriter out = resp.getWriter();之前
场合:解决get方式乱码问题:
解决办法:修改server.xml ?URIEncoding="GBK"
场合:解决post方式提交内容的乱码
解决办法:request.setCharacterEncoding("GBK");
注意:一定要写在存取第一个参数之前 
不要调用response.setCharacterEncoding("GBK");
场合:<jsp:param name="user" value="<%=s%>"/>,url地址包含中文参数
解决办法:<%request.setCharacterEncoding("GBK");%>
注意:
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

ServletRequest中的方法:
public java.util.Map getParameterMap()
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
Map<String, String[]> paramMap = request.getParameterMap();
Set<Map.Entry<String, String[]>> entries = paramMap.entrySet();
 for(Iterator<Map.Entry<String, String[]>> it = entries.iterator(); it.hasNext(); ) {
   
   Map.Entry<String, String[]> entry = it.next();
   
   String paramName = entry.getKey();
   
   out.print("<TR><TD>" + paramName + "/n<TD>");
   
   String[] paramValues = entry.getValue();
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

在servlet中定义:

HttpSession session = request.getSession(true);

.....................................................................
//设置Cookie

//1:服务器可以向客户端写内容
//2:只能是文本内容
//3:客户端可以阻止服务器写入
//4:只能拿自己webapp写入的东西
//5:Cookie分为两种,
第一种:属于窗口/子窗口(放在内存中的),
第二种:属于文本(有生命周期的)
//6:一个servlet/jsp设置的cookies能够被同一个路径下面
或者子路径下面的servlet/jsp读到 (路径 = URL)(路径 != 真实文件路径)
.....................................................................

http中cookie的值设置:
public Cookie(java.lang.String name,
              java.lang.String value)
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
// Default maxAge is -1, indicating cookie applies only to current browsing session.
Cookie cookie = new Cookie("Session-Cookie-" + i, "Cookie-Value-S" + i);
   
response.addCookie(cookie);

cookie = new Cookie("Persistent-Cookie-" + i, "Cookie-Value-P" + i);
// Cookie is valid for an hour, regardless of whether user quits browser,
 reboots computer, or whatever.
cookie.setMaxAge(3600);
response.addCookie(cookie);

...................................................
servlet有2类。工程运行刚开始,就加载,还有一种是用户请求,才运行性的。
查文档。、、、、
加载先后顺序:
context-param-》 listener—》 filter-》 servlet其他根据mapping先后。

...................................................................

通过servlet得到web.xml文件中的数据,那么必须得到servlet的环境,也就是getServletContext()
然后再通过getInitParameter()才能得到参数值。
如果,通过ServletConfig然后直接通过getInitParameter是得不到的。
String username=this.getServletContext().getInitParameter("username");
String password=this.getServletConfig().getServletContext().getInitParameter("password");
上述是可以得到的,但是下面的是得不到的。

String username=this.getServletConfig().getInitParameter();是得不到配置参数的值的。

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

通过Servlet得到的另一个页面的数据,通过forward得到,
中间有其他页面也会传到。这个和jsp页面时类似的。
所以经过forward传过n个页面,也能把起始页面的信息,传到末尾页
.....................................................................
this.getServletConfig().getServletContext()
.getRequestDispatcher("/servlet/OnlyFowardServlet")
.forward(request, response);

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
在jsp页面中:
request.getRequestDispatcher("/index.jsp")
.forward(request,response);
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
 pageContext
  javax.servlet.jsp.PageContext 的实例,该对象代表该JSP 页面上下文,
使用该对象可以访问页面中的共享数据。常用的方法有getServletContext()和getServletConfig()等。
  //使用pageContext 设置属性,该属性默认在page 范围内
  pageContext. setAttribute("page" , "hello") ;
  //使用request 设置属性,该属性默认在request 范围内
  request. setAttribute ("request" , "hello");
  //使用pageContext将属性设置在request 范围中
  pageContext.setAttribute("request2" , "hello" , pageContext.REQUEST_SCOPE);
  // 使用session将属性设置在session 范围中
  session.setAttribute("session" , "hello");
  //使用pageContext将属性设置在session范围中
  pageContext.setAttribute("session2" , "hello" , pageContext.SESSION_SCOPE);
  //使用application将属性设置在application范围中
  application. setAttribute ("app" , "hello") ;
  //使用pageContext 将属性设置在application 范围中
  pageContext.setAttribute("app2" , "hello" , pageContext.APPL 工CATION_SCOPE) ;

.......................................................................................

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章