JavaWeb学习笔记——HelloWord Servlet

1.实现servlet打印日志

开发一个动态web资源,即开发一个Java程序向浏览器输出数据,需要完成以下2个步骤:

1.编写一个Java类,实现Servlet接口

开发一个动态web资源必须实现javax.servlet.Servlet接口,Servlet接口定义了Servlet引擎与Servlet程序之间通信的协议约定

以下是MyServlet.java文件中的代码(写的这个类的名字叫做MyServlet):

package org.MyServlet.MyServlet;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

//开发一个动态web资源必须实现javax.servlet.Servlet接口
//Servlet接口定义了Servlet引擎与Servlet程序之间通信的协议约定

//Q:MyServlet完成了一个动态网页程序,或者说是一个功能,如何让客户端能否准确得找到我们得这个Servlet服务
//A:服务器需要预先为我们预留出扩展接口,我们只需要按照一定的规则去提供相应的扩展功能

//Q:如何和服务器进行通讯
//A:web.xml就是服务器提供给我们的完成功能的地方
public class MyServlet implements Servlet{

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub
        
    }

    //所有客户端请求会自动调用Service方法进行处理
    //ServletRequest    是一个对象,封装所有HTTP请求信息
    //ServletResponse    是一个对象,封装所有HTTP响应信息
    //这两个对象是Tomcat服务器给我们的
    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        
        System.out.println("执行 MyServlet 的 service() 方法。。。。。");
    }

}

关于其中的Service方法的一些Tip:  

//所有客户端请求会自动调用Service方法进行处理
//ServletRequest 是一个对象,封装所有HTTP请求信息
//ServletResponse 是一个对象,封装所有HTTP响应信息
//这两个对象是Tomcat服务器给我们的

此外,如果是只实现service方法,则称为适配器模式

以下是web.xml文件中的代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>MyServlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

//定义一个Servlet服务
//Servlet服务的名字叫做aaa
<servlet>
<servlet-name>aaa</servlet-name>
<servlet-class>org.MyServlet.MyServlet.MyServlet</servlet-class>
</servlet>

//定义一个Servlet服务的映射关系
//Servlet服务的名字叫做aaa
//请求的路径是/myServlet.do

//1.服务器启动模式加载webapps下面所有的应用,加载web应用的时候会读取每个应用的web。xml文件
//2.客户单发送请求http://127.0.0.1:8080/MyServlet/myServlet.do
//3.请求就找到http://127.0.0.1:8080,找到MyServlet(Context)
//去mapping里面查找/myServlet.do,如果找到,定位到<servlet-name>aaa</servlet-name>
//4.去Servlet的定义里面查找Servlet-name是aaa的Servlet服务
//然后定位到org.MyServlet.MyServlet.MyServlet,执行该class的service方法
<servlet-mapping>
<servlet-name>aaa</servlet-name>
<url-pattern>/myServlet.do</url-pattern>
</servlet-mapping>
</web-app>

然后在浏览器中输入

http://127.0.0.1:8080/MyServlet/myServlet.do

便可以在Tomcat中看到

执行 MyServlet 的 service() 方法。。。。。

2.把开发好的Java类部署到web服务器中

 

2.实现servlet打印HelloWorld

该工程的功能是在页面上输出一段话

首先在src里面新建一个class,在interface里面添加javax.servlet.Servlet

以下是HelloServlet.java中的代码:

package org.common.Servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloServlet implements Servlet {

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public ServletConfig getServletConfig() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public String getServletInfo() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void init(ServletConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }
    
    //开发完成之后要告诉服务器我的存在,就要在web。xml里面继续写代码
    @Override
    public void service(ServletRequest arg0, ServletResponse arg1)
            throws ServletException, IOException {
        // TODO Auto-generated method stub
        //获取一个输出流,就可以对页面写出内容
        PrintWriter pw = arg1.getWriter();
        pw.println("终于成功了!");
        pw.close();
    }

}

以下是web.xml文件中的代码:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>HelloApp</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 定义Servlet服务 -->
  <servlet>
      <servlet-name>hello</servlet-name>    <!--随便取-->    
      <servlet-class>org.common.Servlet.HelloServlet</servlet-class>    <!--取包名。类名-->
  </servlet>
  
  <!-- 定义映射关系 -->
  <servlet-mapping>
      <!-- 注意:mapping里面的servlet-name在Servlet的定义里面一定要有匹配的,否则启动报错 -->
      <servlet-name>hello</servlet-name>
      <url-pattern>/hello</url-pattern>
  </servlet-mapping>
</web-app> 

访问的网址是

http://127.0.0.1:8080/Helloapp/hello

其中Helloapp是Tomcat里面的文件夹的名字,hello是url-pattern里面写的名字

 

3.实现servlet打印当前时间

该工程的功能是实现在页面中显示当前的时间

1.编写一个Java类,实现Servlet接口

以下的代码是HelloServlet.java中的代码

package helloapp2;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class HelloServlet extends GenericServlet {

@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
// TODO Auto-generated method stub

PrintWriter pw = arg1.getWriter();
pw.println("Hello");
pw.println(new Date().toLocaleString());
pw.close();
}

}

以下的代码是web.xml中的代码

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>helloapp2</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>

<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>helloapp2.HelloServlet</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/Hello</url-pattern>
</servlet-mapping>
</web-app>

2.把开发好的Java类部署到web服务器中

使用myeclipse自动部署的方法(使用myeclipse 2015自动部署有问题,待解决)(换成2014的便可以自动部署):

  1.Window->preferences->Myeclipse->Servers->Runtime Ecvironment->add->Tomcat 6.0,要选中添加local的那个选项

  2.在manage deployment的module里面选择要部署的工程

  3.重新安装Tomcat出现的问题解决,但是还是要手动部署

 

自动部署设置,参考:Eclipse中的Web项目自动部署到Tomcat

自动部署后要把网页的文件放在根目录下

 

该工程的名称是testhttp,功能是在页面中表格打印浏览过程中的相关头信息。

   新建一个工程,然后在这个工程里面新建一个servlet,这样便可以省去编写web.xml的过程

 

3.实现servlet打印header

以下是TestHttpServlet.java中的代码

package org.common.servlet;

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 TestHttpServlet extends HttpServlet {

    /**
     * Constructor of the object.
     */
    public TestHttpServlet() {
        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
     */
    
    //Servlet接口的参数service(ServletRequest arg0, ServletResponse arg1)
    
    //HttpServletRequest封装了所有的请求信息,其实就是Tomcat将请求信息按照JAVA EE的Servlet的规范
    //封装好给我们
    
    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        //设置返回类型
        //response.setContentType("text/html;charset=GBK");
        response.setContentType("text/html");
        response.setCharacterEncoding("GBK");
        
        //获取输出流
        PrintWriter out = response.getWriter();
        out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
        out.println("<HTML>");
        out.println("  <HEAD><TITLE>testhttp Servlet</TITLE></HEAD>");
        out.println("  <BODY>");
        
        out.print("<center>");
        out.print(" <h2>请求头信息列表<h2> ");
        
        out.print(" <table border=1> ");
        out.print(" <tr><th>名字</th><th>值</th></tr> ");
        //返回头消息名字集合,返回的是一个枚举
        Enumeration enums = request.getHeaderNames();
        //遍历获取所有头信息名和值
        while(enums.hasMoreElements()){
            //获取每一个头消息的名字
            String headName = (String)enums.nextElement();
            out.println(" <tr> ");
            out.println(" <td> " + headName + " </td> ");
            //getHeader(java.lang.String name) 
            //Returns the value of the specified request header as a String.
            //返回这个名字的头信息的值
            out.println(" <td> " + request.getHeaders(headName) + " </td> ");
            out.println(" </tr> ");
        }
        out.println(" </table> ");
        
        out.println(" <hr> ");
        //测试HttpServletRequest的方法
        out.println("Method: " + request.getMethod() + "<br>");
        out.println("Request URI: " + request.getRequestURI() + "<br>");
        out.println("Protocol: " + request.getProtocol() + "<br>");
        out.println("PathInfo: " + request.getPathInfo() + "<br>");
        out.println("Remote Address: " + request.getRemoteAddr() + "<br>");
        out.println("ContextPath: " + request.getContextPath() + "<br>");
        out.println("getScheme: " + request.getScheme() + "<br>");
        out.println("getServerName: " + request.getServerName() + "<br>");
        out.println("getServerPort: " + request.getServerPort() + "<br>");
        out.println("getRequestURI: " + request.getRequestURI() + "<br>");
        String path = request.getContextPath();
        //请求全路径
        String basePath
            = request.getScheme() + "://" + request.getServerName() + ":"
            + request.getServerPort() + request.getRequestURI();
        out.println(" path: " + path + "<br>");
        out.println(" basePath: " + basePath + "<br>");
        
        //out.print(this.getClass());
        //out.println(", using the GET method");
        
        out.print("</center>");
        out.println("  </BODY>");
        out.println("</HTML>");
        out.flush();
        out.close();
    }

    /**
     * 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 {
        
        //调用doGet方法
        this.doGet(request, response);
    }

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

}

然后部署并启动Tomcat服务器,在浏览器中输入

http://127.0.0.1:8080/testhttp/servlet/TestHttpServlet

 

posted @ 2015-06-29 13:57  tonglin0325  阅读(301)  评论(0编辑  收藏  举报