servlet被什么替代了 jsp被什么取代了学什么
很多朋友对于servlet被什么替代了和jsp被什么取代了学什么不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
servlet是什么
在 JavaWeb项目中,处理请求和发送响应的过程是由一种叫做 Servlet的程序来完成的,并且 Servlet是为了解决实现动态页面而衍生的东西。
简单来讲:Servlet其实就是一个遵循Servlet开发的java类,Serlvet是由服务器调用的,运行在服务器端。
一张图描述 Servler在 B/S中的作用点:
2. Tomcat和 Servlet的关系
Tomcat是Web应用服务器,是一个Servlet/JSP容器。 Tomcat作为 Servlet容器,负责处理客户请求,把请求传送给 Servlet,并将 Servlet的响应传送回给客户,而 Servlet是一种运行在支持 Java语言的服务器上的组件。
Servlet最常见的用途是扩展 Java Web服务器功能,提供非常安全的、可移植的、易于使用的 CGI替代品。
从 Http协议中的请求和响应可以得知,浏览器发出的请求是一个请求文本,而浏览器接收到的也应该是一个响应文本。但是在上面这个图中,并不知道是如何转变的,只知道浏览器发送过来的请求也就是 request,我们响应回去的就用 response。忽略了其中的细节,现在就来探究一下。
①:Tomcat将 Http请求文本接收并解析,然后封装成 HttpServletRequest类型的 request对象,所有的 Http头数据读可以通过request对象调用对应的方法查询到。
②:Tomcat同时会要响应的信息封装为 HttpServletResponse类型的response对象,通过设置 response属性就可以控制要输出到浏览器的内容,然后将 response交给 Tomcat,Tomcat就会将其变成响应文本的格式发送给浏览器。
Java Servlet API是Servlet容器(tomcat)和servlet之间的接口,它定义了Serlvet的各种方法,还定义了 Servlet容器传送给 Servlet的对象类,其中最重要的就是 ServletRequest和 ServletResponse。所以说我们在编写Servlet时,需要实现 Servlet接口,按照其规范进行操作。
3. Servlet接口主要方法
Servlet接口主要的 3个方法:
init()方法:只会调用一次,只是在创建servlet实例的时候才会创建。
service()方法:是进行数据处理的,只要接受了一次请求,就会被调用一次
destroy()方法:销毁 Servlet对象的时候调用。停止服务器或者重新部署 Web应用时销毁 Servlet对象,同样也是调用一次
4.编写 Servlet
首先说明一点疑惑,有时候我们在一些资料上看到别人这样写:
publicclassTestServletimplementsServlet{
init()...
service()...
getServletConfig()...
...
}
而在这我们要继承 HttpServlet类那么问题来了,继承HttpServlet和实现Servlet有什么区别?
首先,直观的不同,Servlet是一个接口,如果实现这个接口,那么就必须实现接口里面定义的所有方法。
而 HttpServlet实现了 Servlet接口,并把 Servlet接口中的方法实现了。
继承 Httpservelt,实际上也就实现了 Servlet接口。
但是我们没必要再去实现 Servlet中定义的生命周期方法,因为在 Httpservlet中已经有了默认实现,并且这些默认实现也挺规范和实用, doget和 dopost是执行用户请求的终点,get请求会调用 doget方法,post请求会执行 dopost方法,我们可以在这2个方法中定义我们自己的业务逻辑。
最后,HttpServlet在实现 Servlet接口的时候,已经实现了 Servlet中所有的方法,因此继承自 HttpSrvlet的类,不需要再去覆写相应的生命周期等方法。
4.1编写Java类,继承HttpServlet
创建一个 MyServlet java类,继承 HttpServlet实现 service方法:
publicclassMyServletextendsHttpServlet{
@Override
protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{
//设置字符编码
request.setCharacterEncoding("utf8");
//从request对象中获取username,password
Stringusername=request.getParameter("username");
Stringpassword=request.getParameter("password");
request.setAttribute("username",username);
request.setAttribute("password",password);
request.getRequestDispatcher("/index2.jsp").forward(request,response);;
}
}
4.2配置web.xml文件
web.xml配置 Servlet访问路径,能让别人通过链接访问到你的 Servlet:
<web-app>
<display-name>ArchetypeCreatedWebApplication</display-name>
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>club.sscai.demo.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
</web-app>
4.3 jsp界面显示
index2.jsp:
<html>
<body>
<h2>2222222</h2>
username:<%=request.getParameter("username")%>
<br>
password:<%=request.getParameter("password")%>
</body>
</html>
Web Service和Servlet的区别
最近项目中有提供或者调用别的接口,在纠结中到底是用servlet还是用webservice,所以上网查看了下他们以及RMI之间的区别,方便加深了解。
首先比较下servlet和webservice下
请求:
servlet:提供了请求/响应模式,是JAVA的一种规范,只能使用于java上,用来替代早期使用的难懂的CGI,是一种无状态的请求响应,客户端访问一个服务器的url,只需要发送简单的httprequest即可。规定了四个范围:pageContext、request、session、application。一定依赖于各种SERVLET容器,但servlet只能接受一个简单的http请求;
WebService最早是微软提出了一种以XML为载体网络信息传输的规范,现在几乎所有的语言与平台都支持,带有状态机制,不依赖于SERVLET容器,可以发送一个xml作为其请求内容,WebService通常是基于http的远程方法调用(RMI),号称是可以反回远程对象,一般来说客户段可以象调用本地方法一样调用WebService的方法。
传输:
servlet使用http协议传输数据,如果你用Servlet返回XML,那个XML的描述框架就是你定的,必须告知使用者具体的说明,没有统一标准。
webservice使用固定的XML格式封装成soap消息,可以使用http作为底层数据传输,但并不局限于http协议,方法返回消息是有标准的。
返回结果:
servlet返回的是html页面;
webservice返回的可以是复杂对象甚至使用附件或者mutidata的二进制文件。
部署:
servlet需要遵守j2ee的Web Application规范部署的应用服务器上,如tomcat,weblogic,websphere;
WebService则需要有WSDL文件来部署服务,或者使用UDDI注册。
优势:
WebService的跨平台特性是servlet不能比的,可以被各种语言调用;
servlet相对来说速度上的优势也是不可忽视的。
接下来在看看RMI和webservice中的
rmi的客户端和服务端都必须是java,webservice没有这个限制
webservice是在http协议上传递xml文本文件,与语言和平台无关
rmi是在tcp协议上传递可序列化的java对象,只能用在java虚拟机上,绑定语言
RMI是EJB远程调用的基础,仅用RMI技术就可以实现远程调用,使用EJB是为了实现组件,事物,资源池,集群等功能。
WebService是通过XML来传输数据,可用http等协议因此可在异构系统间传递,并且可以穿过防火墙,可在公网上远程调用
Jsp和servlet有那些相同点和不同点,他们之间的联系是什么
简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。
后来SUN推出了类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。
从网络三层结构的角度看,一个网络项目最少分三层:data layer,business layer, presentation layer。当然也可以更复杂。SERVLET用来写business layer是很强大的,但是对于写presentation layer就很不方便。JSP则主要是为了方便写presentation layer而设计的。当然也可以写business layer。写惯了ASP,PHP,CGI的朋友,经常会不自觉的把presentation layer和business layer混在一起。就象前面那个朋友,把数据库处理信息放到JSP中,其实,它应该放在business layer中。
根据SUN自己的推荐,JSP中应该仅仅存放与presentation layer有关的东东,也就是说,只放输出HTML网页的部份。而所有的数据计算,数据分析,数据库联结处理,统统是属于business layer,应该放在JAVA BEANS中。通过JSP调用JAVA BEANS,实现两层的整合。
实际上,微软前不久推出的DNA技术,简单说,就是ASP+COM/DCOM技术。与JSP+BEANS完全类似,所有的presentation layer由ASP完成,所有的business layer由COM/DCOM完成。通过调用,实现整合。
为什么要采用这些组件技术呢?因为单纯的ASP/JSP语言是非常低效率执行的,如果出现大量用户点击,纯SCRIPT语言很快就到达了他的功能上限,而组件技术就能大幅度提高功能上限,加快执行速度。
另外一方面,纯SCRIPT语言将presentation layer和business layer混在一起,造成修改不方便,并且代码不能重复利用。如果想修改一个地方,经常会牵涉到十几页CODE,采用组件技术就只改组件就可以了。
综上所述,SERVLET是一个早期的不完善的产品,写business layer很好,写presentation layer就很臭,并且两层混杂。
所以,推出JSP+BAEN,用JSP写presentation layer,用BAEN写business layer。SUN自己的意思也是将来用JSP替代SERVLET。
可是,这不是说,学了SERVLET没用,实际上,你还是应该从SERVLET入门,再上JSP,再上JSP+BEAN。
强调的是:学了JSP,不会用JAVA BEAN并进行整合,等于没学。大家多花点力气在JSP+BEAN上。
在补充几句:
我们可以看到,当ASP+COM和JSP+BEAN都采用组件技术后,所有的组件都是先进行编译,并驻留内存,然后快速执行。所以,大家经常吹的SERVLET/JSP先编译驻内存后执行的速度优势就没有了。
反之,ASP+COM+IIS+NT紧密整合,应该会有较大的速度优势呈现。而且,ASP+COM+IIS+NT开发效率非常高,虽然BUG很多。
那么,为什么还用JSP+BEAN?因为JAVA实在前途远大。微软分拆后,操作系统将群雄并起,应用软件的开发商必定要找一个通用开发语言进行开发,JAVA一统天下的时机就到了。如果微软分拆顺利,从中分出的应用软件公司将成为JAVA的新领导者。目前的JAVA大头SUN和IBM都死气沉沉,令人失望。希望新公司能注入新活力。不过,新公司很有可能和旧SUN展开JAVA标准大战,双方各自制定标准,影响JAVA夸平台。
另外,现在的机器速度越来越快,JAVA的速度劣势很快就可以被克服。
关于servlet被什么替代了的内容到此结束,希望对大家有所帮助。