记录一下servlet内容


Serlvet就是一个遵循Java EE规范的一个类,只不过这种java类能够被浏览器访问到。因此称为servlet。

一、创建servlet的三种方法

1、实现servlet接口

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

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class FirstServlet implements Servlet {
	/**
		servlet销毁时调用该方法
	*/
	@Override
	public void destroy() {
		
	}

    /**
    	 得到ServletConfig对象  
    */
	@Override
	public ServletConfig getServletConfig() {
		return null;
	}

    /**
    	获取servlet信息比如作者  
    */
	@Override
	public String getServletInfo() {
		return null;
	}

    /** 
    	初始化方法
    */
	@Override
	public void init(ServletConfig arg1) throws ServletException {
		
	}

	/**
	 * 当浏览器访问该类时,tomcat服务器就会调用service方法
	 * 里面的参数tomcat会自动注入进入
	 * 
	 * ServletRequest 
	 * 	tomcat服务器将浏览器的对服务器的请求封装成了这个对象
	 * 	例如将请求头请求行之类的信息已经注入到这个对象里面了
	 * 
	 * ServletReponse 
	 * 	tomcat服务器将服务器的对浏览器的响应封装成了这个对象
	 * 	例如将通用的响应行响应头之类的信息已经注入到这个对象里面了
	 */
	@Override
	public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		/*
		 * 得到一个字符流,通过这个流就可以将数据写回给浏览器
		 */
		PrintWriter writer = response.getWriter();
		writer.println("<h1>abc</h1>");
	}

}

2、继承GenericServlet

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

@WebServlet("/second")
public class SecondServlet extends GenericServlet {

	@Override
	public void
	service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
		response.getWriter().write("<h1>nice</h1>");
	}

}

访问方式与流程都与上面一样

3、继承HttpServlet,这种方式也是最常用的一种方式

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/three")
public class ThreeSevlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}
	
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doGet(req, resp);
	}
	
}

二、配置servlet

我们无论使用哪一种方法创建的servlet,服务器并不能在我们配置之前得知那一个是servlet。所以我们需要配置servlet,使浏览器准确的访问到相应的服务器。

  • 配置方法
  • 一共有两种配置方法,一种是编写xml文件,另一种是添加注解。由于编写xml文件的方式有点复杂,这里只写添加注解的方法(一般也是使用这种方法)。
  • 添加注解就是在类名上面添加@WebServlet(value="/three"),需要导包import javax.servlet.annotation.WebServlet;
  • 这时启动服务器在浏览器上输入网址127.0.0.1:8989/web/three就可访问这个服务器了。
    *127.0.0.1 这个是本地的IP地址
    *8989 这个是服务器的端口号
    *web 项目名称
    *three 注解value值

三、servlet的生命周期

有创建就有销毁。
1> Servlet是一个单例,在web项目运行时,只会创建一个对象。
2> 在web项目运行时,服务器第一次访问时会先调用init()方法,这时也是唯一对象创建的时候。
如果想让servlet对象在访问之前就创建,需要进行配置。也是两种方法,一种xml方法,一种注解方法。这里只说明注解的方式。
注解方法就是在类名上面添加@WebServlet(value="/three",loadOnStartup=1),等于一个正整数,数值的大小可以决定servlet对象被创建的先后顺序,数值越小就越先被创建,如果多个Servlet数值一样,创建顺序由tomcat决定。
3> 之后访问项目,服务器就会调用service()方法不再调用init()方法。
4> 当服务器关闭时会调用destory方法(对象销毁)。

四、servlet中的常用代码

先写两个代码,代码中有说明

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/test")
public class ServletTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
  
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//两个servlet之间的数据交互
		request.setAttribute("name", "tom");
		request.getRequestDispatcher("param").forward(request, response);
		
	
		HttpSession session = request.getSession();
		session.setAttribute("age", "18");
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

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

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/param")
public class ParamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		/*
		 * 设置编码
		 */
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=utf-8");
		
		/*
		 * 获取网页属性值
		 */
		String name = request.getParameter("name");
		String age = request.getParameter("age");
		System.out.println(name+":"+age);
		
		//向网页写入数据 并展示在页面上
		PrintWriter writer = response.getWriter();
		writer.print("欢迎来到param");
		
		//服务器内部跳转
//		request.getRequestDispatcher("kk.jsp").forward(request, response);//网址不变
		
		//重定向 可以重定向到另一个servlet也可以是页面
//		response.sendRedirect("kk.jsp");
		
		//可以接受到
		Object nameValue = request.getAttribute("name");
		System.out.println(nameValue);
		
		//接收不到数据 同一个会话才可以
		HttpSession session = request.getSession();
		Object ageValue = session.getAttribute("age");
		System.out.println(ageValue);
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

如果你看不明白上边的代码,请结合一下说明进行阅读

五、获取参数

网页请求一共有八种:
GET : 获取资源
POST: 传输实体主体
PUT :传输文件
DELETE :删除文件
HEAD :获得响应报文首部
OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。也可以利用向Web服务器发送’*'的请求来测试服务器的功能性。
TRACE:回显服务器收到的请求,主要用于测试或诊断。
CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
servlet中尤其是HttpServlet中只用到GETPOST这两种。

  • Get请求

    • 浏览器中输入地址(URL)然后回车
    • 超链接 <a href="param?name=haha&age=20"></a>
    • 页面中引入的css样式文件
    • 页面中引入的js的文件(javascript)
    • <img src="image/a.jpg" />
    • form表单中method=“get”
    • ajax中可以设置异步提交请求的方式为get
    • 其他
  • Post请求

    • form表单中method=“post”

    • ajax中可以设置异步提交请求的方式为post

    • 其他

  • GET 传参 和 Post传参 区别

    Post传输数据时,数据存储请求体中

    而Get方法参数数据要跟在URL后面

  • 获取数据

    不管是GET请求或者是POST请求,接收参数的方式是一样的

    • 接收单个参数

      String value = request. getParameter("key");
      
    • 接收多个参数

      String[] value = request.getParameterValues("key");
      

      不管页面中输入的数据是何种类型,通过上述方式得到参数均为String类型,或者是String[] 类型

六、Servlet内置对象

如果想要再不同的servlet之间传递数据,那么就需要servlet的内置对象

名字类型
requestHttpServletRequest
sessionHttpSession
applicationServletContext

1、Request对象

  • 获取方式

    直接在方法参数中,可以直接使用该对象

  • 存取数据方式

    • 存放数据

      request.setAttribute("key", value);
      
    • 取数据

      request.getAttribute("key");
      
    • 删除数据

      request.removeAttribute("key");
      

2、session

  • 获取方式
HttpSession session = request.getSession();
HttpSession session = request.getSession(false);
HttpSession session = request.getSession(true);
/*

  无参数或者是参数为true表示request有对应的session则返回这个session,如果没有就创建一个新的 
   session

  如果参数为false,代表request有对应的session则返回这个session,如果没有就返回 null

*/

生命周期

  • session创建

    第一次调用该方法request.getSession()创建session对象

  • session销毁

    • session.invalidate();

    • session如果自动超时的话,也会被销毁,默认时间为30分钟

    • 超时时间可以在代码中设置

// session超时时间是指:客户端不与服务器进行交互的时间

//在代码中设置:单位是 秒
session.setMaxInactiveInterval(5);  
  • 作用范围

    • 只在一个会话之中起作用.一个会话可以包括很多个request请求,所以放在session中的数据,可以被多次请求所共享.

    • tomcat服务器正常关闭时,tomcat会把session对象序列化到本地文件中,如果是非正常关闭,则不会将session对象序列化到本地

3、application

  • 获取方式

    request.getServletContext();
    this.getServletContext();
    request.getSession().getServletContext();
    this.getServletConfig().getServletContext();
    // 注意:无论哪一种方式,拿到的都是同一个application对象
    
  • 存取数据方式

    • 删除数据,存数据,替换数据以及取数据与session一样
  • 生命周期

    • 启动t服务器的时候,就会被创建

    • 关闭服务器的时候,就会被销毁

    • 而且每个项目在运行期间,都会有且只有一个application对象

  • 作用范围(范围最广的一个)

    整个项目在运行期间,只有一个application对象,所以这个对象是所有用户共享的,大家都可以向这个对象里面存数据,也可以再拿出来.因为这个对象一个项目中只有一个。

后续:

想到啥再写。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值