您的位置:首页 > Web前端 > JavaScript

Servlet&JSP 笔记

2009-05-24 14:13 495 查看
get: an Http Get 是为了获得,不是为了改变任何事情在服务器上。Get被定义为 idempotent。它能够被多次执行。

POST 不是 idempotent。 数据在提交时,在事务中post不能被取消(因为涉及到数据库)。

------

Get 是默认方法 如果不在form中写任何东西的话<form action="*.do">

更多PSOT&GET说明在书P122

------

如果要从单个参数中获得多个值,则用 getParameterValues()

=-=-=-=-=-=

大多数时候,使用Response只是用来为客户端发送数据;可使用两种方法:setContentType()&getWriter();然后,可简单的使用I/O来写HTML to the stream;但也可以用response来设定其它的头(headers),发送错误和添加cookies.

println() to a PrintWriter

write() to an ServletOutputStream

ServletOutputStream response.getOutputStream()

PrintWriter response.getWriter()

设头 response.setHeader("foo","bar");

response.addHeader("foo","bar");

response.setIntHeader("foo",42);

重定位 P136

在commit之后,再向回调(call)sendRedirect()是不能写到response里的

redirect和dispatch的区别

redirect = client

dispatch = server

获得web.xml中的初始参数时:

对servlet来说:web.xml中用<init-param>

在程序中用getServletConfig().getInitParameterNames()得到。

对Jsp来说:web.xml中用<context-param>

在程序中用getServletContext().getInitParameter("**")得到。

有两种方法得到ServletContext:

getServletConfig.getServletContext.getInitParameter()

this.getServletContext.getInitParameter()

----- listen 的整个过程 P175 -------

package com.example;

import javax.servlet.ServletContext;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

public class MyServletContextListener implements ServletContextListener {

public void contextInitialized(ServletContextEvent event){

ServletContext sc = event.getServletContext();

String dogBreed = sc.getInitParameter("breed");

Dog d = new Dog(dogBreed);

sc.setAttribute("dog", d);

}

public void contextDestroyed(ServletContextEvent event){

}

}

*******************

package com.example;

import java.io.*;

import javax.servlet.ServletException;

import javax.servlet.http.*;

public class ListenerTester extends HttpServlet{

public void doGet(HttpServletRequest request,HttpServletResponse response)

throws IOException,ServletException{

response.setContentType("text/html");

PrintWriter out = response.getWriter();

out.println("test Context attributes set by listener<br>");

out.println("<br>");

Dog dog = (Dog)getServletContext().getAttribute("dog");

out.println("Dog's breed is: " + dog.getBreed());

}

}

*******************

package com.example;

public class Dog {

private String breed;

public Dog(String breed){

this.breed = breed;

}

public String getBreed(){

return breed;

}

}

********************

<listener>

<listener-class>

com.example.MyServletContextListener

</listener-class>

</listener>

<servlet>

<servlet-name>ListenerTester</servlet-name>

<servlet-class>com.example.ListenerTester</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>ListenerTester</servlet-name>

<url-pattern>/ListenTest.do</url-pattern>

</servlet-mapping>

<!--为Dog传构造参数初始化-->

<context-param>

<param-name>breed</param-name>

<param-value>Great Dane</param-value>

</context-param>

--------以上是代码部分,以下是大意-----------

----- listen 的整个过程 P175 -------

1.容器读DD(Deployment Descriptor)

2.容器创建一个新的ServletContext

3.容器创建一个Name/Value字符串为上下文的参数初始化

4.容器为ServletContext提到的Name/value赋值

5.容器创建一个MyServletContextListener实例

6.容器通过一个新的ServletContextEvent来调用listener's contextInitialized()方法,event提到ServletContext,然后得到上下文的初始参数。

7.Listener 通过ServletContextEvent得到ServletContext。即event.getServletContext().

8.listener 通过ServletContext得到context的初始化参数

9.Listener 利用初始化参数来构造一个新的Dog类

10.Listener在ServletContext中来设置Dog作为属性。

代码:ServletContext sc = event.getServletContext();

String dogBreed = sc.getInitParameter("breed");

Dog d = new Dog(dogBreed);

sc.setAttribute("dog", d);

11.容器创建一个新的Servlet(比如:创建一个带初始化参数的新的ServletConfig,ServletConfig提及ServletContext,然后call Servlet's init()方法)

12.Servlet 得到一个请求,然后问ServletContext的属性“dog"

13.Servlet call getBreed() on the Dog (and prints that to the HttpResponse)

----- ----- -------

Listener interface: javax.servlet.http.HttpSessionAttributeListener 对应的Event type是 HttpSessionBindingEvent 而不是 HttpSessionAttributeEvent

Listener interface: javax.servlet.http.HttpSessionActivationListener 对应的Event type是 HttpSessionEvent 而不是 HttpSessionActivationEvent

attributes 返回的是一个类

RequestDispatcher view = request.getRequestDispatcher("result.jsp");

如果result.jsp前没有"/",则表明是相对路径,容器会在相同的逻辑定位请求中去找result.jsp

Context,HttpSession,Request在accessibility,生存周期和好处的区别。

只有Request的线程是安全的。

RequestDispatcher包含有两种方法:forward, include

客户端发送请求,容器产生一个唯一的session ID 然后将它和response返回给客户端.客户端发送回 session ID 和每个一个子请求。容器看到ID,发现匹配的session,然后联系session处理请求。

客户端和容器通过cookies来交换Session ID

HttpSession session = request.getSession();

request.getSession()不只是创建session,在它第一次在request唤醒时,它会产生一个cookie发送给response.

request.getSession()还是可得到一个经匹配的session ID cookie.

流程:如果request包含一个session ID cookie,那么去发现和它匹配的ID;如果没有session ID cookie 或者 现在没有可以匹配的session, 那么将创建一个新的session.

设置seesion过期时间:

方法1:

<session-config>

<session-timeout>15<session-timeout> //设置15分钟

</session-config>

方法2:session.getMaxInactiveInterval(20*60) //设置20分钟

在客户端设置cookie的生存时间

cookie.setMaxAge(20*60);

给客户端发送cookie

response.addCookie(cookie);

从客户端request得到cookie

Cookie[] cookies = request.getCookies();

for(int i=0;i<cookies.length;i++){

Cookie cookie = cookies[i];

if(cookie.getName().equals("username")){

Stirng userName = cookie.getValue();

out.println("Hello" + userName);

break;

}

}

URL 重写是截取传入 Web 请求并自动将请求重定向到其他 URL 的过程。比如浏览器发来请求 hostname/101.aspx ,服务器自动将这个请求中定向为http://hostname/list.aspx ?id=101。

url重写的优点在于:

l 缩短url,隐藏实际路径提高安全性

2 易于用户记忆和键入。

3 易于被搜索引擎收录

========== JSP =================

<%= %> 表达式中没有";"

Servlet:

Application: getServletContext().setAttribute();

Request: request.setAttribute();

Session: request.getSession().setAttribute();

Page: Does not apply!

JSP:

Application: application.setAttribute();

Request: request.setAttribute();

Session: session.setAttribute();

Page: pageContext.setAttribute();

EL表达式:

${applicationScope.mail}

等价于: <%= application.getAttribute("mail")%>

<%! int y=3; %> 相当于声明全局变量吧 int y=3;

PS: try jar download code

========= 记单词 ============

scenarios 脚本

picky 好挑剔的 吹毛求疵 picky professor

asymptotically 渐近 渐近地

subtly 隐隐约约地

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

P125

P129

P165

p182

P200 P222

P233

P235

P245 5.20

P315 5.22

P339 5.23

P
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: