Servlet技术

什么是servlet?

Servlet是一种运行于服务器端的Java应用程序,具有独立于平台和协议的特性,可以生成动态的Web页面
它担当客户请求与服务器响应的中间层 。


servlet与jsp

在JSP技术未问世以前,Servlet和Applet分别是Java在服务器段和客户端所推广的解决方案,两者相辅相成,各占优势。
Servlet是在Java代码中嵌入页面代码,JSP是在页面代码中嵌入Java代码
JSP不能执行,必须转译成Servlet并编译成class后才能执行
Servlet是学好JSP的基础,能了解JSP的底层运作方式。


HttpServlet类

httpServlet中各种接受请求处理的方法。

  1. doGet():处理http的get请求
  2. doPost():处理http的post请求,主要用于发送HTML文本中FORM的内容。
  3. doHead():用于处理HEADER请求
  4. doPut():处理http的put请求,模仿 ftp发送
  5. doDelete():处理http的delete请求
  6. doOptions():该操作自动决定支持什么HTTP方法。
  7. doTrace():处理HTTP的trace请求。

package com.mipo.servlet;

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

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * API中提供了两种不同类型的servlet类,可根据需要决定继承哪个servlet来实现。
 * 一般继承HttpServlet
 * 创建步骤:
 * 	1、创建自定义servlet类继承的父类
 * 	2、实现init()方法进行初始化设置
 * 	3、根据客户端请求方式决定用doXXX()方法
 * 	4、在destroy()中进行善后处理工作
 */
public class Login extends HttpServlet {
	private static final long serialVersionUID = 1L;

	//初始化方法
	@Override
	public void init(ServletConfig config) throws ServletException {		
		super.init(config);
		
		String initParameter = config.getInitParameter("name");
	}
	
	//构造方法
    public Login() {
        super();
    }

	/*
	  get提交方式的编码
	     修改tomcat安装目录\conf\server.xml中:
       <Connector port="80" protocol="HTTP/1.1" 
             connectionTimeout="20000" 
		     redirectPort="8443"/>
                中加入属性URIEncoding=“编码类型"后重启服务器 
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String qq = request.getParameter("qq");
		String sex = request.getParameter("sex");
		String hobby[] = request.getParameterValues("hobby");
		String country = request.getParameter("country");
		PrintWriter out = response.getWriter();
		out.println("你的QQ号是:"+qq);
		out.println("你的性别是:"+sex);
		out.println("你的爱好是:");
		for(int i=0;i<hobby.length;i++) {
			out.print(hobby[i]+"\t");
		}
		out.println("你的国籍是:"+country);
	}

	//从http得到post请求并回复
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//setCharacterEncoding(String EncodingCode)该方法用于设置接收参数的编码类型,仅适用于post提交方式
		request.setCharacterEncoding("UTF-8");
		//String getParameter(String CtlName)方法:可取得用户在表单或URL中向服务器传送的相应参数,
		//其中的CtlName代表html表单中控件的名称或在URL地址中传递的参数的名称
		String name = request.getParameter("text");
		String pwd = request.getParameter("pwd");
		//void setContentType(String TYPE)方法:设置输出流的数据类型。
		//向客户端回应一个超文本文件,其编码为charset所指定的编码。
		response.setContentType("text/html; charset=UTF-8");
		//PrintWriter getWriter()方法:获得向客户端进行文本输出的控制流
		//ServletOutputStream getOutputStream()方法: 获得向客户端输出二进制数据的控制流
		PrintWriter writer = response.getWriter();
		if(name.equals("韩非") && pwd.equals("123456")) {
			writer.println("<font color=blue>"+name+",欢迎回来"+"</font><br>");
			ServletContext sc = getServletContext();
			RequestDispatcher rd = sc.getRequestDispatcher("/personinfo.jsp");
			rd.forward(request, response);
		}else {
			writer.println("<font color=red>"+"登录失败"+"</font>");
		}
		
	}
	
    //释放资源
    @Override
	public void destroy() {
		// TODO Auto-generated method stub
		super.destroy();
	}
	

}


Servlet在Tomcat下的配置

在web.xml文件中配置<servlet>和<servlet-mapping>

 <servlet>
        <servlet-name>Servlet的名称</servlet-name>
        <servlet-class>该servlet类的路径</servlet-class>
             <init-param>
                   <param-name>参数名</param-name>
                   <param-value>参数值</param-value>
             </init-param>
        <jsp-file>/路径/XXX.JSP </jsp-file>
       <load-on-startup>表示web站台被启动时,自动加载该servlet的
                      优先级别,越小越优先加载
       </load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>对应的servlet-name名称</servlet-name>
       <url-pattern>在项目运行时用以访问的URL </url-pattern>
</servlet-mapping>

url-pattern 取值:
1、可以与具体的某个Servlet对应。
2、也可以用/* 来指定所有的页面。

配置示例

<?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>JavaServerPages详解</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>
    <description></description>
    <display-name>Login</display-name>
    <!-- Servlet的名称 -->
    <servlet-name>Login</servlet-name>
    <!-- 该Servelet类的路径 -->
    <servlet-class>com.mipo.servlet.Login</servlet-class>
    <init-param>
      <!-- 参数名 -->
      <param-name>encoding</param-name>
      <!-- 参数值 -->
      <param-value>UTF-8</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <!-- 对应的servlet-name名称 -->
	<servlet-name>Login</servlet-name>
	<!-- 在项目运行时用于访问的URL -->
	<!-- url-pattern取值:1、可以与具体的某个servlet对应	2、也可以用/*来指定所有的页面 -->
    <url-pattern>/Login</url-pattern>
  </servlet-mapping>
</web-app>




servlet的生命周期

每个servlet实例的生命周期中只有三种类型的事情,分别对应于由servlet容器所调用的三个方法:

  • init() 初始化时期

当servlet第一次被装载的时候由servlet容器调用init(),且只调用一次,默认情况下调用超类的init()方法。

  • service()运行时期

接受客户请求并决定调用何种doXXX方法,并将处理结果返回到客户端。

  • destroy()结束时期

为可选方法,释放不用的servlet实例所占内存和资源。



Servlet的生命周期可以归纳为以下几步

  • Servlet创建一个Servlet实例;
  • Servlet调用Servlet的init()方法;
  • 客户发送请求到Servlet;
  • Servlet创建一个请求对象和一个响应对象
  • Servlet调用service()方法,传递请求和响应对象作为参数;
  • service()方法获得请求对象的参数,处理请求,访问其他资源。
  • service()方法通过响应对象将结果传递给Server,最终到达客户端。
  • 对于更多的相同客户端请求, Servlet将创建新的请求和响应对象,仍然激活此Servlet的service方法,传递新的参数对象,不需在初始化一次。
  • 当Servlet不再需要Servlet时(关闭时)调用destory()方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值