zoukankan      html  css  js  c++  java
  • 第五章节 Servlet基础

    目录

    一、Web站点的建立 

    二、创建 Servlet的三种方法

    三、Servlet常用接口与方法

    四、Servlet上手

    一、Web站点的建立 

    当客户端提交请求的时候,由tomcat容器之类的Web容载入并运行,然后将生成的动态页面返回给客户端。

    如何能让Web容器找到编写好的Servlet文件呢,这就需要建立一个Web站点,并对站点进行配置。

    Tomcat中有一个webapps文件,相当于默认站点,可以在这个文件中通过 下面的步骤来创建一个Web站点。

    1.定义站点名。

    2.创建WEB-INFO文件,这个文件用来存放Web站点的配置文件,自己编写的类和程序中用到的JAR包。

    3.创建一个web.xml文件,这个是web的本地配置文件。

    4.创建class文件,在WEB-INFO文件下创建一个classes文件夹,用来存放编写的class文件。

    二、创建 Servlet的三种方法

    Servlet是运行在tomcat之类的web容器中,需要进行配置,容器通过配置信息读取Servlet。

    • 实现 Servlet接口

    1.创建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 Hello implements Servlet{
    
    	@Override
    	public void destroy() {
    		
    	}
    
    	@Override
    	public ServletConfig getServletConfig() {
    		return null;
    	}
    
    	@Override
    	public String getServletInfo() {
    		return null;
    	}
    
    	@Override
    	public void init(ServletConfig config) throws ServletException {
    		
    	}
    
    	@Override
    	public void service(ServletRequest req, ServletResponse res)
    			throws ServletException, IOException {
    		PrintWriter pw = res.getWriter() ;
    		pw.println("hello");
    		
    	}
    
    }

    2.配置web.xml文件

    每一个编写好的Servlet都要在web.xml中进行配置。

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0"
        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_3_0.xsd">
      <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.chuiyuan.Hello</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/servlet/Hello</url-pattern>
      </servlet-mapping>
    
    </web-app>
    

    里面的servlet-name可以是任意的,后面的servlet-mapping中name和它一样就可以了。

    由于 tomcat在启动的时候 载入web.xml文件,所以web.xml文件一经修改,服务器就要重启才会有效果。

    • extends GenericServlet

    在上面的Hello的同一个包里面,编写 Hello1.class

    d

    package com.chuiyuan;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.GenericServlet;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class Hello1 extends GenericServlet{
    
    	@Override
    	public void service(ServletRequest req, ServletResponse res)
    			throws ServletException, IOException {
    		try {
    			PrintWriter out = res.getWriter();
    			out.print("Hello1");
    		} catch (Exception e) {
    			// TODO: handle exception
    		}
    	}
    
     } 
    • extends HTTPServlet

    在同一个包里面编写 Hello2.class. HttpServlet是最常用的。

    package com.chuiyuan;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Hello2  extends HttpServlet{
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		try {
    			PrintWriter out = resp.getWriter() ;
    			out.println("Hello2");
    		} catch (Exception e) {
    			// TODO: handle exception
    		}
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		doGet(req, resp);   //引用 doGet,避免代码重复
    	}
    	
    }
    
    • 在之前的文件中追加配置
      <!-- hello1 -->
      <servlet>
        <servlet-name>hello1</servlet-name>
        <servlet-class>com.chuiyuan.Hello1</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>hello1</servlet-name>
        <url-pattern>/servlet/Hello1</url-pattern>
      </servlet-mapping>
      <!-- hello2 -->
      <servlet>
        <servlet-name>hello2</servlet-name>
        <servlet-class>com.chuiyuan.Hello2</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>hello2</servlet-name>
        <url-pattern>/servlet/Hello2</url-pattern>
      </servlet-mapping>
    

    我们通过  http://localhost:8080/Hello/servlet/Hello2来访问。

    四、Servlet上手

    在实际项目中,都是让用户提交一个操作,然后服务器得到这个提交的信息,返回一些数据给用户。下面是一个登陆的例子。

    有两个Servlet,用到了Servlet的通信 。

    如下

    package com.chuiyuan;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class Index extends HttpServlet{
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		try {
    			resp.setContentType("text/html;charset=gbk");
    			PrintWriter out = resp.getWriter() ;
    			out.println("<html>");
    			out.println("<body>");
    			out.println("<h1>用户登陆</h1>");
    			//提交到了Login处理
    			out.println("<form action=Login method= post>");
    			out.println("<table>");
    			out.println("<tr><td>用户名:<input type =text name=username></td></tr>");
    			out.println("<tr><td>密码:<input type =password name=password></td></tr>");
    			out.println("<tr><td>密码:<input type ='submit' value='提交'></td></tr>");
    			out.println("</form>");
    			out.println("</body>");
    			out.println("</html>");
    			out.println("");
    		} catch (Exception e) {
    			// TODO: handle exception
    		}
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		
    	}
    
    }
    

    提交后,由Login进行处理

    package com.chuiyuan;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class Login  extends HttpServlet{
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		String name = req.getParameter("username") ;
    		String pwd = req.getParameter("password") ;
    		try {
    			resp.setContentType("text/html;charset=gbk");
    			PrintWriter out = resp.getWriter() ;
    			out.println("用户名是:"+name+"<br>");
    			out.println("密码是:"+pwd+"<br>");
    		} catch (Exception e) {
    			// TODO: handle exception
    		}
    	}
    
    	@Override
    	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		doGet(req, resp);
    	}
    
    }
    

    配置文件一定要有。如下

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="3.0"
        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_3_0.xsd">
     <!-- index -->
      <servlet>
        <servlet-name>index</servlet-name>
        <servlet-class>com.chuiyuan.Index</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>index</servlet-name>
        <url-pattern>/servlet/Index</url-pattern>
      </servlet-mapping>
      
      <!-- login -->
      <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.chuiyuan.Login</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/servlet/Login</url-pattern>
      </servlet-mapping>
    
    
    </web-app>
    

    在浏览器中输入

    http://localhost:8080/Chapter5/servlet/Index 

      

  • 相关阅读:
    利用 Makefile 写的小程序
    linux内核学习之进程管理------task_struct结构体
    智能指针
    explicit 关键字
    ant脚本编写
    FROM_UNIXTIME 格式化MYSQL时间戳函数
    Dubbo架构设计详解-转
    Dubbo与Zookeeper、SpringMVC整合和使用(负载均衡、容错)转
    SiteMesh详解
    sitemesh使用步骤
  • 原文地址:https://www.cnblogs.com/chuiyuan/p/4553733.html
Copyright © 2011-2022 走看看