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,经过广告页面的跳转下载资源



WebSocket是一种在客户端和服务器之间建立持久连接的协议,它允许双方进行双向通信,极大地提高了实时性,被广泛应用于即时通讯、在线游戏、股票交易等领域。本篇将详细讲解如何使用C#来实现WebSocket,以及Fleck库在其中的作用。 WebSocket协议基于HTTP的握手过程,但一旦连接建立,它就不再依赖HTTP,而是通过TCP直接通信。在C#中,我们可以利用.NET Framework或.NET Core提供的System.Net.WebSockets命名空间来创建WebSocket服务器和客户端。然而,对于更高级的功能和更好的灵活性,开发者通常会选择第三方库,如Fleck。 Fleck是C#中一个轻量级且高效的WebSocket服务器实现。它提供了丰富的事件驱动API,使得开发者可以轻松地处理WebSocket连接的建立、消息传递和断开等操作。下面我们将探讨Fleck的使用步骤: 1. **安装Fleck**:你需要在你的项目中添加Fleck库。如果你使用的是NuGet包管理器,可以通过搜索"Fleck"并安装来获取。 2. **初始化服务器**:在C#代码中,首先创建一个Fleck服务器实例,指定监听的IP地址和端口号。例如: ```csharp var server = new Fleck.WebSocketServer("ws://localhost:8080"); ``` 3. **配置服务器**:你可以设置各种配置选项,如最大接收/发送缓冲区大小、心跳间隔等。然后注册事件处理器,如OnOpen、OnClose、OnMessage等,以处理客户端连接、断开和消息接收。 4. **连接事件**:`OnOpen`事件在客户端连接时触发,你可以在这里对新连接进行初始化操作,如存储连接信息、验证用户等。 5. **消息处理**:`OnMessage`
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值