servlet

servlet简介:

    全称:servlet Applet,简单地说,它就是一个java程序,是一个运行在web服务器上的程序。它可以对Web浏览器或其他HTTP客服端程序发出的请求进行处理。但是使Servlet能够处理以上请求的前提条件是Servlet对象要被布置在Servlet容器当中,我们这里用的Servlet容器就是我们前面用到的Tomcat服务器。可以使浏览器和服务器进行交互,实现web的动态开发。

Servlet的本质:

1.是一个普通的java类,交给tomcat服务器运行

2.访问servlet程序实质是访问web.xml中的url-pattern.

Servlet的基本结构:

package servlet_life;

import java.io.IOException;

import javax.servlet.ServletConfig;
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("/ServletLifeDemo")
public class ServletLifeDemo extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	/**
	 * 无参构造
	 */
	public ServletLifeDemo(){
		System.out.println("servlet对象被创建。。。");
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("调用了Servlet初始化方法。。。");
		
	}
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		System.out.println("调用了servlet服务方法。。。");
	}
	@Override
	public void destroy() {
		System.out.println("调用了servlet销毁方法。。。");
	}

}
service()方法一般是通过doGet(),doPost()等方式实现, 当服务器关闭时,该destroy()方法会被调用,销毁该实例

servlet的web.xml配置:

Servlet在使用之前需要进行一定的配置,来告诉服务器被请求的Servlet应该发到哪里。这其实就是一个Servlet在服务器的注册过程,这样服务器就会知道哪个Servlet请求对应哪个Servlet对象。配置过程通常分为Servlet的声明和Servlet的映射两部分。

声明:
<servlet>
  <servlet-name>servlet名称</servlet-name>
  <servlet-class>包名.类名</servler-class>
</servlet>

第二条语句中的path是用于指定你的Servlet的class文件的路径的。通常你把你的Servlet编译好的class文件放在Tomacat安装目录下的/webapp/ProjectName/WEB-INF/classes文件夹下,此时只需要写你的Servlet的class文件的名字就行了:

映射:
<servlet-mapping>
  <servlet-name>servlet名称</servlet-name>
  <url-pattern>/servlet名称</url-pattern>
<servlet-mapping>

这里是对我们上面声明的Servlet的一个映射,所以这里的servlet名称要和上面声明中的servlet名称一样才行。

url-pattern用于映射你的访问URL

你可以通过:localhost:8080/servlet名称 访问Servlet程序

Servlet的生命周期

Servlet是运行在服务器端的程序,它的运行状态由Servlet容器(简称容器)来维护。

通常,在容器收到客户对Servlet的请求时,容器会判断这个Servlet是否为第一次被访问,如果是第一次被访问,则会创建一个Servlet实例同时调用该实例的init()方法,进行初始化。

每个Servlet只会被创建一个实例,同时也只会被初始化一次。然后将这个实例一直保存在内存中,对所有的请求进行处理。默认的服务功能是调用与HTTP请求方法相应的do功能。同时,HttpServlet.service()方法会检查请求方法是否调用了适当的处理方法。

最后,当服务器关闭时,容器将会调用Servlet的destroy()方法清除Servlet实例

一个简单的servlet程序
package b_servlet;

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("/RequestDemo3")
public class RequestDemo3 extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//解决中文乱码问题
		response.setContentType("text/html;charset=utf-8");
		
		//获取refer请求头信息
		String referer = request.getHeader("referer");
		System.out.println("referer:"+referer);
		
		
		if(referer==null || !referer.contains("/adv.html")){
			//跳转到广告页面
			response.getWriter().write("当前属于非法连接,请跳转<a href='/Java_Servlet_Demo/adv.html'>首页</a>");
		}else{
			response.getWriter().write("正在下载资源...");
		}
	}

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

}

referer:防止非法链接的请求头,只有提供超链接的跳转才会有此请求头。

例如:直接向浏览器请求:http://localhost:8080/项目名称/RequestDemo3就属于非法链接,此时referer=null

请求:http://localhost:8080/项目名称/adv.html,经过广告页面的跳转下载资源



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值