01-2 servlet

servlet

 1. 概念:
    Servlet是一个运行在服务端的java小程序,
    是sun公司提供的一套规范(接口), 用来处理客户端请求,
    Servlet的实质其实就是java代码, 通过java的API向客户端输出(动态)内容

 Servlet运行需要一个运行环境,即需要一个Servlet容器,这里我们使用Tomacat。

 2. Servlet (生命周期) API
    1) void init(ServletConfig config)
        何时执行: Servlet对象创建后执行
        
        config参数的3个作用
        a. 获得Servlet的名字
        b. 获得ServletContext
        c. 获得初始化参数initParm

    2) void service(ServletRequest request, ServletResponse response)
        何时执行: 每次请求都会执行
        
    3) void destroy()
        何时执行: Servlet对象销毁前执行

tomcat服务器工作流程


    面试题:
    1. 对XXServlet进行了10次访问, init destroy service各执行几次
    request对象创建了几个 response对象创建了几个?
    init 1次
    destroy 不执行
    service 10次
    request对象 10个
    response对象 10个

    2. 请简述Servlet的生命周期
     默认第一次访问时创建Servlet对象, 并执行init方法
     服务器关闭前会销毁Servlet对象, 并执行destroy方法
     每次访问都会执行service方法

 3. Servlet的配置(2.5版本,3.0版本采用注解)

    注意:所有的JavaWeb项目中web.xml都继承自服务器下的web.xml
    1. url-pattern(url路径) 的配置
        1) 完全匹配 访问的路径要和配置的路径完全相同才能访问到
        2) 目录匹配     /a/b/*        *表示任意
        3) 拓展名匹配     *.拓展名
    
    注意1: 2 3不能混用  /a/b/*.do

    注意2: 缺省路径: /
        表示匹配任意路径
        Tomcat中任意资源访问都是通过Servlet

    2. <load-on-startup>
        会让Servlet在服务器启动时就创建对象
        里面填的数字是优先级

    3. <welcome-file-list>

<welcome-file-list>用于指定应用的首页
里面可以指定多个文件,应用服务器会按从上到下的顺序搜索,如果找到就了进入该页面,如果都遍历完了还没找到就会返回404错误代码给浏览器。

    4. 开发中往往不会实现Servlet接口, 而会继承HttpServlet类
        这样不用重写很多的方法


【ServletContext】

 1. ServletContext对象
  表示一个web应用的环境(上下文)对象,
  内部封装了web应用的信息
  该对象一个web应用只有一个

  问题: 一个web应用里有几个Servlet对象?

  可以有多个Servlet对象,但是只有一个ServletContext对象

 2. 生命周期
  创建: 该web应用被加载的时候创建(服务器启动或者发布web应用时)
  销毁: web应用被卸载(服务器关闭的时候)


 3. 获取ServletContext对象
    ServletConfig.getServletContext();
    也可以在HttpServlet中直接调用getServletContext()

 4. 作用
    a. 获得全局初始化参数
    b. 获取web应用中任何资源的绝对路径(关键)
    c. 是一个域对象

    域对象的通用方法
        context.setAttribute(name, object);
        context.getAttribute(name)
        context.removeAttribute(name);

  

例题:
1. 做一个登录功能

2. 登录成功之后, 显示一个标题, 5秒后跳转

3. 跳转到的页面显示 你是第几个登录成功的用户

package com.wowowo.servlet;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

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

import com.wowowo.database.ConnectionFactory;
import com.wowowo.service.UserService;
import com.wowowo.service.impl.UserServiceImpl;

/**
 * Servlet implementation class LoginServletexe
 */
public class LoginServletexe extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private UserService us = new UserServiceImpl();
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String uname = request.getParameter("uname");
		String upwd = request.getParameter("upwd");
		try {
            //用了三层架构,异常处理事务,service层和dao层的代码不再给出,可以看看架构基础
			us.login(uname,upwd);
            //获取servlet上下文
			ServletContext context = getServletContext();
			Object value = context.getAttribute("hero");
            //如果获取的值为空,那么就是第一次登陆,把k-v放到context里面
			if(value==null){
				context.setAttribute("hero", 1);
			}else{
             //否则不是第一次登陆,把value的值+1再放入
				context.setAttribute("hero", (int)value+1);
			}
            //没有出现异常(用户名或者密码错误)就打印success,5秒后跳转
			response.getWriter().write("success,5seconds to demo4");
			response.setHeader("refresh", "5;url=/my1018/demo4");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
            //捕获到异常,即用户名密码错误
			response.getWriter().write("failed");
			response.setHeader("refresh", "1;url=/my1018/login.html");
		}
	}

}


 

猜你喜欢

转载自blog.csdn.net/qq_36194262/article/details/83247635
今日推荐