javaWeb之Servlet

使用jsp可以完成动态的web开发,但是在开发时发现大量的代码在页面中,这样不简洁,不利于维护!

1,什么是Servlet?

   Servlet(服务器端小程序)是使用java编写的服务器端程序,可以像jsp一样,生成动态的Web页,Servlet主要运行在服务器端,并由服务器调用执行,是一种按照Servlet标准开发的类;Servlet是Java对CGI程序的实现,但是与传统的CGI相比,Servlet是多线程的处理方式,这样Servlet的运行效率会比CGI高,Servlet还保留了Java的可移植性特点,使得Servlet更加易用,功能也更加强大;

2,Servlet的运行步骤;

  1. 客户端通过HTTP发出请求;
  2. Web服务器接收该请求并将其发送给Servlet。如果这个Servlet尚未被加载,Web服务器将把它加载到JAVA虚拟机并执行它;
  3. Servlet程序将接收该HTTP请求并执行某种处理;
  4. Servlet会将处理后的结果向Web服务器返回应答;
  5. Web服务器将从Servlet收到的应答发回给客户端;

3,第一个Servlet!

   index.jsp:

<a href="firstServlet">测试Servlet</a>

 web.xml:

  
  <servlet>
  	<servlet-name>firstServlet</servlet-name>
  	<servlet-class>com.keith.servlet.FirstServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>firstServlet</servlet-name>
  	<url-pattern>/firstServlet</url-pattern>
  </servlet-mapping>

 FirstServlet.java:

package com.keith.servlet;

import java.io.IOException;

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

public class FirstServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("------------hello,world---------------");
	}
}

 客户端发出请求,通过web.xml找到FirstServlet类,然后执行doPost()/doGet()方法,在控制台输出hello,world!

4,Servlet生命周期!

Servlet程序是运行在服务器端的一段java程序,其生命周期将受到Web容器的控制,生命周期包括加载程序,初始化,服务,销毁,卸载5部分;

其作用如下:

  • 加载Servlet

web容器负责加载Servlet,当Web容器启动时或者是在第一次使用这个Servlet时,容器会负责创建Servlet实例,但是用户必须通过部署描述符(web.xml)指定Servlet的位置(Servlet所在的包,类),成功的加载后,web容器会通过反射的方式对Servlet进行实例化;

  • 初始化

当一个Servlet被实例化后,容器将调用init()方法初始化这个对象,初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化工作,比如建立数据库连接,读取资源文件等信息,如果初始化失败,则此Servlet将直接被卸载!

  • 处理服务

当有请求提交时,Servlet将调用service()方法(常用的是doGet()/doPost())进行处理。在service()方法中,Servlet可以通过ServletRequest接受客户端的请求,也可以利用ServletResponse设置响应信息;

  • 销毁

当Web容器关闭或者检测到一个Servlet要从容器中被删除时,会自动调用destory()方法,以便让该实例释放掉所占用的资源;

  • 卸载

当一个Servlet调用完destory()方法后,此实例将等待被垃圾收集器所回收,如果需要再次使用此Servlet()时,会重新调用init()方法初始化;

 

注意:正常情况下,Servlet只会初始化一次,而处理服务会调用对次,销毁也只会调用一次。但是如果一个Servlet长时间不使用的话,也会被容器自动销毁,而如果需要再次使用时会重新进行初始化操作,即在特殊的情况下初始化可能会进行多次,销毁也可能进行多次;

5,取得初始化配置信息

在web.xml中配置servlet时,我们可以为其添加<init-param>标签,里面可以设置参数可以通过config对象获取;

例如,在web.xml中:

  <servlet>
  	<servlet-name>firstServlet</servlet-name>
  	<servlet-class>com.keith.servlet.FirstServlet</servlet-class>
  	<init-param>
		<param-name>name</param-name>
		<param-value>keith</param-value>
  	</init-param>
  </servlet>
  <servlet-mapping>
  	<servlet-name>firstServlet</servlet-name>
  	<url-pattern>/firstServlet</url-pattern>
  </servlet-mapping>

 FirstServlet.java:

package com.keith.servlet;

import java.io.IOException;

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

public class FirstServlet extends HttpServlet {
	private String initParam = null;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		this.initParam = config.getInitParameter("name");
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("初始化参数name:"+this.initParam);
	}
}

 可以得到name的值:keith;每一个Servlet可以同时配置多个初始化参数,配置参数时直接使用<init-param>元素即可;

6,获取其他内置对象

  • 获取HttpSession实例:

 

	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		HttpSession session = req.getSession();
		session.setAttribute("name", "keith");
		System.out.println("name的值是"+session.getAttribute("name"));
	}
  •  获取ServletContext实例:

 

	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		ServletContext app = super.getServletContext();
		System.out.println("真实路径是:"+app.getRealPath("/"));
	}
 

 

【博士论文复现】【阻抗建模、验证扫频法】光伏并网逆变器扫频与稳定性分析(包含锁相环电流环)(Simulink仿真实现)内容概要:本文档是一份关于“光伏并网逆变器扫频与稳定性分析”的Simulink仿真实现资源,重点复现博士论文中的阻抗建模与扫频法验证过程,涵盖锁相环和电流环等关键控制环节。通过构建详细的逆变器模型,采用小信号扰动方法进行频域扫描,获取系统输出阻抗特性,并结合奈奎斯特稳定判据分析并网系统的稳定性,帮助深入理解光伏发电系统在弱电网条件下的动态行为与失稳机理。; 适合人群:具备电力电子、自动控制理论基础,熟悉Simulink仿真环境,从事新能源发电、微电网或电力系统稳定性研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①掌握光伏并网逆变器的阻抗建模方法;②学习基于扫频法的系统稳定性分析流程;③复现高水平学术论文中的关键技术环节,支撑科研项目或学位论文工作;④为实际工程中并网逆变器的稳定性问题提供仿真分析手段。; 阅读建议:建议读者结合相关理论教材与原始论文,逐步运行并调试提供的Simulink模型,重点关注锁相环与电流控制器参数对系统阻抗特性的影响,通过改变电网强度等条件观察系统稳定性变化,深化对阻抗分析法的理解与应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值