• JSP/Servlet笔记


    一、Servlet简介

           Servlet程序可以运行于任何服务器,如web、email、FTP等,所有servlet程序必须实现javax.servlet接口。GenericServlet是实现了javax.servlet接口的抽象类,其定义了servlet生命周期、初始化参数等方法,具有和应用层协议无关的特性,GenericServlet是所有servlet程序的父类,而我们只要求其运行在HTTP服务器上,可以通过继承GenericServlet子类HttpServlet就可以实现。

    1、Web Application

         Web Application包含WEB-INF和META-INF两部分,可以直接放在Tomcat的webapp下运行,也可以通过配置文件指定到其他目录。特别的:WEB-INF文件夹下的网页用户无法访问。

    //Wen Application目录结构
    WEB-INF
    	web.xml		web app的配置文件
    	lib		web app的库文件
    	classes		存放编译好的servlet
    META-INF   存放web app的上下文信息,符合J2EE标准
    
    //server.xml配置内容
    <Context docBase="目录位置" path="虚拟路径" reloadable="true" debug="0"/>

    2、开发环境搭建

    (1)配置jar包和web.xml

          Dynamic Web project项目建立成功后, 第一步需要添加jar包,servlet程序依赖的servlet-api.jar包位于Tomcat的lib目录,需复制该jar包到项目的lib目录下,并【add to bulid path】加入到运行环境中。第二步需在新建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" version="2.5">
       <!-- 欢迎页 -->
      <welcome-file-list>
           <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    (2)编写代码

    import java.io.*;
    import javax.servlet.http.*;
    
    public class FirstServlet extends HttpServlet {
    	// doGet方式参数在传递过程中,在URL地址中显示出来
    	@Override
    	protected void doGet(HttpServletRequest request, HttpServletResponse response)  {
    		//设置文档类型,使Html标签不被作为纯文本输出
    		response.setContentType("text/html;charset=UTF-8");
    		String name = request.getParameter("name");
    		PrintWriter pw = null;
    		try {
    			pw = response.getWriter();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		pw.println(name+":HelloWord!");
    	}
    
    	// doPost方式参数在传递过程中,在URL地址中隐藏了
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) {
    		// 不用重复代码,可以直接调用doGet方法
    		doGet(request, response);
    	}
    }

    (3)URL拦截配置

    <servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>FirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/FirstServlet</url-pattern>
    </servlet-mapping>

    (4)运行结果

              image

    3、Servlet生命周期

         servlet对象只在初次访问时进行一次实例化和初始化,再次访问不会再new处对象,等到程序结束时,调用destroy方法终止程序。在非分布的情况下,通常一个servlet在服务器中只有一个实例。

    public class FirstServlet extends HttpServlet {
            // ① 加载:  ClassLoader
    	// ② 实例化,调用构造方法实例化对象,只执行一次
    	public FirstServlet(){
    		System.out.println("constructor");
    	}
    	// ③ 初始化,只在对象第一次初始化时执行一次
    	@Override
    	public void init(ServletConfig config) throws ServletException {
    		System.out.println("init");
    	}
    	// ④ 处理请求,容器自动调用service方法,执行doGet或doPost
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    		System.out.println("doGet");
    	}
    	// ⑤ 退出服务,destroy只在程序停止时调用
    	@Override
    	public void destroy() {
    		System.out.println("destroy");
    	}
    }

    二、请求与响应

    1、请求处理方法

    //分别对应HTTP协议的7中请求
    doGet		响应Get请求
    doPost		响应POST请求
    doPut		用于http1.1协议
    doDelete	用于http1.1协议
    doHead 		仅响应Get请求的头部,可用于比较页面是否已经被获取过,避免二次获取
    doOptions	用于http1.1协议
    doTrace		用于http1.1协议

    2、request请求

    (1)读取单个参数

    String name = request.getParameter("name");
    

    (2)读取全部参数

    //① 获取表单中所有的具有name属性.返回一个Enumeration类型的枚举
    Enumeration paramNames = request.getParameterNames();
    
    while (paramNames.hasMoreElements()) {
    
    	//② 获取控件 name
    	String paramName = (String) paramNames.nextElement();
    
    	//③ 根据name获取value值
    	String[] paramValues = request.getParameterValues(paramName);
    	// 当value只有一个值时
    	if (paramValues.length == 1) {
    		String paramValue = paramValues[0];
    
    		if (paramValue.length() == 0) {
    			System.out.print("值为null");
    		} else {
    			System.out.print(paramValues);
    		}
    	// 当value有多个值时
    	} else {
    		for (int i = 0; i < paramValues.length; i++) {
    			System.out.print(paramValues[i]);
    		}
    	}
            System.out.println();
     }

    3、response响应

    // 设置文档类型
    response.setContentType("text/html;charset=utf-8");
    PrintWriter pw = response.getWriter();
    
    pw.println("<!DOCTYPE html>");
    pw.println("<html>");
    pw.println("<head>");
    pw.println("<title>生成动态网页</title>");
    pw.println("</head>");
    pw.println("<body>");
    pw.println("</body>");
    pw.println("</html>");

    四、会话控制

    1、Cookie

    2、Session

  • 相关阅读:
    职业生涯步步高:一位资深经理人的职业生涯感悟
    HDU2082解题报告
    How the brain recognizes objects
    学习"图"(最短路径)算法
    HDOJ1022解题报告
    【转】受用的十条经验哈
    Archive for the 'TED' Category TED视频:Tan Le 能读懂脑电波的耳机
    WiFi 802.11ac驱动无线家庭高清影院
    asp.net后台编写 loading效果
    c#字符串分割
  • 原文地址:https://www.cnblogs.com/sh086/p/8455109.html
Copyright © 2020-2023  润新知