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):重定向
原文地址:https://www.cnblogs.com/qichunlin/p/7774849.html