第五章:Servlet 模型 二

Servlet应用开发接口

在这里插入图片描述

在这里插入图片描述

servlet的构造方法会创建一个空的项目,
想要完成实例化还要init()方法进行初始化
getServletConfig返回初始化的信息

.

Servlet服务器不会轻易销毁,生命周期只会初始化,实例化一次。
service()方法会执行多次。容易同此数据多次读取,线程不安全。
解决方法是多用本地数据,

在这里插入图片描述

在这里插入图片描述


Servlet的生命周期

在这里插入图片描述

实例化 - 初始化 - service - 销毁

在这里插入图片描述

servlet不太安全,数据保护性能不好,多用局部变量改变。
servlet实例化时间

在这里插入图片描述
在这里插入图片描述

servlet对int方法的调用

在这里插入图片描述
参数是服务器自动生成的

servlet销毁时间

在这里插入图片描述

第三种举例:超负荷工作。

在这里插入图片描述

servlet的生命周期

在这里插入图片描述

servlet生命周期总结

在这里插入图片描述


Servlet应用进阶

在这里插入图片描述
context是全局对象,解决了多个servlet之间的数据不同步问题

	<context-param>
		<param-name>num3</param-name>
		<param-value>num3Value</param-value>
	</context-param>
	
	<context-param>
		<param-name>num4</param-name>
		<param-value>num4Value</param-value>
	</context-param>  
  
  
 <servlet>
 
	<servlet-name>FakeName2</servlet-name>
	<servlet-class>net.lww.ServletA</servlet-class>
	
	<!-- servletConfig初始化参数,可以这样设置,也可以注解设置-->
	<init-param>
		<param-name>num1</param-name>
		<param-value>num1value</param-value>
	</init-param>
	
	<init-param>
		<param-name>num2</param-name>
		<param-value>num2value</param-value>
	</init-param>	
		
 </servlet> 
 
 <servlet-mapping>
    <servlet-name>FakeName2</servlet-name>
    <url-pattern>/myServlet</url-pattern>
 </servlet-mapping>
  


public class ServletA extends HttpServlet {
//	private ServletConfig myConfig;
	private static final long serialVersionUID = 1L;
       


    

//	@Override
//	//为了全局调用,上面私有属性config  
//	public void init(ServletConfig config) throws ServletException {
//		//第一种获取servletConfig对象参数方法
//    	this.myConfig=config;
//    	//服务器config传递给私有属性config
//	}

	public ServletA() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//第二种获得servletConfig方法
		ServletConfig myConfig=getServletConfig();
		//获取servletConfig初始化参数
		String string1=myConfig.getInitParameter("num1");
		String string2=myConfig.getInitParameter("num2");
		
		
		//获取servletContext对象
		ServletContext myContext=myConfig.getServletContext();//this.getServletContext();都可以
		//获取全局初始化参数
		String string3=myContext.getInitParameter("num3");
		String string4=myContext.getInitParameter("num4");
		//获取servletContext中的所有参数
		Enumeration<String> string5=myContext.getInitParameterNames();
		//便利枚举类型
		while(string5.hasMoreElements()) {
			//得到当前参数的参数与数值
			String string6Name=string5.nextElement(); 
			String string6Value=myContext.getInitParameter(string6Name);
			//打印
			PrintWriter writer1=response.getWriter();
			writer1.write(string6Name+"="+string6Value);
			writer1.write("</br>");		
		}
		
		
		
		
		//显示数据(num1-num4)
		PrintWriter writer=response.getWriter();
		writer.write(string1);
		writer.write("</br>");
		writer.write(string2);
		writer.write("</br>");
		writer.write(string3);
		writer.write("</br>");
		writer.write(string4);
		
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

ServletContext全局数据同步

	private int getVisitCount() {
		//先判断ServletContext中次数是否存在,不存在设置为1
		//获取ServletContext对象
		ServletContext context=this.getServletContext();
		//获取context中的参数num
		Object obj=context.getAttribute("num");
		//判断
		int num=0;
		if(null==obj) {
			num=1;
			context.setAttribute("num",num);
		}else {
			//访问次数转化为整形
			num=Integer.parseInt(obj.toString());
			++num;
			context.setAttribute("num",num);
		}
		return num;
	}
}

在这里插入图片描述

所有线程共享一份属性

在这里插入图片描述


web.xml与@WebServlet注解

在这里插入图片描述

 	注解配置Servlet,一旦注解配置就不能通过xml配置了
 	需要什么加什么,不用的删掉就好

WebServlet("/ServletC")		注解配置,参数是虚拟路径

@WebServlet(
		name="servlet3",									//别名
		urlPatterns = "/ServletC",							//虚拟路径
		loadOnStartup = 1,									//何时加载
		initParams = {										//初始化参数
				@WebInitParam(name="p1",value="p1value"),
				@WebInitParam(name="p2",value="p2value")
		}
)

在这里插入图片描述


猜你喜欢

转载自blog.csdn.net/qq_44627608/article/details/105549853