1.servlet解说?https://blog.csdn.net/qq_19782019/article/details/80292110
servlet工作模式:
客户端发送请求至服务器
服务器启动并调用Servlet,Servlet根据客户端请求生成响应内容并将其传给服务器
服务器将响应返回客户端
Servlet技术的核心是Servlet,它是所有Servlet类必须直接或者间接实现的一个接口。
public class MyFirstServlrt implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("Servlet正在初始化");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//专门向客服端提供响应的方法
System.out.println("Servlet正在提供服务");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("Servlet正在销毁");
}
}
工作原理
Servlet接口定义了Servlet与servlet容器之间的契约。这个契约是:Servlet容器将Servlet类载入内存,并产生Servlet实例和调用它具体的方法。但是要注意的是,在一个应用程序中,每种Servlet类型只能有一个实例。
用户请求致使Servlet容器调用Servlet的Service()方法,并传入一个ServletRequest对象和一个ServletResponse对象。ServletRequest对象和ServletResponse对象都是由Servlet容器(例如TomCat)封装好的,并不需要程序员去实现,程序员可以直接使用这两个对象。
ServletRequest中封装了当前的Http请求,因此,开发人员不必解析和操作原始的Http数据。ServletResponse表示当前用户的Http响应,程序员只需直接操作ServletResponse对象就能把响应轻松的发回给用户。
对于每一个应用程序,Servlet容器还会创建一个ServletContext对象。这个对象中封装了上下文(应用程序)的环境详情。每个应用程序只有一个ServletContext。每个Servlet对象也都有一个封装Servlet配置的ServletConfig对象。
Servlet 接口中定义的方法
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
Servlet 的生命周期
其中,init( ),service( ),destroy( )是Servlet生命周期的方法。
1.init( ),当Servlet第一次被请求时,Servlet容器就会开始调用这个方法来初始化一个Servlet对象出来,但是这个方法在后续请求中不会在被Servlet容器调用,就像人只能“出生”一次一样。我们可以利用init( )方法来执行相应的初始化工作。调用这个方法时,Servlet容器会传入一个ServletConfig对象进来从而对Servlet对象进行初始化。
2.service( )方法,每当请求Servlet时,Servlet容器就会调用这个方法。就像人一样,需要不停的接受老板的指令并且“工作”。第一次请求时,Servlet容器会先调用init( )方法初始化一个Servlet对象出来,然后会调用它的service( )方法进行工作,但在后续的请求中,Servlet容器只会调用service方法了。
3.destory,当要销毁Servlet时,Servlet容器就会调用这个方法,就如人一样,到时期了就得死亡。在卸载应用程序或者关闭Servlet容器时,就会发生这种情况,一般在这个方法中会写一些清除代码。
Servlet 的其它两个方法
getServletInfo( ),这个方法会返回Servlet的一段描述,可以返回一段字符串。
getServletConfig( ),这个方法会返回由Servlet容器传给init( )方法的ServletConfig对象。
servlet中service() doGet() doPost() 方法
在servlet中默认情况下,无论你是get还是post 提交过来 都会经过service()方法来处理,然后转向到doGet 或是doPost方法,我们可以查看HttpServlet 类的service方法如下
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String method = req.getMethod();
if (method.equals(METHOD_GET)) {
...
doGet(req, resp);
...
} else if (method.equals(METHOD_HEAD)) {
long lastModified = getLastModified(req);
maybeSetLastModified(resp, lastModified);
doHead(req, resp);
} else if (method.equals(METHOD_POST)) {
doPost(req, resp);
} else if (method.equals(METHOD_PUT)) {
doPut(req, resp);
} else if (method.equals(METHOD_DELETE)) {
doDelete(req, resp);
} else if (method.equals(METHOD_OPTIONS)) {
doOptions(req,resp);
} else if (method.equals(METHOD_TRACE)) {
doTrace(req,resp);
} else {
...
}
}
可见tomcat实现的service方法只是起到了调度请求的作用
如果我们重写了service方法, 父类HttpServlet中的service方法就会失效
那么这时service就不是用来转向的,而是用来处理业务的,现在不论你的客户端是用pos还是get来请求此servlet
都会执行service方法也只能执行servlet方法,不会去执行doPost或是doGet方法。
2.webservice解说?
WebService是一种跨编程语言和跨操作系统平台的远程调用技术。
比如银行端接口基本都是C语言编写,或者财政提供了接口,而银行想要远程调用,假若后端采用Java语言,那么如果想要调用这些接口,WebService就是很好的调用技术之一!
soap:简单对象访问协议 SOAP有助于以独立于平台的方式访问对象、服务和服务器
XML+XSD:WebService平台中表示数据的格式是XML, xsd 定义了一套标准的数据类型,并给出了一种语言来扩展这套数据类型
wsdl:基于XML用于描述Web Service及其函数、参数和返回值的文件
4、如何发布一个webservice?
A.定义SEI(接口) @webservice(类) @webMethod(暴露的方法)
B.定义SEI的实现
C.发布Endpoint.publish(url,new SEI的实现对象)
5、如何请求一个webservice?
A.根据wsdl文档生成客户端代码
jdk wsimport -keep wsdl路径
cxf wsdl2java wsdl路径
B.根据生成的代码调用webservice
找到wsdl文档中service标签的name属性对应的类,找到这个port标签的name属性,调用该方法即可
3.jdbc 加载机制? jdbcTemplate 解说? https://www.cnblogs.com/wrkjwl/p/9107954.html https://www.cnblogs.com/cage666/p/7295382.html
用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问
安装好数据库之后应用程序是不能直接使用数据库的,必须要通过相应的数据库驱动程序去和数据库打交道。其实也就是数据库厂商对JDBC接口的实现,即对Connection等常用接口的实现类的jar文件。
加载JDBC驱动程序 →建立数据库连接Connection → 创建执行SQL的语句Statement → 处理执行结果ResultSet → 释放资源
**
既然JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,
可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
而多的这个template,就是模板,是Spring框架为我们提供的.
所以JDBCTemplate就是Spring对JDBC的封装,通俗点说就是Spring对jdbc的封装的模板
//二者工作原理
JDBC的原理就是通过Connection这个类获取数据库的连接,
然后通过PreparedStatement类处理SQL语句,再通过它的.setObject方法传入数据,
最后通过方法.executeUpdate()和.executeQuery()执行更新,这就是JDBC的基本原理。
JDBCTemplate帮我们省去了很多麻烦.
②指定数据库连接参数.
打开数据库连接.
预编译并执行SQL语句.
遍历查询结果(如果需要的话).
处理抛出的任何异常.
处理事务.
关闭数据库连接
那么JDBCTemplate怎么做到的,这就和spring有关系了
SpringIOC容器将管理数据库连接的数据源当作普通Java Bean一样管理,
然后将数据源注入封装类JdbcTemplate中,:
JdbcTemplate的dataSource属性就是注入配置的数据源
JdbcTemplate对JDBC的差别在哪,即JdbcTemplate相较于jdbc的优点在哪里?
jdbc需要每次进行数据库连接, 然后处理SQL语句,传值,关闭数据库.
甚至有时还可能会出现数据库忘记关闭导致连接被占用.
在以后的工作中,客户的需求肯定不是一成不变的,这就导致经常会改动数据库内容.
通过JDBCtemplate我们只需更改需要更改的那一部分内容就可以了,不需要进行全局修改.
Spring将替我们完成所有的JDBC底层细节处理工作.