以文本方式查看主题

-  课外天地 李树青  (http://www.njcie.com/bbs/index.asp)
--  JavaEE网站开发课件  (http://www.njcie.com/bbs/list.asp?boardid=20)
----  [推荐]第一部分课堂讲稿——Servlet  (http://www.njcie.com/bbs/dispbbs.asp?boardid=20&id=885)

--  作者:admin
--  发布时间:2010/9/2 10:25:09
--  [推荐]第一部分课堂讲稿——Servlet

一、第一个Servlet
1、解压空站点,运行:http://localhost:8088/myweb/
2、编写Java文件:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet
{
        public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<body bgcolor=\\"white\\">");
        out.println("<head>");
        out.println("<title>Hello!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("Hello World!");
        out.println("</body>");
        out.println("</html>");
    }
}

编译时需要<Tomcat>\\common\\lib下的包servlet-api.jar,如:
javac -classpath "C:\\Program Files\\Apache Software Foundation\\Tomcat 5.0\\common\\lib\\servlet-api.jar" HelloWorld.java

3、将class文件放入站点的WEB-INF\\classes目录

4、修改web.xml文件(区分URL的大小写):
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app  PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd">
<web-app>
        <display-name></display-name>
        <description></description>
        <servlet>
                <servlet-name>HelloWorld</servlet-name>
                <servlet-class>HelloWorld</servlet-class>
        </servlet>
        <servlet-mapping>
                <servlet-name>HelloWorld</servlet-name>
                <url-pattern>/hello</url-pattern>
        </servlet-mapping>
</web-app>

5、运行:
http://localhost:8088/myweb/hello

(可能要重启tomcat)

说明:关于jar文件的存放
server\\lib下的jar只能被tomcat访问使用
shared\\lib下的jar只能被所有web应用程序访问使用
common\\lib下的jar即可以被tomcat访问使用,也可以被所有web应用程序访问使用
应用程序的WEB-INF\\lib下的jar只能被当前应用程序访问使用

6、问题:
1)修改web.xml文件为:
<servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>

2)放入jsp-examples应用程序中运行之

二、使用Eclipse开发

三、基本使用
1、中文问题,修改doGet方法,如:
                response.setContentType("text/html;charset=GBK");
                PrintWriter out = response.getWriter();
                out.println("<html>");
                out.println("<body bgcolor=\\"white\\">");
                out.println("<head>");
                out.println("<title>你好!</title>");
                out.println("</head>");
                out.println("<body>");
                out.println("欢迎来到Servlet!");
                out.println("</body>");
                out.println("</html>");

2、Post和Get提交
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet
{
        public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><body>Post</body></html>");
    }
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html><body>Get</body></html>");
    }
}

直接通过浏览器键入:http://localhost:8088/lsq/HelloWorld
发现显示为:Get

但是通过下面的网页访问此servlet,却显示为:Post
<html>
<head>
</head>
<body>
<form method="POST" action="http://localhost:8088/lsq/HelloWorld">
  <input type="submit" value="提交" name="B1">
</form>
</body>
</html>

更为常见的组合:
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                doGet(request, response);
        }

        public void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
                out.println("<html><body>Get</body></html>");
        }

3、更加灵活的字符串输出
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet
{
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        StringBuffer buf = new StringBuffer();
        buf.append("<html><body>Get</body></html>");
        out.println( buf.toString() );
        out.close();
    }
}

4、显示时间
代码为:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Date;

public class HelloWorld extends HttpServlet
{
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        Date d=new Date();      
        StringBuffer buf = new StringBuffer();
        buf.append(d.toString());
        out.println( buf.toString() );
        out.close();
    }
}

5、参数的使用
参数分为post参数和get参数两种,都可以使用HttpServletRequest对象的getParameter()获取,此方法的参数即为servlet参数的名称,如:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class HelloWorld extends HttpServlet
{
    public void doPost(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException
    {
        String value=request.getParameter("postKey");
        response.setContentType("text/html");
        PrintWriter out=response.getWriter();
        StringBuffer buf=new StringBuffer();
        buf.append("<html><body>");
        buf.append(value);
        buf.append("</body></html>");
        out.println(buf.toString());
        out.close();
   }
  
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws IOException, ServletException
    {
        String value=request.getParameter("getKey");
        response.setContentType("text/html");
        PrintWriter out=response.getWriter();
        StringBuffer buf=new StringBuffer();
        buf.append("<html><body>");
        buf.append(value);
        buf.append("</body></html>");
        out.println(buf.toString());
        out.close();
   }
}

对于Post方式,访问网页为:
<HTML>
   <HEAD>
   </HEAD>
   <BODY>
      <FORM METHOD="POST" ACTION="http://localhost:8088/myweb/hello">
        <input type="text" name="postKey" size="20"><INPUT TYPE=submit VALUE="提交">
      </FORM>
   </BODY>
</HTML>

对于get方式,访问方式为:
http://localhost:8088/myweb/hello?getKey=5656

注意汉字参数的处理:
        String value=request.getParameter("getKey");
        value = new String(value.getBytes("ISO-8859-1"), "GB2312");
        response.setContentType("text/html;charset=GB2312");

6、使用集合遍历的方式得到所有的参数,如:
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                        throws IOException, ServletException {
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
                out.println(request.getQueryString() + "<p>");
                Enumeration enumParam = request.getParameterNames();
                while (enumParam.hasMoreElements()) {
                        String paramName = (String) enumParam.nextElement();
                        String paramValues[] = request.getParameterValues(paramName);
                        if (paramValues != null)
                                for (int i = 0; i < paramValues.length; i++)
                                        out.println(paramName + " (" + i + "): " + paramValues[i]
                                                        + "<p>");
                }
        }
}

直接运行http://localhost:8088/myweb/hello
得到结果
null

运行http://localhost:8088/myweb/hello?f=a&g=d
得到结果
f=a&g=d
g (0): d
f (0): a

运行http://localhost:8088/myweb/hello?f=a&g=d&f=g
得到结果
f=a&g=d&f=g
g (0): d
f (0): a
f (1): g

7、获取客户端信息
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
                Enumeration enums = request.getHeaderNames();
                while (enums.hasMoreElements()) {
                        String header = (String) enums.nextElement();
                        out.print(request.getHeader(header) + "<br>");
                }

[此贴子已经被作者于2010-12-12 18:12:36编辑过]

--  作者:朱文洁
--  发布时间:2010/9/5 14:31:12
--  

这样就不怕忘记课上讲什么了