JAVA及相关技术学习

Servlet

 

Cookie

Cookie包含一对Key/Value
生成一个Cookie并将它写到用户硬盘上的语法:
Cookie theCookie=new Cookie("cookieName","cookieValue");
response.addCookie(the Cookie);
如果服务器想从用户硬盘上获取Cookie,可以用
Cookie cookies[]=request.getCookies();
获取所有Cookie
然后调用Cookie的getName方法获取Cookie的Key,调用Cookie的getValue方法获取Cookie的Value
通过Cookie的setMaxAge(int expiry)方法设置Cookie的有效期。超过参数expity指定的时间(以秒为单位),Cookie就会失效。
例子:
<html>
   <head><title>jspCookie.jsp</title></head>
   <body>
      <%
         Cookie[] cookies=request.getCookies();
         //System.out.println("dsfasfdafda");
         for(int i=0;i<cookies.length;i++)
         {
       %>
    
       <p>
         <b>Cookie name:</b>
         <%=cookies[i].getName()%>
         <b>Cookie value:</b>
         <%=cookies[i].getValue()%>
         </p>
         <p>
            <b>Old max age in seconds:</b>
            <%=cookies[i].getMaxAge()%>
            <%
               cookies[i].setMaxAge(60);
            %>
            <b>New max age in seconds:</b>
            <%=cookies[i].getMaxAge()%>
       <%
         }
        
       %>
      <%!
         int count1=0;
         int count2=0;
       %>
       <%
          response.addCookie(new Cookie("cookieName"+count1++,"cookieValue"+count2++));
        %>
   </body>
</html>

posted @ 2009-03-11 14:21 乱せ英豪 阅读(357) | 评论 (0)编辑 收藏

JSP声明

JSP声明用于声明JSP代表的Servlet类的成员变量和方法。
语法<%! %>
例如:
<%! int i=0;%>
也可声明函数:
<!
   public String f(int i)
   {
    if(i<3) return "i<3";
    else return "i>=3";
   }
>
每个声明只在当前JSP页面中有效,如果希望每个JSP页面中都包含这些声明,可以把他们写成单独的页面,然后用<%@include%>指令把这个夜明加到其他页面中。
JAVA程序片段:
JSP文件中,可以在<%和%>标记间直接嵌入任何有效的JAVA语言代码。这样嵌入的程序片段称为Scriptlet。如果在page指令中没有指定method属性,则生成代码默认service方法的主体。

posted @ 2009-03-11 14:20 乱せ英豪 阅读(176) | 评论 (0)编辑 收藏

JSP学习——JSP指令

JSP指令用来设置和整个JSP网页相关属性,如网页的编码方式和脚本语言等。
语法:
<%@ 指令名 属性=“值”%>
常见的3中指令:
page:可以指定所使用的脚本语言、JSP代表的Servlet实现的接口、Servlet扩展的类以及导入的软件包。
语法:
<%@ page 属性1=“值1” 属性2=“值2”%>
例:
<%@ page import="java.util.*"  contentType="type/html;charset=GB2312" language="java"%>
page指令的属性描述:
language:指定文件中所使用的脚本语言目前仅JAVA为有效值和默认值。用作整个文件。
语法:<%@ page language="java"%>
method:指定JAVA程序片段所属的方法的名称。JAVA程序片段会成为制动方法的主体。默认的方法是service方法。当多次使用该指令时,只有第一次范围是有效的,该方法有效值

包括:service、doGet和doPost等。
语法:<%@ page method="doPost"%>
import:指定导入的JAVA软件包名或类别列表。
语法:<%@page import="java.io.*,java.util.Hashtable"%>
content_type:指定响应结果的MIME类型,默认MIME类型是text/html。默认字符编码为ISO-8859-1。
语法:<%@ page content_type="text/html;charset=GB2312"%>
session="true|false"
指定JSP页是否使用Session。默认为TRUE
语法:<%@ page session="true"%>
errorPage="error_url"指定当发生异常时,客户请求被重新定向到那个网页。
语法:
<%@page errorPage="errorpage.jsp"%>
isErrorPage="true|false":表示此JSP网页是否为处理异常的网页。
语法:<%@ page isErrorPage="true"%>
include:JSP可以通过include指令来包含其他文件。被调用的可以是JSP文件、HTML文件或文本文件。
语法:<%@inclue file="relativeURL"%>
开发网站时,如果多数JSP网页都含有相同的内容,可以把这部分相同的内容单独放到一个文件中,其他的JSP文件通过include指令将这个文件包含进来,这样做可以提高开发网站的效率,而且便于维护网页。
taglib:自定义JSP标签

posted @ 2009-03-11 14:19 乱せ英豪 阅读(157) | 评论 (0)编辑 收藏

ServletContext和Web应用的关系

Servlet容器在启动时会加载Web应用,并为每个WEB应用创建唯一的ServletContext对象。可以把ServletContext看成是一个WEB应用的服务器端组件的共享内存。在ServletContext中可以存放共享数据,它提供了4个读取或设置共享数据的方法:
setAttribute(String name,Object object):把一个对象和一个属性名绑定。将这个对象存储在ServletContext中。
getAttribute(String name):根据给定的属性名返回所绑定的对象;
removeAttribute(String name):根据给定的属性名从ServletContext中删除相应的属性。
getAttribateNames():返回一个Enumeration对象。它包含了存储在ServletContext对象中的所有属性名。
package mypack;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletContext extends HttpServlet {

 /**
  * Constructor of the object.
  */
 private static final String CONTEXT_TYPE = "text/html";
 private Object Integer;

 public ServletContext() {
  super();
 }

 /**
  * Destruction of the servlet. <br>
  */
 public void destroy() {
  super.destroy(); // Just puts "destroy" string in log
  // Put your code here
 }

 /**
  * The doGet method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to get.
  *
  * @param request
  *            the request send by the client to the server
  * @param response
  *            the response send by the server to the client
  * @throws ServletException
  *             if an error occurred
  * @throws IOException
  *             if an error occurred
  */
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  // response.setContentType("text/html");
  // PrintWriter out = response.getWriter();
  doPost(request, response);
 }

 /**
  * The doPost method of the servlet. <br>
  *
  * This method is called when a form has its tag value method equals to
  * post.
  *
  * @param request
  *            the request send by the client to the server
  * @param response
  *            the response send by the server to the client
  * @throws ServletException
  *             if an error occurred
  * @throws IOException
  *             if an error occurred
  */
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  // 获得Context的引用
  ServletContext context = (ServletContext) getServletContext();
  //response.setContentType("text/html");
  PrintWriter out = response.getWriter();
  Integer count = (Integer) context.getAttribute("count");
  if (count == null) {
               count=new Integer(0);
               context.setAttribute("count",new Integer(0));
  }
  response.setContentType(CONTEXT_TYPE);
  out.print("<html><head><title>");
  out.print(CONTEXT_TYPE+"</title></head><body>");
  out.print("<p>This count is:"+count+"</p>");
  out.print("</body>");
  count=new Integer(count.intValue()+1);
  context.setAttribute("count",count);
 }

 /**
  * Initialization of the servlet. <br>
  *
  * @throws ServletException
  *             if an error occurs
  */
 public void init(ServletConfig config) throws ServletException {
  super.init(config);
  // Put your code here
 }

}

posted @ 2009-03-11 14:16 乱せ英豪 阅读(368) | 评论 (0)编辑 收藏

创建HttpServlet的方法

创建自己的HttpServlet类,4个步骤:
(1)扩展HttpServlet抽象类。
(2)覆盖HttpServlet的部分方法,如覆盖doGet()或doPost方法。
(3)获取HTTP请求信息,例如通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串。无论是HTML表单数据还是URL上的查询字符串,在

HttpServletRequest对象中都以参数名/参数值的形式存放,可以通过一下方法检索参数信息:
getParameterNames():返回一个Enumeration对象,它包含了所有的参数名信息
getParameter(String name):返回参数名name对应的参数值
getParameterValues():返回一个Enumeration对象,它包含了所有的参数值信息HttpServletResponse对象有一个getWriter()方法。该方法返回一个PrintWriter对象。使用

PrintWriter的print()或println()方法可以向客户端发送字符串数据流。
(4)生成HTTP响应结果。通过HttpServletResponse对象可以生成响应结果。HttpServletResponse对象有一个getWriter()方法,该方法返回一个PrintWriter对象。使用

PrintWriter的print()或println()方法可以向客户端发送字符串数据流。
例:
package mypack;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class HelloServlet extends HttpServlet//第一步
{
//覆盖doGet()方法
public void doGet(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
{
    //第三步:获取HTTP请求中的参数信息
    String clientName=request.getParameter("clientName");
    if(clientNme!=null)
    clientName=new String(clientName.getBytes("ISO-8859-1"),"GB2312");
    else
    clientName="我的朋友";
    //第四步:生成HTTP响应结果
    PrintWriter out;
    String title="HelloServlet";
    String heading1="This is output from HelloServlet by doGet:";
    response.setContentType("text/html;charset=GB2312");/*MIME类型*/
    out=response.getWriter();
    out.print("<html><head><title>"+title+"<title>");
    out.print("</head><body>");
    out.print(heading1);
    out.print("<h1><p>"+clientName+":您好</h1>");
    out.print("</body></html>");
    out.close();    
}
}

部署Servlet:
在WEB-INF下的Web.xml里增加如下代码:
<web-app version="2.5"
 xmlns="http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
     <servlet-name>Hello</servlet-name>
     <servlet-class>mypack.Hello</servlet-class>
</servlet>
<servlet-mapping>
           <servlet-name>Hello</servlet-name>
           <url-pattern>/Hello</url-pattern>
</servlet-mapping>
</web>

posted @ 2009-03-08 12:16 乱せ英豪 阅读(1705) | 评论 (0)编辑 收藏

HttpServlet的功能

HttpServlet的作用是:
根据客户发出的HTTP请求,生成响应的HTTP响应结果。HttpServlet首先必须读取HTTP请求的内容。Servlet容器负责创建HttpRequest对象,并把HTTP请求信息封装到HttpRequest对

象中,这大大简化了HttpServlet解析请求数据的工作量。
如果没有HttpServletRequest,HttpServlet只能直接处理Web客户发出的原始的字符串数据,有了HttpRequest后,只要调用HttpServletRequest的相关方法,就可以方便地读取

HTTP请求中任何部分信息,HttpServletRequest中读取HTTP请求信息的常用方法如下:
getCookies()           返回HTTP请求的Cookies
getHeader(String name) 返回参数指定的HTTP请求的Header数据
getRequestURI()        返回HTTP请求URI
getQueryString()       返回HTTP请求数据中的查询字符串
getMethod()            返回HTTP请求方法。
Servlet容器向HttpServlet提供了HttpServletResponse对象,HttpServlet可以通过它来生成HTTP响应的没一个部分内容。HttpServletResponse提供的生成响应数据Header的方法

如下:
addCookie(Cookie cookie) 向HTTP响应中加入Cookie
setHeader(String name,String value) 设置HTTP响应的Header,如果参数name对应的Header已经存在,则覆盖原来的Header数据
addHeader(String name,String value) 向HTTP响应加入Header.

HttpServlet的service方法
Servlet容器调用自身的方法解析HTTP请求信息。
1:Web客户向Servlet容器发出HTTP请求;
2:Servlet容器解析Web客户的HTTP请求;
3:Servlet容器创建一个HttpRequest对象,在这个对象中封装了HTTP请求信息;
4:Servlet容器创建一个HttpResponse对象;
5:Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
6:HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
7:HttpServlet调用HttpResponse的有关方法,生成响应数据;
8:Servlet容器把HttpServlet的响应结果传给Web客户。

posted @ 2009-03-08 12:13 乱せ英豪 阅读(1504) | 评论 (0)编辑 收藏

HTTP与HttpServlet

HTTP是一种基于请求/响应模式的协议。

HTTP请求
HTTP请求有3个部分构成,分别是:
请求方法 URI  协议/版本
请求头
请求正文
例:
GET/sample.jsp HTTP/1.1

1.请求方法 URI 协议/版本
请求的第一行是“方法URI 协议/版本”:
GET/sample.jsp HTTP/1.1
以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1”代表协议和协议的版本。
根据HTTP标准,HTTP请求可以使用多种请求方法。HTTP1.1支持7中请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE。最常用的:POST和GET。
URI完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录大的相对目录即可,因此总是以“/”开头。
协议版本生命了通信的过程中使用的HTTP的版本。
2.请求头
请求头包含许多有关客户端环境和请求正文的有用信息。如:浏览器所用的语言,正文的长度等。
Accept:image/gif,image/jpeg,*/*;
3.请求正文
请求头和请求正文之间时一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息:
    userName=weiqin&password=1234


HTTP 响应
由3个部分构成:
协议  状态代码  描述
响应头
响应正文
HTTP响应例子:
HTTP/1.1 200 OK

1.协议 状态代码 描述
HTTP 响应的第一行类似于HTTP请求的第一行,它表示通信所用的协议是HTTP1.1,服务器已经成功地处理了客户端发出的请求(200 表示成功);
2.响应头
响应头和请求头一样包含许多有用的信息,例如服务器类型,日期时间、内容类型和长度等。
Server:ApacheTomcat/5.0.12
3.响应正文
响应正文就是服务器返回的HTML页面:
<html>
  <head></head>
   ...
  <body></body>
</html>

posted @ 2009-03-08 12:12 乱せ英豪 阅读(224) | 评论 (0)编辑 收藏

Servlet的生命周期

分为三个阶段:初始化阶段、响应客户请求阶段和终止阶段。
javax.servlet.Servlet接口定义了3个方法:
init()、service()、destroy().
初始化阶段:
在下列情况下Servlet容器装载Servlet:
Servlet容器启动时自动装在某些Servlet.
Servlet容器启动后,客户首次向Servlet发出请求。
Servlet的类文件被更新后,重新装载Servlet.
//Servlet容器是否在启动时自动装载Servlet,这是由在web.xml中为Servlet设置的<load-on-startup>属性决定的
Servlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期中,init方法只会被调用一次。
重载方式:
public void init(ServletConfig config) throws ServletException;
public void init()throws ServletException;
用第一个方法应该先调用super.init(config)方法确保参数config应用ServletConfig对象;
用第二个方法可以不用调用super.init()方法,如果要在init方法中访问ServletConfig对象,可以调用Servlet类的getServletConfig()方法。
响应客户请求阶段
Servlet容器创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法从ServletRequest对象获得客户请求信息并处理该请求,通过

ServletResponse对象向客户返回响应结果。
终止阶段
当Web应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet的新实例时,Servlet容器会先调用Servlet的destroy()方法。在destroy方法中,可以释放Servlet所

占用的资源。

posted @ 2009-03-08 12:12 乱せ英豪 阅读(148) | 评论 (0)编辑 收藏

SerletResponse接口:

SerletResponse接口:
getOutputStream:返回可以向客户端发送二进制数据的输出流对象ServletOutputStream
getWriter:返回可以向客户端发送字符数据的PrintWriter对象
getCharacterEncoding:返回Servlet发送的响应数据的字符编码。
getContentType:返回Servlet发送的响应数据的MIME类型。
setCharacterEncoding:设置Servlet发送的响应数据的字符编码
setContentType:设置Servlet发送的响应数据的MIME类型。

posted @ 2009-03-08 12:11 乱せ英豪 阅读(92) | 评论 (0)编辑 收藏

ServletRequest接口:

getAttribute 根据参数给定的属性名返回属性值。
getContentType:返回客户请求数据MIME类型。
getInputStream:返回以二进制数方式直接读取客户请求数据的输入流.
getParameter:根据给定的参数名返回参数值。
getRemoteAddr:返回远程客户主机的IP地址。
getRemoteHost:返回远程客户主机名。
getRemotePost:返回远程主机端口。
setAtrribute:在ServletRequest中设置属性。

posted @ 2009-03-08 12:10 乱せ英豪 阅读(109) | 评论 (0)编辑 收藏

仅列出标题
共3页: 上一页 1 2 3 下一页 

导航

统计

常用链接

留言簿(1)

随笔档案

搜索

最新评论

阅读排行榜

评论排行榜