Web阶段(day10阶段,servletconfig、servletcontext、ajax)

1.ServletConfig
代表当前Servlet在web.xml中初始化配置信息的对象。
ServletConfig作用一:获取初始化参数
a. 通过init方法获取
//代表当前servlet初始化参数的对象
public class SConfigDemo1 extends HttpServlet {
//为了能够在所有的方法内部使用config对象,将其定义为一个全局变量。
ServletConfig config = null;
//重写init方法,目的是得到config对象
@Override
public void init(ServletConfig config) throws ServletException {
//通过参数位置的config对象获取初始化配置信息
String value1 = config.getInitParameter(“key1”);//对应注册servlet中包含key1
//使用局部config为全局config赋值。
this.config = config;
System.out.println(“value1:”+value1);
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String value = config.getInitParameter(“key1”);
System.out.println(“doGet:value:”+value);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
b. 直接在当前类中获取
由于在父类GenericServlet中将config对象通过getServletConfig()方法返回。所以在当前servlet中可以直接调用此方法。
public class SConfigDemo2 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//注意:ServletConfig是代表当前Servlet的对象。需要在当前Servlet中添加配置细信息。
//通过this调用父类中提供的getServletConfig方法得到Servletconfig类型的对象。
String value = this.getServletConfig().getInitParameter(“driver”);
System.out.println(“value:”+value);
String value2 = this.getServletConfig().getInitParameter(“url”);
System.out.println(“value2:”+value2);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
i. 获取servletconfig对象
this.getServletConfig();
ii. 获取参数的api
getInitParameter(String name)
ServletConfig作用二:获取ServletContext对象。
this.getServletConfig().getServletContext();

2.ServletContext
代表web应用的对象。
获取ServletContext对象的两种方法:this.getServletConfig().getServletContext();
this.getServletContext();
ServletContext功能一:获取全局配置信息
如果多个servlet都包含同一份配置信息,这样的配置信息可以提取成全局的配置信息,通过ServletContext对象来获取。
public class SContextDemo1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext sc = this.getServletConfig().getServletContext();
String name = sc.getInitParameter(“name”);
System.out.println(“name:”+name);
//通过getServletContext获取全局变量
ServletContext sc1 = this.getServletContext();
String name1 = sc1.getInitParameter(“name”);
System.out.println(“name1:”+name1);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

  web.xml中书写如下内容:
    			<!-- 代表整个web应用的配置信息 -->
    		  	<context-param>
    			  	<param-name>name</param-name>
    			  	<param-value>caoyang</param-value>
    		  	</context-param>

ServletContext功能二:作为域对象使用
如果一个对象有个可以被看见的范围,在这个范围内利用对象身上的map实现数据共享,这样的对象就称之为域对象。代表整个web应用的域对象。

	域对象的API:
		setAttribute();
		getAttribute();
		removeAttribute();
		getAttributeNmae();
	生命周期:Web应用加载,ServltContext生命周期开始。(服务器启动的时候Web应用被加载,代表Web应用对象就会产生。)Web应用被关闭或者销毁(停止Web应用,或者移除服务器,或关闭服务器),
	作用范围:整个Web应用。
	主要功能:在整个Web应用内共享数据。
		案例:在web应用内共享数据
			//代表当前web应用的域对象
			public class SContextDemo2 extends HttpServlet {
			   public void doGet(HttpServletRequest request, HttpServletResponse response)
			       throws ServletException, IOException {
			       //1.获取ServletContext
			       ServletContext sc = this.getServletContext();
			       //2.设置域属性
			       sc.setAttribute("name", "lishuai");
			   }
			   public void doPost(HttpServletRequest request, HttpServletResponse response)
			           throws ServletException, IOException {
			           doGet(request, response);
			   }
			}
			public class SContextDemo1 extends HttpServlet {
			    public void doGet(HttpServletRequest request, HttpServletResponse response)
			        throws ServletException, IOException {
			        /*ServletContext sc = this.getServletConfig().getServletContext();
			        String name = sc.getInitParameter("name");*/
			        //通过getServletContext获取全局变量
			        /*ServletContext sc1 = this.getServletContext();
			        String name1 = sc1.getInitParameter("name");
			        System.out.println("name1:"+name1);*/
			        //获取SContextDemo2中的域属性
			        //1.获取ServletContext对象
			        ServletContext sc = this.getServletContext();
			        //2.取出域属性
			        String name = (String) sc.getAttribute("name");
			        System.out.println("name:"+name);
			    }
			    public void doPost(HttpServletRequest request, HttpServletResponse response)
			        throws ServletException, IOException {
			        doGet(request, response);
			    }
			}
			在浏览器中先访问SContextDemo2设置域属性。
			再访问SContextDemo1获取域属性。
ServletContext功能三:获取资源路径名称
	i.相对路径:文件名,或者当前文件的上一级目录(不添加 / 直接书写的内容,例:conf.properties)
		直接书写文件的相对路径获取到tomcat启动目录,是错误的路径名称。
	ii.绝对路径:例:/conf.properties。(和相对路径就相差一个 /)
		直接书写文件的绝对路径获取到代码启动的盘符根目录,是错误路径。
	iii.全路径:从盘符到文件位置,整个路径全都写下来为全路径。
		C:\software\apache-tomcat-7.0.62\webapps\day11\WEB-INF\classes\conf.properties  不推荐使用,如果路径名称一旦发生修改,则需求修改路径代码。十分繁琐。
	iv. 类加载器获取路径:
		利用类加载器找到当前web应用的src目录,在获取目录中执行名称的文件即可。推荐使用这种形式,目录结构发生修改,仍可以访问到对应的路径的文件。
		SContextDemo3.class.getClassLoader().getResource("conf.properties").getPath();
	v. ServletContext获取路径:
		获取盘符到web应用的全路径名称。
		需要通过ServletContext.getRealPath("web应用内的资源路径")来加载对应目录下文件。推荐使用,目录结构发生修改,从盘符到web应用否会自适应的变化。
				ServletContext.getRealPath("web应用内的资源路径");

3.AJAX概述
asynchronous js and xml:异步的js和html
作用:实现异步请求局部刷新的效果。
通过js实现异步请求,得到xml类型的结果数据,这就是ajax的工作内容。
结果数据类型:
xml
json —>ajaj—>aj
text 文本 response.getWriter().write(“ABC”);
异步请求:不会对整个页面产生影响,只会对局部数据产生影响,这样的请求方式称之为异步请求。
同步请求和异步请求
在ajax中可以通过设置修改其为同步请求或异步请求。
同步请求特点:
在一次请求发出之后,页面必须等待服务器的响应结果,响应结果到达之前整个页面不允许操作。不允许发送下一次请求。
异步请求特点:
在一次请求发出之后,页面无需等待服务器的响应结果,仍然可以继续发送更多请求,服务器会根据每一个请求做出响应。
两种请求方式的使用场景:
a.异步请求:搜索框自动弹出用户相关搜索内容。
b.同步请求:搜索按钮
异步请求的优缺点
优点:用户体验较好。在不影响整个页面的请况下实现局部刷新效果。降低服务器访问压力。
缺点:会提升服务器的访问压力。因为用户可能会进行多次无效操作,造成服务器访问压力过载。
注:一个完整的web应用中WEB-INF目录是受保护的目录,静态资源无法直接访问。

4.AJAX实现
ajax原理:在js中设置有一个XMLHttpRequest类型,通过这个类型可以创建一个ajax对象,利用这个对象完成异步请求的操作。
js的ajax实现:
!!第一步,获取XMLHttpReqeust对象(创建ajax对象)。 xmlHttp = new XMLHttpRequest();//实现主要原理
第二步,打开连接
第三步,发送请求
第四步,注册监听(监听状态)
jQuery的ajax实现

load方法
$(selector).load(url,data,callback);
selector – 选择器, 将从服务器获取到的数据加载到指定的元素中
url – 发送请求的URL地址
data – 可选, 向服务器发送的数据 key/value数据 如:{“username” : “张飞”, “psw” : “123”}
callback – 可选, load方法完成后所执行的函数
示例:
$("#username_msg").load("<%= request.getContextPath() %>/AjaxCheckUsernameServlet", {“username”: username});
$.get方法
$.get(url, [data], [callback]);
url – 发送请求的URL地址
data – 可选, 向服务器发送的数据
callback – 可选, 请求成功后所执行的函数
示例: 123
$.get("<%= request.getContextPath() %>/AjaxCheckUsernameServlet", {“username”: username}, function(result){
$("#username_msg").html(""+result+"");
});
注意:result是服务器的响应结果数据,这个数据会直接发送到回调函数的参数列表位置。
$.ajax方法
$.ajax(url, [data], [async], [callback]);
url – 发送请求的URL地址
data – 可选, 发送至服务器的key/value数据
async – 可选, 默认为true, 表示异步交互
type – 可选, 请求方式 , 默认为"GET"。
success – 可选, 请求成功后执行的函数, 函数参数:
result – 服务器返回的数据
error — 可选,请求失败后执行的函数。function(){alert(“ajax执行失败”)}
示例:
$.ajax({
“url” : “<%= request.getContextPath() %>/AjaxCheckUsernameServlet”,
“data” : {“username”: username},
“async” : true,
“type” : “POST”,
“success” : function(result){
$("#username_msg").html(""+result+"")
}
});

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值