zoukankan      html  css  js  c++  java
  • 2017.11.2 JavaWeb----第六章 Servlet技术

    JavaWeb ------第六章 Servlet技术

    (1)在Web应用程序开发中,一般由JSP JavaBean技术和 Servlet技术的结合实现MVC开发模式。在MVC开发模式中将Web程序的组建分为3部分:视图、控制、业务,分别由JSP、Servlet、JavaBean实现。
    (2)Servlet是用Java语言编写的服务器端程序,是由服务器调用和执行。Servlet技术可以处理客户端传来的HTTP请求,并返回一个响应。
    (3)Servlet编程接口
    @Servlet的框架是由javax.servlet(里面定义了所有的Servlet类都必须实现或拓展通用的类)和javax.servlet.http(采用HTTP协议通道的HttpServlet类)两个java包组成。
    下面是Servlet的编程接口

    功能 类和接口
    Servlet实现 javax.servlet.Servlet, javax.servlet.SingleThreadModeljavax.servlet.GenericServlet, javax.servlwt.httpHttpServlet
    Servlet配置 javax.servlet.ServletConfig
    Servlet异常 javax.servletServletExceotion, javax.servletUnavailableException
    请求和响应 javax.servletServletRequest, javax.servlet.ServletResponsejavax.servlet.ServletInputStream ,javax.servlet.ServletOutputStream
    会话跟踪 javax.servlet.http.HttpSession, javax.servlet.http.HttpSessionBindingListeener
    Servlet上下文 javax.servlet.ServletContext
    Servlet协作 javax.servlet.RequestDispactcher
    其他 javax.servlet.http.Cookie,javax.servlet.http.HttpUtils

    (4)设计Servlet
    @*#1有下列三种方法实现:

    1.实现Servlet接口
    创建Servlet类,必须直接或者间接实现javax.servlet.Servlet接口;
    
    2.继承GenericServlet
    GenericServlet是Servlet接口的直接实现类;
    
    3.继承HttpServlet
    HttpServlet类是javax.servlet.GenericServlet类的一个子类(都采用这种)
    

    *#2.Servlet基本结构

    Servlet程序的基本结构:
    package....;
    import.....;
    piblic class Servlet 类名称 extends HttpServlet{
    	public void int(){}
    	public void doGet(HttpServletRequest request,HttpServletResponse response){}
    	public void doPost(HttpServletRequest request,HttpServletResponse response){}
    	public void service(HttpServletRequest request,HttpServletResponse response){}
    	public void destroy(){}
    }
    
    说明:
    Servlet类需要继承类HttpServlet
    Servlet的父类HttpServlet中包含以下几个重要方法,常根据需要重写他们
    	init():初始化方法,Servlet对象创建后,接着执行该方法,
    	doGet():当请求类型是“get”时,调用该方法。
    	doPost():当请求类型是“post”,调用该方法。
    	service():Servlet处理请求时自动执行service()方法,该方法根据请求的类型(get或post)调用doGet()或doPost()方法。
    	destroy():Servlet对象注销时自动执行。
    

    *#3.Servlet的建立
    建立Web工程找到WebRoot/WEB-INF目录下创建的web.xml。该文件配置了启动Web工程时需要服务器设置的一些初始信息。web.xml内容如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    <?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>JavaTest</display-name>
      <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>helloworld</servlet-name>
        <servlet-class>servlets.helloworld</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>helloworld</servlet-name>
        <url-pattern>/helloworld</url-pattern>
      </servlet-mapping>
      <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>
    </web-app>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>//这里配置的是Web工程默认的额主页名称:index.jsp
      </welcome-file-list>
    </web-app>
    
    说明:对于webxml中配置的默认主页名称:index.jsp其作用是当客户端请求进入该项目工程时可以采用以下方式:http://地址:8080/工程名
    
    注意记住映射地址在引用时使用该地址.
    

    *#4.新建的Servlet的基本结构代码

    package servlets;
    
    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 helloworld extends HttpServlet {
    
    	/**
    	 * 
    	 */
    	private static final long serialVersionUID = 1L;
    	/**
    	 * Constructor of the object.
    	 */
    	public helloworld() {
    		super();
    	}
    
    	/**
    	 * Destruction of the servlet. <br>
    	 */
    	public void destroy() {
    		super.destroy(); // Just puts "destroy" string in log
    		// Put your code here
    	}
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		response.setContentType("text/html");
    		PrintWriter out = response.getWriter();
    		out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");
    		out.println("<HTML>");
    		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    		out.println("  <BODY>");
    		out.print("    This is ");
    		out.print(this.getClass());
    		out.println(", using the GET method");
    		out.println("  </BODY>");
    		out.println("</HTML>");
    		out.flush();
    		out.close();
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    
    		response.setContentType("text/html");
    		PrintWriter out = response.getWriter();
    		out.println("<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">");
    		out.println("<HTML>");
    		out.println("  <HEAD><TITLE>A Servlet</TITLE></HEAD>");
    		out.println("  <BODY>");
    		out.print("    This is ");
    		out.print(this.getClass());
    		out.println(", using the POST method");
    		out.println("  </BODY>");
    		out.println("</HTML>");
    		out.flush();
    		out.close();
    	}
    	public void init() throws ServletException {
    		// Put your code here
    	}
    }
    

    *#4.1自动修改的webxml,在其中添加了Servlet的配置信息,其内容如下:

    <?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>JavaTest</display-name>
      <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>helloworld</servlet-name>
        <servlet-class>servlets.helloworld</servlet-class>
      </servlet>
    
      <servlet-mapping>
        <servlet-name>helloworld</servlet-name>
        <url-pattern>/helloworld</url-pattern>
      </servlet-mapping>
      <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>
    </web-app>
    

    #5.编写Servlet代码---重写doGet()方法或doPost()方法
    修改代码实际上是局势重写doGet()和doPost方法。这两个方法差异是在响应请求时,根据响应方法(get/post选择)所以重写其中一个另一个直接调用以实现的方法即可。
    @
    #6.修改配置文件
    虽然自动配置了Servlwt,但仍可按需要修改(或自己建立)webxml。配置的内容包括:Servlet的访问问地址、加载的方式初始化参数其中必须配置的Servlet的访问地址。

    <servlet>
    	<servlet-name>HelloWorld</servlet-name>
    	<servlet-class>servlets.HelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>
    	<servlet-name>HelloWorld</servlet-name>
    	<url-pattern>/HelloWorld</url-pattern> //访问地址:调用servlet时使用的路径匹配名。必须记清该名称,否则会找不到
    <servlet-mapping>
    

    *#7.部署并运行Servlet
    部署到对应的文件路径下才可以运行,
    启动tomcat服务器之后在浏览器地址栏输入:http://localhost:8080/javaText/HelloWorld

    在浏览器中直接访问Servlet属于get方式,因此会执行doGet方法。
    @**(5)Servlet常用对象及其方法
    JSP有九个内置对象,其中7个内置对象都是由Servlet类或接口直接或间接创建的对象。

    JSP内置对象 Servlet类或接口
    out javax.servlet.http.HttpServletResponse 得到PrinterWriter类并创建Servlet的out对象
    request javax.servlet.http.HttpServletRequest
    response javax.servlet.http.HttpServletResponse
    session javax.servlet.http.HttpSession
    application javax.servlet.ServletContext
    config javax.servlet.ServletConfig
    exception javax.servlet.ServletException
    以下有几种常用方法:
    request对象常用方法
    1.javax.servlet.http.HttpServletRequest
    		void setCharacterEncoding():设置请求信息字符编码,常用与解决post方式下参数值汉字乱码问题
    		String getparameter(Strring paraName):获取单个参数值
    		String getParameterValues(String paraName):获取同名的参数的多个值
    		Object getAttribute(String attributeName):获取request范围内属性的值
    		void setAttribute(String attributeName,Object object):设置request范围内的属性的值
    		void removeAttribute(String attributeName):删除request范围内的属性
    response对象常用方法:
    2.javax.servlet.http.HttpServletRequest
    		PrinterWriter response.getWinter():获得out对象
    		void response.setContentType(String contentType):设置响应信息类型
    		void sengRedirect(String url):重定向
    
  • 相关阅读:
    六种常见排序算法的自我研究(冒泡排序,选择排序,快速排序,归并排序,插入排序,堆排序)
    设计模式学习总结(二)工厂模式
    SQL Server Reporting Service(SSRS) 第七篇 常见错误汇总
    SQL Server Reporting Service(SSRS) 第六篇 SSRS 部署总结
    设计模式学习总结(一)简单工厂模式
    设计模式学习总结(三)抽象工厂模式
    设计模式学习总结(四)单例模式
    SQL Server覆盖索引--有无包含列对数据库查询性能的影响分析
    Dev Express Report 学习总结(八)Dev Express Reports 常见问题总结
    docker命令笔记
  • 原文地址:https://www.cnblogs.com/qichunlin/p/7774849.html
Copyright © 2011-2022 走看看