课外天地 李树青学习天地JavaEE网站开发课件 → [推荐]第一部分课堂讲稿——Servlet


  共有17028人关注过本帖树形打印复制链接

主题:[推荐]第一部分课堂讲稿——Servlet

帅哥哟,离线,有人找我吗?
admin
  1楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信 管理员
等级:管理员 帖子:1938 积分:26572 威望:0 精华:34 注册:2003/12/30 16:34:32
[推荐]第一部分课堂讲稿——Servlet  发帖心情 Post By:2010/9/2 10:25:09 [只看该作者]

一、第一个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编辑过]

 回到顶部
美女呀,离线,留言给我吧!
朱文洁
  2楼 博客 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:2 积分:42 威望:0 精华:0 注册:2009/12/12 20:53:39
  发帖心情 Post By:2010/9/5 14:31:12 [只看该作者]

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


 回到顶部