servletconfig和servletContext的区别
1、servletConfig:
在Servlet的配置文件中,可以使用一个或多个<init-param>标签为servlet配置一些初始化参数。(配置在某个servlet标签或者整个web-app下)
这里要补充一点Servlet的配置信息不止可以配置文件中,还可以通过注解的方式进行配置,如下面代码所示
@WebServlet(name = "/ServletForInitParamsDemo01",urlPatterns={"/ServletForInitParamsDemo01","/ServletForInitParamsDemo02"},
initParams={@WebInitParam(name="admin",value="kitty"),
@WebInitParam(name="email",value="admin@example.com")}
)
public class ServletForInitParamsDemo01 extends HttpServlet {
private static final long serialVersionUID = 1L;
private transient ServletConfig config; public void init(ServletConfig config) throws ServletException {
this.config = config;
} protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ServletContext sc = config.getServletContext();
String admin = config.getInitParameter("admin");
String email = config.getInitParameter("email");
sc.setAttribute("admin", admin);
sc.setAttribute("email", email);
PersonInfo personInfo = new PersonInfo();
personInfo.setName("Tom");
personInfo.setAge(22);
personInfo.setSex("男");
personInfo.setHobby("play basketball");
sc.setAttribute("personInfo", personInfo);
response.setContentType("text/html;charset=UTF-8");
PrintWriter pw = response.getWriter();
pw.write("<html><head></head><body>"
+ "<br/>"
+ "admin:"+admin+"<br/>"
+ "email:"+email
+ "</body></html>");
pw.close(); }
当servlet配置了初始化参数后,web容器在创建servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,并在 调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员通过ServletConfig对象就可以得 到当前servlet的初始化参数信息;
在开发中主要有三个作用
- 1)、获取字符集编码:string charset = config.getInitParameter("charset");
- 2)、获取配置文件中的数据库连接信息:String url = config.getInitParameter("url");
String username= config.getInitParameter("username");
String password = config.getInitParameter("password"); - 3)、获取配置文件:String configFile = config.getInitParameter("config");
2、servletContext:
WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用。
1)ServletContext对象应用1:多个web组件之间使用它实现数据共享
ServletConfig对象中维护了ServletContext对象的引用,开发人员在编写servlet时,可以通过 ServletConfig.getServletContext方法获得ServletContext对象。由于一个WEB应用中的所有Servlet 共享同一个ServletContext对象,因此Servlet对象之间可以通过ServletContext对象来实现通讯。 ServletContext对象通常也被称之为context域对象。
在serlvet中,可以使用如下语句来设置数据共享
ServletContext context = this.getServletContext(); //servletContext域对象
context.setAttribute("data",
"共享数据"); //向域中存了一个data属性
在另一个servlet中,可以使用如下语句来获取域中的data属性
ServletContext context =
this.getServletContext();
String value = (String)
context.getAttribute("data"); //获取域中的data属性
System.out.println(value);
2)通过servletContext对象获取到整个web应用的配置信息
String url =
this.getServletContext().getInitParameter("url");
String username =
this.getServletContext().getInitParameter("username");
String password =
this.getServletContext().getInitParameter("password");
public class SimpleServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private ServletConfig config; public SimpleServlet() {
System.out.println("SimpleServlet...");
} public void init(ServletConfig config) throws ServletException {
this.config = config;
System.out.println("SimpleServlet的init方法....");
} public void service(HttpServletRequest request, HttpServletResponse response){
String name = config.getInitParameter("name");
System.out.println(name); ServletContext context = config.getServletContext();
String name1 = context.getInitParameter("name");
System.out.println(name1);
} protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.write("<html>"
+ "<head></head>"
+ "<body>"
+ "SimpleServlet"
+ "</body>"
+ "</html>");
} protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { } }
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<context-param>
<param-name>name</param-name>
<param-value>Bob</param-value>
</context-param>
<servlet>
<servlet-name>SimpleServlet</servlet-name>
<servlet-class>com.servlet.demo01.SimpleServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>Tirry</param-value>
</init-param>
<load-on-startup>30</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SimpleServlet</servlet-name>
<url-pattern>/SimpleServlet</url-pattern>
</servlet-mapping> <servlet>
<servlet-name>WelcomeServlet</servlet-name>
<servlet-class>com.servlet.demo01.WelcomeServlet</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>Marry</param-value>
</init-param>
<load-on-startup>20</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>WelcomeServlet</servlet-name>
<url-pattern>/WelcomeServlet</url-pattern>
</servlet-mapping>
</web-app>
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAABjkAAAEDCAIAAADoWfHuAAAgAElEQVR4nO3dTa8lyV3n8XwlSCwssUFiMUgox2+AF+CVFyBGxHJ2yOMVYhasLE2M1LZlhCVGqGQbGgybYNEYAw3dY7ef2m0bu8M2dj+43E/VVXXrtksaTMwiMyPj4R+RkefkOTfPvd+PSnbVuZkZkZF5Tlf+6h9xup/+7IPhl/n7rzkAAAAAAABgO0+fPn399dfv37//3nvvvR94+PDh8L/eo0ePHj9+3JFVAQAAAAAA4ETIqgAAAAAAALAXZFW4TYzr1E33IaM613Wu65yJX7daeBFWH3URj9xdOBrXaCOlNwIAAAAAxPaTVVnXZ48xw4Ni17mud/aAQ0q7y8eUWnfOGTVu3OtaQ/4ZbLGf4pbtpyk3VOj8XXTOrMq6vn3MpY0vNweZ79jOKX8CqwakfvCNsqr5/dIdeMwzXaMjhy7f3QQnvnjuG124JudsCwAAAMCl2jyrsk4VYh3dl5+djOt6Z5PHGOt6Ne9bT4vEngi7m/nJc36mFVs/qNH2XRa6tGp3qfNNrOuDzEvdgmfIi8qqLpTVhVB1l1nVZYz55lnVoPHtQFYFAAAAYF9KWdXV1dX19fXV1dX6rEoXHkS0ln8f7lt6jDHqqMdXv7tRc5Y0ZGdRNBb+0RxSzKX7oMxkKssSz8hvWelSy+5y5yVhLYxQnGWctlEdilgElPxIdU7rNH/0xWjDL10eRKE54zo1x5p+31LHVJJ+GtepuQN+d7Hzy72SynOG3aPgNRjJ4gBmF0iYD7Xy3Bs7337hGkdJzKpWDEjhNKP7szzyLZ2vZVWF1sWbtv0atd9g4ZbD7qvupfzcS7v73tbPvbR7622z9qYlqwIAAACwTMyqHj9+fH19/eu//uthXLWYVU0z0YRHJudc/FAkFx+VH2PSaGYlv7v/jepcr50Kk5S4datdr4VnMJmRz0sIm7ItK11q2V3s/AIjnI5S43HEsrgwngh/r4KejLlAkPGFMVxdVOM2TSsTM5Gkaia9K4Ld53wzfGJfiiCFYxZar495WhwkbpzHo3nnK8ds6Py6C9c8SsP7YtVNKF7i6BpVqwuT6y50Xto9TEzCMkah9dJN23KNVt5gwhA130vCuVd2z7Mq8QYTpxBKZ1Qa+RU3LVkVAAAAgGV5VjUEVb/yK7/ym7/5mx/96Ed9XNVYVzXlIHnl1MF1VVsVVbkpGPKP9PWsao6ommus2rvqt6x1qb2hlVlVEnhZPT/0+qzKBt1IskL/kCzXrTRnVVExS/7YH5yUvGV+UYLd/UNyWlBWuZSFCy207uQxl7csbCzkIFnna8ds6Hz7hVsxSsHBo8SqcUCk0wxvlcVzzztf2r1UV5VuuSqrOuYGmwYtzUOb76V1UZdUV5Weu7R76Yxax3PtGwEAAAAAIklWNQRVv/qrv/rbv/3bH//4xz/xiU/88R//8RBXtWVVPvUQsqqD6qp0f1RQlew+PEGNYVC+PFZWV+W1LnzTPnNw2rLWpfaGDqqr8hfLxrP/xmvUzwdckVW1rzRv4pKfSlZV2rItq2ov7yoeM2/dSWNe2lLcOH9xKUZZqKs6LqtaMUpJo5XqnqVLvJBVFc59+6yqctM2XKMDhm5419eWpW8+d3n3rLelzou7l87ogOyPuioAAAAA6yVZ1fX19Uc+8pGPfexjn/3sZ//6r//67/7u77785S8bY66vr9uyKh9Rjb+x04NfvI5VY11VKaiqLOQUdSbfPS6gqD1EBX8sLiYtdSx8xqv0c96y3KWm3cXOL/SyXLq1fg5gXp5Tem5PTic5Th5k+NGQt7SuF+cAik/OlXXQsotemUan4iKRpAiusuXBWVXlmGs7X79wK0apcHzXOCD10xymElfPXS4Ky3YvnqbUejFsaswT1+cvSYjTeC+VQnO5HrMxq8p3L5xR+3iueyMAAAAAQESsq8q11VXNU8mmNMqa6TnZRFlPmlWZtKjH5PNQsgl69RWsSrvPr/tnbKn15Ai1poLdF9arKmwpdKl990Lna9ZnVb4zSScX6qrix9R0MftgSx0/9osNpVu6KZhYml/m4ksZjnzeJeGYpdalCydsmazjNjQnvrhU8pO03tj59gvXOErJMuTy3LHKgBRO09ddGrNw7mLn67sv3iHClmuuUWnosiGOjrl66MpZVbp78rFQPXexdfGMDqhTW3gjAAAAAICg9D2ADx8+HP63+XsA00ofMz/5pDN02pZkqjmokAEjU475yllV67Hj0rDG5beC/Y+a8gkc4NibFgAAAACwpe2yqrMZCih4mNyn6LH/gEiRrApnd+xNCwAAAADY0gVmVdi1eKbP6kiRrArnd+RNCwAAAADYElkVAAAAAAAA9oKsCgAAAAAAAHtBVgUAAAAAAIC9IKsqGL6vcOdLLKtdfvv7RQyd4LYslWX1LTkRAAAAAMCddFFZ1RCCDL+Uz0Ks649JRgq7bx64yJ3f4Lhtp988SipYZPqwyONsWZVRm66EfVxWNXw9ZXeeJbqrV1P3c9PDELXcdfP92bt6x8Ut2xsCAAAAAKBq06zKqPn5WWvnnLPBU+/wyvxMu/RInLC6sMtpsqptFTu/waG3z6ouJWpQvTPa9Xqjw21SV3We4qzK1TTBnRZ2xlTvQDPHiwtlWdb10091Pw1+e0MAAAAAACzYOqvqdVSYMzzKhoUYWo/PscZEOy5W4ohxT1rMMm0Q9sEfVnVO+56opt3nLhnXqXl7sW6lUkpTyqrCYqt6P8NERoUNZbFFfszSaYqErGrNubcPnXjuru1mGA7ba+es6+NoJm9IvBmi19W8uz+pxX6WepUEPeLlGK6vf7OElz6paMs7X7+aRqUlh8OJDO/NYq+Dnw7Hb8krjZr62dwQAAAAAABLtsuqrHFaOzM9N4d1VdHTde9skrY0xxPDcdIn4WrFUFgkooJ950SmtHvyupknN82P6EEJyeIjutD5QjWK0M9SsYzYT7HC5aA5gHPVzKpzbxy6QiVO481g1HgLzVPegobEcDC5GdKpaiv7WehWdHXCbvjf6951amxO27n/QpcKna/dtFkPVcO8PN2PG6gpQWuZwOj3am8IAAAAAIAl22VVxjijnTVTWcpQOdKPT9TDj0yQROi+KTrJpaGP9NwelfwE8cRyJlV6Pcgg5tRgTVaVdz6suEmquvL++PggCQiSfpaOedQcwLXn3jB0xX42CpqwWpqJFmwg3Axi6rRJP+OsKk9zjH/RzNGVtsUgTLyTS1dTvBBhCFUydEkFGy9mVXOct6YhAAAAAACWbDsHUDs7/a/Wzpnxiddqp7TrlVO909oZ46x1+pj6i2B5HeG53cTFLKfLqsIqpPa0Zep8Kd4S+zkmMnnhTNzPYmS2eVZVOfeGoTtyppgcIYlZlXgzNGdVq/u5bVZVuJNLVzO5dtEu4Vsm73W4Sn3DrTKWhq1vCAAAAACAJafIqtRcVxVWZ2jtjHJKO5sFLq1LFE2SGV5JGUj4U7VYV1WqImkrDjogcJm7V3iqL2Zq4lLi0oS7FafZ0vrac28sSSv0s+VmSDKgOe6ZGvJVP/LNENQB1U9zdfLSNgdQyKqkLpXuZCddzfyKiK2P3UwGOa6SCxvKL0cSVNUbAgAAAABgpbPUVfn1qpQZS6usiR7LW+KJZCVveTXxbHF0vVhXle9uXd9lbS3WFnXpA3xL58P6IGEtLekg84/EfhaOKY6SSDij9nNfM3Slfi7fDFnhzxivmKDpOMrMb4aoq9XTLPVTlq2tnn/xpZxViV0qdb5wz+dZZLhUXJo3Lb2JxC3TijZpxXeKqgAAAAAARzhZVpUXpAyrrfvvKfNrY1+upAKlsXDpdtjjuWc50d1h9d09dwAAAADA7bJpVnXXRHnNHVumZ4/nfoezKgAAAAAAbguyqmPEU95uvrDonHZ47mRVAAAAAABcPLIqAAAAAAAA7AVZFQAAAAAAAPaCrAoAAAAAAAB7QVaF22SXS1apaVWvZPl5q29yTfq89VI/b7BLWx55fzcGbjfuOgAAAOBQ+8mqprW6wyfV4dm161zXuwMW7xZ3l48pte6Gb7vrXNe5Xtca8g/5i/0Ut2w/zSN3v/3OmVVZ17cHK9LGZ8qqCv2UW287qfmW65za7gQOHxAz96frhHsgSg3irwU4dzC36rZJxKd589+8uVbzuZ/oBmsSDvJxn6hkVQAAAMChNs+qrFOFWEf35YdJ47re2eRJxrpezfvW0yKxJ8LuZn7Gmx8kxNYParR9l4Uute9+zChZ1wcPY+oSn34TF5VVncnW/bR6r6lo+erP7yzr+vPHH1FXjsuqphM06gJzkPYk9AZvMDO3fsh/dwJkVQAAAMChTpBV6cKziNby78N9S08yRz6Y+d2Nmp89huwsisbCP5pDnpd0Hz0GD2VZ4hn5LStdatk9VB+lsFRBqBowTtugbqtQBJT8SHVO6zR/9MVowy9dHkShOeM6Nceaft9Sx1SSfhrXqbkDfnex88u9Utkr0+5R8BqMZHEAs3tbmHC38txTQZDhH5IX+3lAXVUpShAHOXxRvBz5acqVlUt3SDIC+e7+E0B8j7Q31P5GaL9tWo8ZZ1X+c0O8QxZH/rA3Qn6apc4ffO6rbjChn9IbYUXnTdy38tVsuUMqDel+7E+vx4Nf/D8VAAAAAJvZMKuKZ9bkDxvhs4r8j9Xl52Qxmmnnd/e/UdMTwvysG7dutet14ZE4Z+TzEsKmbMtKl1p2F09zgRFOR01VJ2JZXPj0GP5eddEDs3HRk174OF0X1bhNZS/iI2vy9Jieb7D7nEqEEcZSBCkcs9B6PdZJSyrEjfN4NO985ZiJwiN6sZ8tXSoY3hfRxS0MslisV6zgy96Dwl1XGSWT/TGrWAw/CubgQOz8mntJeCOEp1W9HOveXOUPWJe9O9JBPvqNIHepesyFW7Gw+6obTPgQKGRVTZ2vH7zwYRXdIdldJ15i3btOjdtr63S/9F8ZAAAA4A7ZvK5qykHyyqmD66q2Kqpy05OqfwKpZ1VzRNVcY9XeVb9lrUtrGloxSlngZfV04kFWZYNuJCmYfwyWn4ebs6qoAivPAoIrIm+ZXxTpMTUtKKtcysKFFlp38u0qb1nYWMiqpGfs4jEbzr3YdGOXqsJAoTTIwzbJA7/4Yt66fNeVTjP+kYtvvzyrCpuTO7/mXhLTt8bbZt2bK+xS8EbLG8oH+fg3ghzDScdsPPd6l5ZvsOYPgRWdDwLB8OOr/mHlG1q+66aejC+aOboiqwIAAAAmW2dVPvUQsqqD6qrGf3w+VLL78LwxPhLky2NldVVe61pO7TMHpy1rXWpuaN0oTXmiv1g2nv03XqN+KTUoV80sPwzHpxCVKuRPtqUt2x5T28u7iseU5gTJRSLiluLG+YviM3blmHk/z5tVjY12ziwN8nCTJ+GU8OLps6qon1NzcufX3Ev10LZ+OQ7LqubF5qp3SDjIx74RpC4Vh67t3Je7VL/Bjsuq6scs/XOF+GFFVgUAAABsauusykdUelr5e/zrd7yOVWNdVSmCqSzkFHUm3z2u+qmlCcEf29f6TR5+Kv2ctyx3qWn3A+I8aQ7gaP0cwLxUofTwmZxOchxxRZ58Bs28pbhIdinuqayDll305Jhy69Mfw5GsbHlwVlU5Ztp5fyMNs3HL/VzRJbGhcPN4al7lLSkGbfVErzgHsC2rmncJB8RI0bDY+TX3klyzs/62qb+51t4hjZ0XFFagl7t0xLk33TaVG6z0ISC9ERo7H34g+4/WxQ8r4XIErZfmAJJVAQAAAAWbZlXzVLIpjbJm+gv69JvwpzOTFvUIE3OyCXr1tZlKu8+v+/hJaj05Qq2pwpwRJ6YJ0pZCl5p3r4xSpcNrsyrfmaSTC3VV8WNquph9sKWOH6fFhtIt3fQ0uDQrx8WjFI583iXhmKXWpQsnbJms4zY0J75YrgcRW887Py+vVu9ne5ekhpK1803eih/k+Jh+nunii/514a4rR0j5XTcvSpWsTJTdY0Ln19xL9TfC4m3T+uZqf3eIg1x+IwgKbwRh4mZhQBrPPd99xQ1W6Kf4RmjtvEn/0zB8WsofVtIdIt51+SUmqwIAAADKtsuq0vkUZv57eTotom1Jppr2AgHkTDnmK2dVrceOS8Mal98K9j9qyicAAAAAALhwm6+tfnrDv1rzT9D7FGVVB0SKZFUAAAAAANxpF5hVYdfiyUerI0WyKgAAAAAA7jSyKgAAAAAAAOwFWRUAAAAAAAD2gqwKAAAAAAAAe0FWVTB8X+E5vmowWODp1i8Yb/WWy1Gd7xqdwoVc98se5HO52VHavvXg5ry4S2/U2PP+uK80XWBd3z44JxjP408zv22U1EnxRXH389v2PygAAADYk0vLqvzfm7vebfOAX3jkONtfxI1qetgY+jP8Umd+PjBz00cO+46yqlWPmifQeN1v3MZvhPBe6sabwT91+1f266Y/LkQnyaqyd3r+ERTdw/HIDNc0CmGnvGbuZ3wzmPzFqQ/R0cKG4m9yCEfA6ob31zEfAmuzqsp4Bj8SXwzfIMmHf9Npljol3jbieUkvklUBAADglDbNqoya/+aqtXPO2eCv58Mr81+716Ye1vWniGluOrPQ/fJJWb1dNncAM7eu+6MSlh09WlzCdb+14m97DCMP3e/mDhHd9G1zJlm2In4EVbIq1TsTxijDZ0gyesFtMB9f+rQxyvX+k8cfpPpfhL1nVdb107nPH6pmTn/mj8rwzWLSq3BMVlXsamOAtQM7+g8KAAAANrZ1VtXroPRpmp4Q/lux1tM/lZtox8V/oS39rVR1Tvvjh08+2T+2q+xf4HUfV3lMjwHirAfhmMZ1aj5IfSZXvnvaevnv3KWsSjzN6Eyzp51wGFuHLnhASnZvHJDwmJWGdD/2x99FlVtCuEYNrQ8vLl73lkucDnL5ciRK17100+bXSJSfZumYi1v6F0/xRvDbz3/KIo/KEaIirGnL9i61D/JNflwU3rCt16jQkDh0siOzKuN6XQhoClnV/CPp02ZoSPdzRGWG06l+ZtZDnNLVXHzLhCVd4Y1R+++XVFc1D4OKTjPsnj/f4WLlxZgtpyl+qJZm9jVmVYv3fP0d5xo/Pw/9D8qeZ1UDAACgzXZZlTVOa2emvyOGdVXRU0Hv7PBwGPxtsiWrKlX0qGDBDuWfdsr/EO2S2Kv0L8bx6+GjWlQCEEyHaQybkqe+xvqaYQyjESicpsprDcpZVdPQ1Q+elADkAyIVC4gDMtbUmPFhQ/dLjxz5o690OVTD9V13RkuDLN51ieS6l+4Q4RoVCD8t3yH5cYoH3/SNIHQsewJXlUfN4CzmvUo3rXgrFgakMsjn/7iovGFbrlHx3POhK5GylfwjKAm//NvcqDkUzqcBilmVUbVPm6HDVjtl5oP4d5D/78vxcwDFCydfzWlf1bJiVDWrCk9k+I2aoqUkkRQ/e5cjudKHansJVXOA1f4RlE9mbH3LiNVnSx+PAAAAuDTbZVXGOKOdnVYbGf8tt5+eXrSzZvrH8OlJY9XfLCtZlbiORv4P5vKyOG0Pn0mykCc79ckI8u7Sj+rCx0X5NMWUpPnRt3jM6ZXik2q5gCt8MPYvigMyvmjm6Gp1ViWd5jBo6SBL173xjIoBqHTXlSQjULpD2h/A8tMsdUkcEHmU3MZvhNGmWVXxps26VBoQcZBv8ONi3Z2c92rppj0sqwr7ME/Ny+uqgs6kSYqUqaXvF+nTxjekgomE0SBLqdMBWVXtcyl+0U1LZTV9epfHM0wth4Z8jjO+EYKpjnku1pJVFT9Ut86qWj+CpM/P9reM+B8UsXUAAABcsm3nAGpnp//V2jkzz9BR2vXKqd5p7Yxx1jq98u+UpUqE/DlTfhIrTGS7rKxqPJFpCkz9NKMX27Kq+jGHB4/xUUccz11mVf7UoieZ/Lo3n5E4yGvXSt88q/Ld6MSlr6tb1l48c1a1tDJO/u0KxZu2eismxxTqQW7u42LdnZz3qvx+bwxS63VA8kfQ1IdaaFuZAxi+mH3a+IaMckrPcwArt815sioT1PgsNCSNZ7I6m7iEfHQDZM3tKqsKz6L2EXSarCpvHQAAAJfsFFmVmuuqwqxB6/FJw2Z/cW+ZAxj+83JIfs4UK4bC9WWCv+DKdRyNk3raHj6PnwMoHEp8TBJHyT8bDLUAlUkT4jHj1Y7zSXzzeJaKWbLWS3MAT5dV5S8m1739jIqDvCZXap8DuPaxK5nAWNm9ZZS2fSOMyllV8t7M+yY/+lYnHy0OiFxgeHMfF6U3bNS98jUqvQ1XZKnVrMqfkZgW5SFsMRypZlUu+LSZG7Ku74OVrcQvB5w62XK+lQ+BxjmAQ6a2/B8vcU5lcvpx7Vvlo7L9NM+fVbnFd5z0+dn+lhH/gyK3PnSh5W8XAAAA2J2z1FX59USUGUurrIn+qtr6t0lpzoj4MB/+2370GOznJypp4/BvwNIiLMJ0leZH9NIXILZkVcm6MNEjcT47L+x/PD8iOffWoTPxKU9Pd8J4VucudUMZQrhCTTY3rTWrEq9ROVfKh87l133NGYmDLF+Ogvy6i3dIa1ZVOE2hS+KWDS9u80Yw0QF9EtE+birbXT7NQpdKnwxigHWDHxfCG7b9Gi3WVVUDwfGw0j8n5OeYZlVZfjFmLsl1z/oZ7CB82oQNRf+xEGcRTifeklXlHwLi21B4MTjTqB5KbkZaq166bfL+uHjBxzxUPSSrEm+bTV884D9S7W8Z4T8o5c/55ZXvAQAAsEcny6ryf1DVfhLHNDuAL+sB0C6ZCFxb2QqxdUNXnwN4CdbVkZ3aycZzX6cJAAAAbGbTrAoATicKXFZOurzj1g0dWdW2yKoAAACAdciqAFyKeKYPRVUrrBq6YOOLSwP9VLIdhTgnGM89niYAAACwGbIqAAAAAAAA7AVZFQAAAAAAAPaCrAoAAAAAAAB7cTNZlVHdQF3cYigX3nkAAAAAAIA92yyrMirObtI/56zuTx/3WN133QmypcbOn+UcAQAAAAAAbosts6o+/G6pPWRVVvdxp7Y9NFkVAAAAAADAtjbLqqzu5awqqGyKUxshx/HT6+Zts92t7nutVdd14/9Nm+YNlbIqqUtGdUr715XJ9o7DuKzzUj+7yIlSMwAAAAAAgNtj86xqyqiMiv7oXFZ6lcY9RmXT9MK4aPq91X3XKeOM6rpe27TduKExMCpWfM1bjoeLtgg7nNSJJZ0vnSZ1VQAAAAAAACtst7b6ENcYpZRSZoqu0uKiSlaVTiIUtxiO3Cnjt29oKE6sCluKcxZ9n8QyqvmFYutkVQAAAAAAACtsnFVZrbQ1SpkxQhICKG/TrKrWkN873E/4sRAqzUlYsk/ctWLrZFUAAAAAAAArbJpV9UqpYT6e0rqfptGVwpokx5nm9qWbSHMA86yq1lByKHnLwlrwVve9NllUJcRocutyimWU8LWE7S8CAAAAAADcUttlVVb38TS7fMnzZBWp2jrq/rV5ufVgZyGrkhoKlmqPEh+hS+XvLUzTokLnpWPGr8+vRuPjVr8IAAAAAABwW22XVQEAAAAAAADHIasCAAAAAADAXpBVAQAAAAAAYC/IqgAAAAAAALAXZFUAAAAAAADYC7IqAAAAAAAA7MXNZFVGdQNlNjyXMzlt563uG4/cviUAAAAAAMCF2CyrMirOTdI/56zuTx+1WN133QmypcbOrz/Ho7KqswwpAAAAAADAyWyZVfXaRn++8azK6j7u1LaHPjSrsrofXzNq2+6VeyX9JGzdKDIuAAAAAABw8zbLqqzu5awqqGxaLALy0+vmbbPdre57rVXXdeP/TZvmDZWyKqlLRnVK+9eVyfaOw7is81I/u8iwt39ZGWf0+JKeoqt8oKJ++Q7kW4rNBeMpdMU5a6211jk3dmXsEAAAAAAAwA3ZPKuaMqqxaCcsr0pKr9K4x6hs8lsYF02/n6a+GdV1vbZpu3FDY4JTrPiatxwPF20RdjipE0s6XzrNPI+zxljnnNHaaD2FUJVhMconUukACQcv1lVldVNjcZcxOgi5lLZkVQAAAAAA4AZtt7b6ENcYpZRSZoqu0mqfeiiT1kCJgdD04rh9Q0NxYlXYUpyz6PskllHNLxRbr2RVvdLajBVYuikFSw+2KqvSfVqb5aw1vuW0xAsAAAAAAOAmbJxVWa20NUqZMUISAihv06yq1pDfO9xP+LGQ8sxJWLJP3LVi63Kc5COjodoprnk6SVblJ/dFs/ysMcZPL+z7rut6baisAgAAAAAAN2fTrKpXSo0RjB7XDxcm9k2SYEX6ArzSHMA8q6o1lBxK3rKwFrzVfa9NFlVJM/XkkChNseY5gPNKWDotAjs0qyqEZnO1VFA3FWw6dGDsWXROwnrsR70IAAAAAABQtV1WZXUfT7PLlzxPVpGal0nK11H3r83Lgwc7C1mV1FC8tLg8ZS9doyqTZi6FzkvHjF8fx6acVYlHFrOq0gDmzTnnrFbz1/0FzY651fythNK8RiE8POJFAAAAAACAuu2yKjSJV3s/dfHRXE1Wyo6sMXbM9Hpt09oqAAAAAACAsyKrAgAAAAAAwF6QVQEAAAAAAGAvyKoAAAAAAACwF2RVAAAAAAAA2AuyKgAAAAAAAOzFWbIqq/tDv+1u/Iq6k35Z3l5bBwAAAAAAuGs2zaqs7rtOSHeOyKr8/su7l1o/VlvrrZsBAAAAAACgaLusyuq+67U9RScbYqCbbX3FZgAAAAAAACg6eVaVT6Ozuu+1Vl3Xjf83/MioTumpNCo+UBYDBSVU4+ulrCrfMmmpUybb26jwT8uthxVdQvcBAAAAAADQZss5gGNkIwQ1UdwzzQg0qut6ba3ue23HUGvOfsKjJGmRUVHuNG4ptS5vOTYcbRHGU+Fera1TVwUAAAAAAHC87ddWlzKjLKtSxgc9QVaVbSL+Ma1iylryrxW2TLKogY+dxDKqhtbJqgAAAAAAAI51ou8BNKorhk3HZlXxDL1a64Utxaxq6sfUnYLoWzQAACAASURBVOgHLa2TVQEAAAAAABzrNFlVdRLfclaVJF3CLLxqKjS3Lm8pZ1VDR0wWVTW3LqdYwdTGQ14EAAAAAAC4S7bLqvwi6tFC5umUOWUqWZU8sU44bPjynErlrUtbFrOqPC1qbj3dfH51eC1prv1FAAAAAACAO+VEcwAPUEyQAAAAAAAAcEeQVQEAAAAAAGAvyKoAAAAAAACwF/vJqgAAAAAAAHDXkVUBAAAAAABgL8iqAAAAAAAAsBdnyaqs7rsDF6MyqhvcyFpWp229fViOGEAAAAAAAIALsmlWZXXfdUK6c2zUYnXfsHup9WO1td66WbLHwVnV+uYAAAAAAAB2b7usyuq+67U9RScbcpmbbb24mdX9+JpR23av3CvpJ2HrRpFxAQAAAACAnTp5VpVPo7O677VWXdeN/zf8yKhO6ak0Kj5Qlr4EJVTj66WsKt8yaalTJtvbqPBPy62HFV1B9/3Lyjijx5f0FF3lFWDyCIgDmDfnN+vynznnnLXWWuucG7sydggAAAAAAGBPtpwDOGYoQmQUxT3ThDajuq7X1uq+13bMZObsJzxKkhYZFeVO45ZS6/KWY8PRFmE8Fe7V2rpUzmSNsc45o7XRegqh6uc1jYBR+SzK1jmAWd3UWNxljA5CLqUtWRUAAAAAANib7ddWlzKjLKtSxgc9QVaVbSL+MS0rylrKC5viLZMsauBjJ7GMqqH1SlbVK63NmMLpphQsPdiqrEr3WXWatca3nJZ4AQAAAAAA7MaJvgcwqQvaNKuKZ+jVWi9sKWZVUz+m7kQ/aGldjpN8ZDRUO8U1TyfJqvzkvmiWnzXG+OmFfd91Xa8NlVUAAAAAAGBnTpNVVSfxLWdVCzPg0h+XW5e3lLOqoSMmi6qaW89SrHkO4LwSli6Wm63Mqgqh2VwtFdRNBZsOHRh7Fp2TsB77US8CAAAAAACst11WFS/uHYYuyevlrEqeWCccNnx5TqXy1qUti1lVnrk0t55uPs4mLGdV4pHFrKrQB6E555zVav66v6DZMbeav5VQmteYr3J1zIsAAAAAAAAHONEcwAMUE6SLFa/cderio7marJQdWWPsmOn12qa1VQAAAAAAADePrAoAAAAAAAB7QVYFAAAAAACAvdhPVgUAAAAAAIC7jqwKAAAAAAAAe0FWBQAAAAAAgL0gq8JtYlynbroPZ3BHTvNoqnNd57rOsRIeAAAAAFyO/WRV1vXZU6XV46Nm1zt7wCGl3eVjSq0754waN+51rSH/SLzYT3HL9tM8cvfbb58hjnX9cXHJcB9qf3VXnebRrTcd00w34cHZ0Cn6eeRhj+zSic4IAAAAAG65zbMq61Qh1tF98DSbPGkb1/XOJo921vVq3reeFok9EXY384O01VM3xNYParR9l4Uute9+zChZ1wfxlroFz9W3NKtSvTM6uLj7zKqmLll9UGxKVgUAAAAAcO4kWZUuPJxpLf8+3Lf0aGfUURmE392o+YF/yM6iaCz8oznkeVv3TgUnMJTDiGfkt6x0qWX3UH2U5vIrsQrMOG2Duq2s3XB3/yPVOa3T/NEXow2/dHkQheaM69Qca/p9Sx1TSfppXKfmDvjdxc4v9yoMX+Ldo1jQun5qS9xSHPMVXTKu13Gw2HCaw4ul1sUL1zjI8jHD+Cx4K4kNHT9KLdco70zFqqFreSOUdgcAAAAALNkwq5qm0ZWezcKHN7n8p/xUKUYz7fzu/jeqc712KkxS4tatdr0WQhOZkc9LCJuyLStdatldPM0FRjgdNTzzF8riwkqZ8Pcq6MlYlhVkfGEMVxfVuHXjWYjlOWHpmeqy8w12n5O7MEZZiiDzY8rnbuIXVXlLt1CFtNglo+b0ZLxwhVGSK+Okt5Vw4ZJTrgzy0hkZVbtD2kepctc1XaPy6efahy5qNBglYTypqwIAAACAQ2xeVzXlIHnl1MF1VVsVVbkpzfHPuvWsao6ommus2rvqt6x1aU1DK0YpC7ysnp+ufVZlg24kKZgKqmbS67Umq4oqsPJcKbgi8pb5RUlmovkIqbHCRTpm5dyTCKm0pZzCNHYp2NfqYN6oNEpDtJpGS4WsSn6jtQyyeEwjn07eUPsoyVuuuUZyVyXtQyeM0kFRFwAAAACgYOusyqceQlZ1UF2V7o8KqpLdozWq8+Wxsroqr3Utp/aZg9OWtS41N7RulMw8YW0MQeLZf+M16ueerMiq2leal0qT5BSmtGVbVtVe3rUqBxnvEJMmofmW+WVdV3HWPOHOHzyKXRqzqvZBFo9ZWELrUrKq8SQWh04cJbIqAAAAANjS1lmVj6j0tPK3n+ATrmPVWFdVimAqCzlFncl3j6t+op+Wo6v2taKTDKLSz3nLcpeadj8gzpPmAI7WzwHMp4+VUpjkdJLj5FmVHw15S+t6cQ5gllU5UxvGLrvo7fPLVO+0mrevbZmUyzV3KUlhxhouaZTSPgcv5sV68ry/xkEunVFbVtU+SvKWK6/R2sCoPnTyKJWz7MYySQAAAABAYNOsap5KNqVR1kwPkCbKetKsyqRFPUZaCzyZoFdfm6m0+/x6uFJ1fcv6s26w+8J6VYUthS41714ZpUqH12ZVvjOLM7xcvPh0+NifLmYfbKnjXElsKN3SxUukZVFXGDqEoxSOfN4l4ZiFc3dSmFjaMr/ETV0Sa6ZUYZTiBePkKYfVla1aB1k8ZnNWtWqU5C0br1Gygl7lrbFy6PJRKmVVpbc2AAAAAKBsu6wqndZk5ie08EfROlAHK5elYJkpx3zlrKr12Gqhomdp/6OmfJ7ZitmFAAAAAACgyeZrq5/eUHjCzJp9irKqAyLFC8qqCEwBAAAAANjeBWZV2LV4OtXqSPFCsip12NkBAAAAAIAFZFUAAAAAAADYC7IqAAAAAAAA7AVZFQAAAAAAAPaCrKpg+L7C271ytppWlTrFaVo9rzx1koaChbH8YXXvOjWuej4uJrWDBbD2di8JozQsit+5ruObDQEAAAAAN+uisqrhmX/4pfyjv3X9MUFAYfeN8wUz9/zAwx55mm2HNSqIKo5rMcyqjj+a1IDre5csbj5+C6F1/WJWJfbnNIN8zL3kI6Twnp/fCMEIrNsyGaWgq2RVAAAAAIAbtWlWZVRQ4aKdc84GT8LDK/MTdRY01Fld2OU0WdXGgsSkeCJ1ZFVpA3JW1eu4rR1kVYcLO2+m28bMydc8yO1biqM0IasCAAAAANy0rbOqXs8Tvvx8orC4Q+sxXzAm2nGx8ESMeHQf1Sv5DZRUxKQ6p31PVNPuc5eM69S8fT5zKnk9G5ogSggygrxL0XBNm5X6mW/pz3TxmHlnXDmrEsazMCBhQ/WsSuySOCAyKasSGNep+TIN/RTHUx7kwmmWGsq3FOc/Fi9Hfo7TofylCa/R0JxZtWUVWRUAAAAA4KZtl1VZ47R2ZnpED+uqohSgd3aIJILH/pasyh8nfZau1sIkqyb5fZXfpbR78rqZp1aNU6hcUMCSpDw5E1W1hKFY0qUwkoviOTHrkbZU4QTJ6pb5YZPoLb8oUSGPOCBSIY/Qf7EOqHSNRO1ZVd7PvD+lF4PdFwriSg1lh61dDomKp/Xpfvz9MFYqy8VatiwhqwIAAAAA3LTtsipjnNHOTgszDdUxfT8+og8/MkEspfvlcEqUJlZS6BBlLkFWtZxJlV5PJvEdkFVlVVFil3y+kG6Q9VPe0sjVZ/Ixs8OW6qqE8ZQGJNy9nlVF5VdxRVvrXbGmrkroUntWJe0SDki+MFb93EuXQzimdX0X5U1+dxW8ru2aLavIqgAAAAAAN23bOYDa2el/tXbOjM/GVjulXa+c6p3WzhhnrdPHLAsU1O/I+UJYt3K6rCqcHFfPTQqrJl1GViWO53FZVSnau5SsakVD2Y61y5F0R8fVZ92c9oZhllmzZR1ZFQAAAADgpp0iq1JzXVVYx6G1M8op7WyWMjTOAfSSmVNJwUgyIW4hqyrVmzRkVSse7JuzqsoEscppzr8P6mtajtmSVcnjWRiQsBsLcwCly3G+rKpw3dMXk8mblSW0mrOq9jmA8pZxNV868ktb1pFVAQAAAABu2lnqqvx6VcqMpVXWRHlKS1aVLKUkr1SdLY6uF+uq8t2HnCVpa7Guqr4WeHNWFZ1pnGLkpylvGfZflY8pnebi2urzeBYGxF9r4zcQxzOeBti6RlXo6KwqH0/hxcLkzdaGCufe/m2Y4VpvwgzKYPf2LSvIqgAAAAAAN+1kWVVeOKOn7ybz608vrp6zc0mtSst6QNhMY1Z1pELIeFuRVQEAAAAAbtqmWdVdE2VVhUltOBWyqhMgqwIAAAAA3DSyqmPEM7woqjqrYPBPGBHemazKT0skqwIAAAAA3CiyKgAAAAAAAOwFWRUAAAAAAAD2gqwKAAAAAAAAe0FWhdvkjiwvdUdO82jqDCuaAQAAAAA2tp+saloqO3yqtHpaufygb3wTd5ePKbXumhec9o/Ei/0Ut2w/zSN3v/32GeJY1x8Xlwz34bx4/6rTPLr1pmOa+UsGDsyGTtHPIw97ZJdOdEYAAAAAcMttnlVZpwqxju6Dp9nkSdu4rnc2ebSzrlfzvqu/nkzc3cwP0lZP3RBbP6jR9l0WutS++zGjZF0fxFvqFjxX39KsSvXO6ODi7jOrmrpk9UGxKVkVAAAAAMC5k2RVuvBwprX8+3Df0qOdUUdlEH53o+YH/iE7i6Kx8I/mkOdt3TsVnMBQDiOekd+y0qWW3UP1UZrLr8QqMOO0Deq2snbD3f2PVOe0TvNHX4w2/NLlQRSaM65Tc6zp9y11TCXpp3Gdmjvgdxc7v9yrMHyJd49iQev6qS1xS3HMV3TJuF7HwWLDaQ4vlloXL1zjIMvHDOOz4K0kNnT8KLVco7wzFauGruWNUNodAAAAALBkw6xqmkZXejYLH97k8p/yU6UYzbTzu/vfqM712qkwSYlbt9r1WghNZEY+LyFsyrasdKlld/E0FxjhdNTwzF8oiwsrZcLfq6AnY1lWkPGFMVxdVOPWjWchlueEpWeqy8432H1O7sIYZSmCzI8pn7uJX1TlLd1CFdJil4ya05PxwhVGSa6Mk95WwoVLTrkyyEtnZFTtDmkfpcpd13SNyqefax+6qNFglITxpK4KAAAAAA6xeV3VlIPklVMH11VtVVTlpjTHP+vWs6o5omqusWrvqt+y1qU1Da0YpSzwsnp+uvZZlQ26kaRgKqiaSa/XmqwqqsDKc6Xgishb5hclmYnmI6TGChfpmJVzTyKk0pZyCtPYpWBfq4N5o9IoDdFqGi0Vsir5jdYyyOIxjXw6eUPtoyRvueYayV2VtA+dMEoHRV0AAAAAgIKtsyqfeghZ1UF1Vbo/KqhKdo/WqM6Xx8rqqrzWtZzaZw5OW9a61NzQulEy84S1MQSJZ/+N16ife7Iiq2pfaV4qTZJTmNKWbVlVe3nXqhxkvENMmoTmW+aXdV3FWfOEO3/wKHZpzKraB1k8ZmEJrUvJqsaTWBw6cZTIqgAAAABgS1tnVT6i0tPK336CT7iOVWNdVSmCqSzkFHUm3z2u+ol+Wo6u2teKTjKISj/nLctdatr9gDhPmgM4Wj8HMJ8+VkphktNJjpNnVX405C2t68U5gFlW5UxtGLvsorfPL1O902revrZlUi7X3KUkhRlruKRRSvscvJgX68nz/hoHuXRGbVlV+yjJW668RmsDo/rQyaNUzrIbyyQBAAAAAIFNs6p5KtmURlkzPUCaKOtJsyqTFvUYaS3wZIJefW2m0u7z6+FK1fUt68+6we4L61UVthS61Lx7ZZQqHV6bVfnOLM7wcvHi0+Fjf7qYfbCljnMlsaF0SxcvkZZFXWHoEI5SOPJ5l4RjFs7dSWFiacv8Ejd1SayZUoVRiheMk6ccVle2ah1k8ZjNWdWqUZK3bLxGyQp6lbfGyqHLR6mUVZXe2gAAAACAsu2yqnRak5mf0MIfRetAHaxcloJlphzzlbOq1mOrhYqepf2PmvJ5ZitmFwIAAAAAgCabr61+ekPhCTNr9inKqg6IFC8oqyIwBQAAAABgexeYVWHX4ulUqyPFC8mq1GFnBwAAAAAAFpBVAQAAAAAAYC/IqgAAAAAAALAXZFUAAAAAAADYC7KqguH7Cm/3ytlqWlXqFKdp9bzy1EkaChbG8ofVvevUuOp5y2JSm1/lvd024oAYNY4bX2IIAAAAANifi8qqhiBg+KV8HmBdf0w6UNh949DBzD0/8LBHnmbbYY0K8ovjWgyzquOPJjXg+t4ledT4LYTW9ReYVfkIKby953s+OFnxxXl3FR+zMCBWk1UBAAAAAHZo06zKqKDCRTvnnA0ej4dX5ifqLGios7qwy2myqo0FX29XPJE6sqq0ATmr6vW5rum2wi9ANNMdYubkax5P6cVwtMOLWBkQsioAAAAAwC5tnVX1ep7w5ScZhWUgWo/5gjHRjovVKGLEo/uoXslvoKQiJtU5raPak8Xd5y4Z16l5+3w6VfJ6NjRBEhEEB3mXouGaNiv1M9/Sn+niMfPOuHJWJYxnYUDChupZldglcUBkUlYlEjofzB9cPCNBYUtxqmNx5PPTmQ7lr0J4OYbmTPnFudLQNIWhZFUAAAAAgF3aLquyxmntzPSIHNZVRVFL7+wQSQQP0y1ZlT9O+oBdLaJJVk3y+6o4thB2T14388yscV6Vi0KBKOXJmajsJQzFki6FkVwUz4lZj7SlCidIVrfMD5tEb/lFSap7hAHJ64DE/otlRKVrJGrOqoTOi70Kzmih9k089/yA9ZGXqHgCoO7H3w/DMrxrxBfDbuierAoAAAAAcLm2y6qMcUY7Oy3MNFTH9P343D78yASxlO6XwylRmlhJYVOUuQRZ1XImVXo9mcR3QFaVVUWJXfJJRLpB1k95S6mmpnjM7LCluiphPKUBCXevZ1VR+VVc0dZ6VzRnVeLNIPSqUPsW7j4GrOLNIJ1maeSFY1rXd1EI5XdXwes+q0pedEEirNsmmZJVAQAAAAB2ads5gNrZ6X+1ds6MT9FWO6Vdr5zqndbOGGet08esJxTU7whhk4mLWU6XVYXzy+rpgJFntF1GViWO53FZVSna2z6rKtwMQq8KWZV8zOOyKuFsdFxoNs3sS8Ks0ovFQ5WRVQEAAAAAdukUWZWa66rCiX5aO6Oc0s5mKUPjHEAvmU6VzChMJsQtZFXZ7tNRlrOqFU/7zVlVZdZY5TTn3wflOS3HbMmq5PEsDEjYjYU5gNLl2DyrKt0MQq+SeZqVuKc5q2qfAyhvGRfuidV84hk1fgciWRUAAAAAYH/OUlflZycpM5ZWWRPlKS1ZVbKUkrx8dbY4ul6sq8p3jxfe7nxtUb2uqr4WeHNWFZ1pHG3kpylvGfZflY8pnebi2uq6Wlflgmtt/AbieMbTAFvXqAqtX1tdL9ZVra+Sm8+9cJrtX3wZLusmTJYMdhdeDFpvHECyKgAAAADALp0sq8oLZ/T01WZ+UeqW6o89S6pa5PosnMj6tdXlg4hzAO8AsioAAAAAwC5tmlXdNVFWVZjUhlPZIqtKryBZFQAAAAAAN4ys6hjxtC+Kqs5q/ay3eVctzLa7O1mVn5ZIVgUAAAAA2B+yKgAAAAAAAOwFWRUAAAAAAAD2gqwKAAAAAAAAe/H06dOXXnrp2Wef/UzsT/7kT4b/9f7iL/7iG9/4BlkV9myXa06pwrpaw7JZrMe/CQYZAAAAAG6Lp0+fPvvss2+88cYHk+vr6+vr6/fee++dd957++133nrr7Z/97P5PfvLTb33r23/1V391uqxqWio7fKqc18A+6BvfxN3lY0qtu+ZVqP1z8mI/xS3bT/PI3W+/c2ZV1vXtIYi08ZlilFX93Hz3gta3DIMMAAAAAHfO06dPP/3pT/uU6vHjq4ePHr3//sPXX3/zJz957Uc//smrr/7o5W9/5/l/efGVV777yU99cjGrsk4VYh3dz1++lgYKxnW9s8kDm3W9mvdd/Z1l4u5mfnC1euqG2PpBjbbvstCl9t2PGSXr+iApULfgafmisqoz2VuMYl3fOdV4RAYZAAAAAO6cIasaaqmurq4ePnz04MH777773o9+9JMf/OCH3/u3H7zyyvf+71e+9k//9K/f+ta327IqXXjk0lr+fbhv6YHNqKMyCL+7UXOaM2RnUTQW/tEcUqak++ghfCjLEs/Ib1npUsvuofoozeVXYkmLcdoG1S6F+pTkR6pzWqf5oy9GG37p8iAKzRnXqTnW9PuWOqaS9NO4Ts0d8LuLnV/ulcpemXaPgtdgJIsDmN3bwpy1leeeC09z2H1VP/OrKe8eBIJR4Ct1Xu6kdJcyyFRHAgAAAIBzLsiqnjx58ujR4yGoeuutd37w6g+/+93vv/zyd77+9ZdffPGlf/zHf/nmN1+uZ1XTNLrSE1f4SCaX/5SzKjGaaed3979Rneu1U+FDddy61a7XTc/ezo21Ufl5CWFTtmWlSy27i6e5wAino4b4oFAWZ/V8QcPfq6AnY1lWkPGFMVxdFHlMRTdhQ8KWzqm8PCfYfU7uwmKrpQhSOGah9XotTJrIiBvn8Wje+coxpc4L/Wnup3A1xd1LWVX1wnmL1X8MMgAAAADcbRtmVYMpB8krpw6uq9qqqMpNaY7PI+pZ1RxRNddYtXfVb1nr0pqGVoxSFnhZPT8z+6zKBt1IUjD/jC08t6/JqqIKrDxXCq6IvGV+UaQYJS0oq1zKwoUWWnfy7SpvWdhYiFHyDKhyzMwQraZZW3M/W1OYcl1V7WSDTop3BYNMVgUAAAAAzrntsyqfeghZ1UF1Vbo/KqhKdh+eHscwKF8eK6ur8lrXcmqfOThtWetSc0PrRmnKE/3FsvHsv/Ea9XNPVmRV7ctmm7hWqxJ5lLZsy6ray7uKx8xbd4UQR9xS3Dh/sZQBlY5ZOgkVhynN/TxPViWHqgwyWRUAAAAAjLbOqnxEpaeVv8cn/3gdq8a6qlIEU1nIKepMvntc9VN70A3+WJ/TlHQsjEUq/Zy3LHepafcD4jxpDuBo/RzAfFmrUjCUnE5ynDzy8KMhbyku0V2enlZcBy276Mkx5danP4YjWdny4BilcszK7ZEELo39LAWyaa2fv2OHab/lCyf386IGueK0gwwAAAAAd9emWdU8lWxKo6yZAg4TZT1pVmXSoh6TT93KJujV12Yq7T6/7uMnqfXkCLWmgt0X1qsqbCl0qXn3yihVOrw2q/KdSTq5UFcVP/ani9kHW+o4VxIbSrd0U1ZSmEIYRgnhKIUjn3dJOGapdenCCVsm67gNzYkvFjpfal38cgDxNmjqZzlGyXef13FbunDyIEsb73OQs7E43yADAAAAwF21XVaVzrQy83NX+KNoHaiDlStlsMyUY75yVtV6bFUrNmnY/6gpn7gxXDgAAAAAwDY2X1v99IYyDebL7FOUVR0QKRJ5XCguHAAAAABgGxeYVWHX4klSqyNFIo8LxYUDAAAAAGyDrAoAAAAAAAB7QVYFAAAAAACAvSCrAgAAAAAAwF6QVd0Zwzcw8uWJAAAAAABgxy4qqxrSluGX2nPoYl1/TCp05O6lox6TVU0rpoe7z5ejd34JddUJL4q7AwAAAAAAZDbNqoyawwitnXPOBl8DN7xilJRlNLB69S43ZpdZ1eGM63pnk16ZOXuyWvgOON27Xpd3BwAAAAAAEGydVfU6qKzpxrQiLMDResybjIl2XCy6KWVVYbGVP4LqnPavK+fC6MRvYFfsXuvVtPtwQN3Pr4SRXDgs9X4Ku5u5G3MwZFyn5u11NcZTWdOrdncuTdCGaz0YDpJcPt3HtW8NWZXux9Hwd9GchXXN/QQAAAAAABdsu6zKGqe1M1OUENZVRflL72wQFQ1asip/nDByCkOcsX7HOeecCjZTw5GDn857te9eIP+0msuEVUhyQ/nupaxqmgvZVHQmFUYNuxu1EMnlu/soSk3R0nhBTRRTFluX6N51ajyCtk734zHrlwAAAAAAANwih2RV/++3futO/aqN3xCfpYtnSbnMPPmxi7KqpqirXFdVaXHhsOIxm3cfsirVzYlVUvGU5l9tWZUyc2josyp5kAEAAAAAwC1EVnVcVjUYcqg5TBHDpqnuKamrutCsajjlMZ8SWzfC8uqHZVVhiyRWAAAAAADcamFW9eTJ9ZMn11dXV48ePb5//6033vjZa6+98e///torr3yPrGpJEvckdUbhHD21WFeVlyn53Gf4Qr0sqzpgEt+RWVUYRYmthwtaCbtL6llVaz8BAAAAAMAFC7OqDz74xX/t+//2e7/3Pz72seHX/9b6b774RWt/LGdV6cGMdnb6X62dM+ly48o4NSyvbqICmZb1qqI5dMHG4cLbi4tM5Q2Vd2/IqobkKF+2PF5OPllbXS/WVUm7z4ugx+tVNX2pYtzPzi/g1ZhVmWhfYcnzcCGwbDBLu+fkrKo8yAAAAAAA4NZJsir1+7//f/7sz/528qUvfemrX/3qQVnVkFCEycKw2rpR83re+/5Ot3V1VTfAUGQEAAAAAABumaPmAN50509r96dJVgUAAAAAAG6bTecA3i67P02yKgAAAAAAcNtsOgfwdrkjpwkAAAAAALAfzAEsuiOnCQAAAAAAsB/MASy6I6cJAAAAAACwH0lW9T//6I/+5otf/IfJiy+++PLLLx+dVVndd50yyxvuClkVAAAAAADAmW02B9Dqvov12oY/I6sCAAAAAABAXZhVPXr0+MGD999997233nrnB6/+8Lvf/f7LL3/n619/+cUXX2qvqzLq8lIpGVkVAAAAAADAmZ08qzJqLLMKXzWqU9oXYo0/yV+0uk+qs+Y/nR5ZFQAAAAAAwJmdp67K6j7Nqnzs5HeQXjTKv5Qe4+TIqgAAAAAAAM7sxrKqfKPSi0NYZXV/zqIqR1YFAAAAAABwdnvPqqaM6gaWwSKrAgAAAAAAOLPdZ1XOGdVrfQMrtpNVAQAAAAAAnNmpsyrrF0sPfTbjzwAABPlJREFU11FflVUNy7Of/8sFyaoAAAAAAADObPOs6gSCBdbPiawKAAAAAADgzPafVRl1E0VVjqwKAAAAAADg7HadVRnVdd2N1FQ5R1YFAAAAAABwdrvOqm7WHTlNAAAAAACA/SCrKrojpwkAAAAAALAfZFVFd+Q0AQAAAAAA9uNGsiqjbma19HXIqgAAAAAAAM5sw6xqWAl9VM2iyKoAAAAAAAAg2DarmhIoo6ppFVkVAAAAAAAABCfLqnpth99b3afFVkZ1ykxlWH7DvSGrAgAAAAAAOLMTzQGcAiire+H3RvngKtxgZ8iqAAAAAAAAzuw0dVVTAmV1H872m7YI5wAmm+wIWRUAAAAAAMCZ+azq6urq4cNH77773ttvv/Pzn7/1b//26iuvfO+b3/z2Sy99419f+Mo/fPmf12RVzuqerAoAAAAAAADrDFnVkydPhqDqrbfevn//rTffvP/KK9/95jdffulr33jxxa/+8/MvfOkf/mltXZUyrjIHsHEV9ptEVgUAAAAAAHBmT58+/fznP//GG288evTowYP333333Xfeefftt9/50Y9+/OqrP/zBq/b73//B9773/e9853tf+cpL9+7dW7leVfSyf7Gw5c6QVQEAAAAAAJzZ06dPX3zxxc9//vOf/NQn67/u3bv33HPPVbKq2+aOnCYAAAAAAMB+PH369PXXX79///577733fuDhw4fD/3qPHj16/PgxWRUAAAAAAABOhayq6I6cJgAAAAAAwH6QVRXdkdMEAAAAAADYD7KqojtymgAAAAAAAPtBVlV0R04TAAAAAABgP8iqiu7IaQIAAAAAAOwHWVXRHTlNAAAAAACA/UiyqsePH19Lrq6uyKoAAAAAAABwWklWdX19/Ru/8Rsf+tCHPvShD/3ar/3ahz/8YaXUJz7xievra7IqAAAAAAAAnJZYV/WRj3zkd37ndz7+8Y/fu3fvy1/+MnVVAAAAAAAAOId8vaohrvqDP/iDL3zhC1/72teGoIr1qgAAAAAAAHByQ1b185///MGDB34Z9aurq+vr62effdYHVWRVAAAAAAAAOLkhq3rnnXfef//9R4EnT5588MEHT5488a88fvz46uqKrAoAAAAAAACnMmRVDx48GNKoiqurK7IqAAAAAAAAnNCQVT18+DBPpnw+FYqyqjvy66avEQAAAAAAwF0xZFV5LPXkyZPhfxNkVQAAAAAAADiVIavKM6kSsioAAAAAAACcypBVvd2s++nPPhh+mb//mj8EAAAAAAAAcLyHKwlZ1Wuvvfb888/fu3fvmWeeeeaZZz4ZeCZz7969559//qc//emfP/eN333muQ//4d/yi1935NfvPvPcnz/3jZ8CAAAAAHBnvPDCC5/73Oc+3eBzn/vcCy+88Pbbb2+QVd2/f//evXtvvPHGsMZV3WuvvXbv3r0333zzd5957s33rv/TuV/+J7/4dQd+/dK9/s6jj/4v8yYAAAAAAHfGX/7lX96/f/+DDz64rnry5Mkbb7zxhS98YZus6t133/3Upz51fX19dfXk6urq8eP516NHj/2vhw8fPXjw4MGD9z/zmc+8/fbbH/7Dv/1P5x48/eXPP/jl60/+g1/8usW/fvzoP77z7tMn1x/8l//+mfYJtwAAAAAAXLo//dM//cUvfjEEUldXT6RfV48fXz18+PDhw0ef/exn316fVf1/XNpHCJ3MNZIAAAAASUVORK5CYII=" alt="" />
3)通过servletContext对象实现servlet转发
由于servlet中的java数据不易设置样式,所以serlvet可以将java数据转发到JSP页面中进行处理
this.getServletContext().setAttribute("data","serlvet数据转发");
RequestDispatcher rd =
this.getServletContext().getRequestDispatcher("/viewdata.jsp");
rd.forward(request,
response);
4)通过servletContext对象读取资源文件
在实际开发中,用作资源文件的文件类型,通常是:xml、properties,而读取xml文件必然要进行xml文档的解析,所以以下例子只对properties文件进行读取(在一个web工程中,只要涉及到写地址,建议最好以/开头)
在web工程中,我们一般来说,是不能采用传统方式读取配置文件的,因为相对的是jvm的启动目录(tomcat的bin目录),所以我们要使用web绝对目录来获取配置文件的地址
读取资源文件的三种方式:
第一种:使用ServletContext的getResourceAsStream方法:返回资源文件的读取字节流
InputStream in =
this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
Properties prop = new
Properties();
prop.load(in);
String url =
prop.getProperty("url");
第二种:使用ServletContext的getRealPath方法,获得文件的完整绝对路径path,再使用字节流读取path下的文件
String path =
this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
String filename =
path.substring(path.lastIndexOf("\\")+1);
//相比第一种方法的好处是:除了可以获取数据,还可以获取资源文件的名称
FileInputStream in = new
FileInputStream(path);
Properties prop = new
Properties();
prop.load(in);
String url =
prop.getProperty("url");
第三种:使用ServletContext的getResource方法,获得一个url对象,调用该类的openStream方法返回一个字节流,读取数据
URL url =
this.getServletContext().getResource("/WEB-INF/classes/db.properties");
InputStream in =
url.openStream();
Properties prop = new
Properties();
prop.load(in);
String url1 =
prop.getProperty("url");
5)web工程中,不同位置的资源文件的读取方式
一、当资源文件在包下面时
InputStream in =
this.getServletContext().getResourceAsStream("/WEB-INF/classes/cn/itcast/context/db.properties");
System.out.println(in);
二、资源文件在web-inf下
in =
this.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
System.out.println(in);
三、资源文件在web工程中
in =
this.getServletContext().getResourceAsStream("/db.properties");
System.out.println(in);
6)在非servlet程序中如何读取配置文件:用类装载器
1)用类装载方式读取
in =
StudentDao.class.getClassLoader().getResourceAsStream("cn/itcast/context/db.properties");
2)用类装载方式读取,把资源当作url对待
URL url =
StudentDao.class.getClassLoader().getResource("db.properties");
这样可以获得资源文件名称:String path = url.getPath();
3)注意:在线程休眠过程中,即使改动了资源文件,获取到的还是原始内容
解决方案:
URL url =
StudentDao.class.getClassLoader().getResource("db.properties");
String path =
url.getPath();
FileInputStream in = new
FileInputStream(path);
Properties prop = new
Properties();
prop.load(in);
System.out.println(prop.getProperty("url"));
try {
Thread.sleep(1000*15);
} catch (InterruptedException
e) {
e.printStackTrace();
}
in = new
FileInputStream(path);
prop = new Properties();
prop.load(in);
System.out.println(prop.getProperty("url"));
4)注意:用类装载器读取资源文件时,千万要注意,资源文件绝对不能太大,否则极易导致内存溢出
资料来自 于偲鹏 的微博,十分感谢!
servletconfig和servletContext的区别的更多相关文章
- Servlet学习笔记(二)之Servlet路径映射配置、Servlet接口、ServletConfig、ServletContext
Servlet路径映射配置 要使Servlet对象正常的运行,需要进行适当的配置,以告诉Web容器哪个请求调用哪个Servlet对象处理,对Servlet起到一个注册的作用.Servlet的配置信息包 ...
- ServletConfig和ServletContext 区别
ServletConfig和ServletContext 1.ServletContext在整个web应用程序生命周期内存在,用来保存全局对象,整个web应用都可以使用其获取context参数.当 ...
- JavaEE:Servlet简介及ServletConfig、ServletContext
Servlet简介 1.Servlet是sun公司提供的一门用于开发动态web资源的技术*静态web资源:固定数据文件*动态web资源:通过程序动态生成数据文件2.Servlet技术基于Request ...
- ServletConfig与ServletContext
ServletConfig与ServletContext对象详解 一.ServletConfig对象 在Servlet的配置文件中,可以使用一个或多个<init-param>标签为s ...
- ServletConfig和ServletContext
ServletConfig和ServletContext Servlet初始化参数 在Servlet的配置文件web.xml中,可以使用一个或多个<init-param>标签为Servle ...
- day05 Servlet 开发和 ServletConfig 与 ServletContext 对象
day05 Servlet 开发和 ServletConfig 与 ServletContext 对象 1. Servlet 开发入门 - hello world 2. Servlet 的调用过程和生 ...
- JaveWeb学习之Servlet(二):ServletConfig和ServletContext
原文同步发表至个人博客[夜月归途] 原文链接:http://www.guitu18.com/se/java/2018-07-26/20.html 作者:夜月归途 出处:http://www.guitu ...
- ServletConfig、ServletContext 的应用
一.ServletConfig对象及其应用(用的不多) 1. Context和ContextPath:一个web工程,若名为JavaWeb,访问的路径为:http://localhost:8080/J ...
- JavaWeb学习笔记:ServletConfig()和ServletContext()
ServletConfig()和ServletContext() 1.ServletConfig() ServletConfig是一个接口,它由server提供商来实现. ServletConfig封 ...
随机推荐
- Android studio 常用插件
常用插件 GsonFormat 该插件的功能是根据JSON数据生成相应的实体类,插件装好后按Alt+S快捷键呼不出GsonFormat的界面,如果你也遇到类似的问题,就去改一下快捷键吧!我将快捷键改成 ...
- bootstrap-9
图像: bootstrap中有以下几种样式风格: 1.img-responsive:响应式图片,主要针对响应式设计 2.img-rounded:圆角图片 3.img-circle:圆形图片 4.img ...
- LVS的调度算法
LVS的调度算法(Scheduling Method)一共有10种 一.静态方法:仅根据算法本身进行调度 1.rr(Round Robin):轮询 2.wrr(Werghted Round Robin ...
- 用正则从html代码中提取图片路径
$str = '<div align="center"> <img src="http://www.99tyg.com/public/images/e8 ...
- Notepad++配置Python开发环境
1. 安装Python 1 下载 我选择了32位的2.7版本.https://www.python.org/ftp/python/2.7.8/python-2.7.8.msi 2. 安装 安装的时候可 ...
- 1、C#入门第一课
C# 读作C Sharp,所以程序文件的扩展名为.cs 新建项目-窗体应用程序 所谓的Visual C#就是指的可视化编程,主要在设计窗口布置好自己的控件(一些具有一定功能的小部件,例如如可以点击的按 ...
- lua加载动态库缺乏相应的系统库
错误信息: 使用lua测试lm2动态库时,加载时出现如下错误 jfyuan@jfy11-B85M-D2V:~/temp/service/soft/code/ginger_resty/cores/lm2 ...
- TOMCAT如何建立两个端口或服务
近日,一个客户需要将系统放到公网上,局网测试的时候用的8080,但该端口已经被其它应用占用,但又不想更改之前的端口,于是查了下资料,以供后阅 针对客户的这个情况,只是说想增加一个端口,这时只需要去to ...
- ./configure,make,make install的作用(转)
这些都是典型的使用GNU的AUTOCONF和AUTOMAKE产生的程序的安装步骤. ./configure是用来检测你的安装平台的目标特征的.比如它会检测你是不是有CC或GCC,并不是需要CC或GCC ...
- WebApi:使用方法名或者控制器名作为接口地址
今天遇到一个问题:新建的WebApi的项目生成的接口的地址都是以控制器的名字命名的,这样的话,在方法前添加ActionName就不起作用了,但之前一个项目是可以的. 接口代码: public clas ...