Servlet和JSP的区别和分割

HTML

全称 Hyper Text Markup Language超文本标记语言,是一种标记语言。它包含一系列标签.通过这些标签能够将网络上的文档格局对立,使扩散的Internet资源连贯为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令能够阐明文字,图形、动画、声音、表格、链接等,能够对立了解为动态Web资源。

JSP

全称JavaServer Pages动静网页创立规范,部署于网络服务器上,Jsp以Java语言作为脚本,为用户的Http申请提供服务,并且与服务器上的其余Java程序独特解决简单的业务需要,生成动静HTML。

问题:

用户在拜访静态数据(图片,文字...)的时候间接返回动态页面,用户拜访在拜访动态数据的时候须要连贯数据库,进行相应的逻辑解决,拿取用户申请的数据,那么服务器是如何辨认解决逻辑的呢?(通过Servlet)

Servlet

全称Servlet Applet服务器连接器,用Java语言编写的服务器端程序,具备独立于平台和协定的个性,次要性能在于交互式地浏览和生成数据,生成动静Web内容,广义的Servlet是指Java语言实现的一个接口,狭义的Servlet是指任何实现了这个Servlet接口的类,个别状况下,人们将Servlet了解为后者。Servlet运行于反对Java的应用服务器中。从原理上讲,Servlet能够响应任何类型的申请,但绝大多数状况下Servlet只用来扩大基于HTTP协定的Web服务器。

关系和分割

1.Web容器将Jsp编译成了jvm可能辨认的Servlet(Java类),Jsp的实质是Servlet。
2.Jsp侧重于前端的视图,Servlet侧重于逻辑管制。
3.Servlet没有内置对象。
4.Jsp中的内置对象由HttpServletRequest,HttpServletResponse,HttpServlet对象的到。

Servlet我的项目的开发

步骤一:创立Servlet实现Servlet的一个接口或者继承Servlet的子类(GenericServlet/HttpServlet),并实现其办法。



web工程目录文件的阐明

(1) Servlet: 工程名称/项目名称(2) src: 源码目录, 创立的java源文件、配置文件(properties、xml文件等)都能够放在src源码目录下(3) build/classes: 编译文件的输入目录, src源码目录中的文件编译后会输入到classes目录下。    其中的classes目录在公布时会放在WEB-INF目录下,随着我的项目一起公布到服务器中(4) WebContent: 就是Web利用的目录,其中能够寄存 html、css、js、jsp、图片以及编译后的class文件、jar包、web.xml文件等. 未来公布我的项目到服务器,其实就是将WebContent中的所有内容一起公布到服务器中。(5) WebContent/WEB-INF/lib: 用于寄存以后我的项目所依赖的jar包。比方要拜访mysql数据库,须要导入mysql驱动包,间接将jar包拷贝到lib目录下即可!(也不必再去做 build path --> add to build path)
步骤二:创立Web的拜访门路,即配置web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">  <display-name>Servlet</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.htm</welcome-file>    <welcome-file>index.jsp</welcome-file>    <welcome-file>default.html</welcome-file>    <welcome-file>default.htm</welcome-file>    <welcome-file>default.jsp</welcome-file>  </welcome-file-list>  <servlet>    <description></description>    <display-name>ServletDemo</display-name>    <servlet-name>ServletDemo</servlet-name>    <servlet-class>MTingCat.pra.ServletDemo</servlet-class>  </servlet>  <servlet-mapping>    <servlet-name>ServletDemo</servlet-name>    <url-pattern>/ServletDemo</url-pattern>  </servlet-mapping></web-app>

a) Eclipse每创立一个Servlet,就会在web.xml文件中增加两个标签:<servlet>和<servlet-mapping>标签(能够将这两个标签看成一个组的标签)

b) <servlet>和<servlet-mapping>标签内都会有一个<servlet-name>标签,标签的内容能够更改,但要求更改后的这两个<servlet-name>标签的内容也必须统一。

c) <servlet-class>标签用于配置Servlet类的全限定类名(即包名+类名)

须要留神:如果在创立Servlet后批改了Servlet类的名称,这个中央也要一起更改,否则将会呈现"ClassNotFoundException" 即类找不到异样

d) <url-pattern>标签用于配置浏览器以什么门路拜访以后Servlet(即Servlet对外拜访的门路),默认的门路是:/类名

例如:下面为HelloServlet配置的<url-pattern>为/HelloServlet,因而咱们在浏览器中的拜访门路则为:

[http://主机名/web]我的项目拜访门路http://localhost:8089/Servlet/ServletDemo

步骤三:运行于Web端服务器(Tomcat)


步骤四:公布

Servlet申请形式:申请转发和重定向

申请转发

申请转发和重定向指的是服务器外部资源的跳转形式,然而资源的跳转形式有所不同。
申请转发指的是浏览器申请服务器资源的时候,服务器上的ServletA接管申请,再将申请转发给ServletB,由ServletB进行业务逻辑的解决,再生成动静页面做出响应。

申请转发特点

(1)转发是一次申请,一次响应(2)申请转发前后,浏览器的地址栏地址不会发生变化。(浏览器--拜访--> A --转发--> B,地址栏地址始终指向A的地址)(3)申请转发前后的两个资源必须属于同一个Web利用,否则将无奈进行转发。(A--转发-->B,A和B必须属于同一个Web利用!)(4)在转发时,能够带数据到目的地(比方,从A转发到B,能够从A带数据给B,须要配合域对象才能够)
域对象

request在实现转发时,通过request.setAttribute办法和request.getAttribute办法带数据到目的地时,就是通过request对象中的map汇合带数据,这个request对象上的map汇合以及request对象所在的范畴即称之为是一个域对象。

request.setAttribute(String attrName, Object attrValue);-- 往request域中存入一个域属性,属性名(key)只能是字符串,属性值(value)能够是任意类型。request.getAttribute(String attrName);-- 依据属性名(key)获取对应的属性值(value)。返回的是一个Object类型的对象。
域对象的特色
生命周期

从一次申请开始到做出响应:在服务器调用Servlet程序的service办法之前,会创立代表申请的request对象,在申请解决完,响应完结时,会销毁request对象。

作用范畴

在一次申请范畴内,能够通过request域带数据到目的地。

次要性能

和申请转发配合应用,从Servlet带数据到JSP(带数据到目的地)

实现
request.getRequestDispatcher(url地址/转发到资源的地址).forward(req, res);

重定向

重定向指的是浏览器再拜访服务器的资源时,不能间接失去想要的数据,而是拿到服务器返回的数据,再一次拜访服务器拿到数据。

重定向特点
(1)重定向是两次申请、两次响应(2)重定向前后,浏览器的地址栏地址会发生变化。(因为两次申请都是通过浏览器发动,浏览器晓得这个跳转的过程,因而地址栏地址会变动)(3)重定向前后的request对象不是同一个(因为重定向是两次申请,服务器会依据两次申请创立两个不同的request对象,request对象不是同一个,也就不能在重定向时通过request带数据到目的地。)(4)重定向前后的两个资源能够是来自不同的web利用,甚至能够是来自不同的服务器。(进行跳转的两个资源之间没有限度)
实现
response.sendRedirect(所重定向到资源的URL地址);
总结:申请转发(forward)和重定向(redirect)的区别?
(1)申请转发是一次申请,一次响应; 而重定向是两次申请两次响应(2)申请转发前后地址栏地址不会发生变化; 而重定向前后地址栏地址会发生变化(3)申请转发前后的request对象是同一个,能够配合request域对象带数据到目的地; 而重定向前后的request对象不是同一个, 不能联合request域对象在重定向前后带数据.(4)申请转发要求两个资源必须属于同一个Web利用; 而进行重定向的两个资源能够是同一个Web利用,也能够不是同一个Web利用,甚至能够是来自于不同的主机或服务器.
总结:什么时候用申请转发(forward)?什么时候用重定向(redirect)?
(1)如果心愿跳转前后地址栏地址不会发生变化, 只能应用转发; 如果心愿跳转前后地址栏地址会发生变化, 只能应用重定向(2)如果心愿在跳转前后, 可能通过request对象带数据到目的地, 只能应用转发(3)如果仅仅是做一个跳转,没有其余要求,此时举荐应用转发(转发是一次申请,一次响应,能够缩小拜访服务器的次数,升高服务器的压力)

Servlet模板的创立

配置好Servlet的模板之后,每次须要创立时只须要输出servlet,Alt+/就能够。

package ${enclosing_package};import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * author: MTingCat@tedu.cn * datetime: ${date} ${time} */public class ${primary_type_name} extends HttpServlet {    private static final long serialVersionUID = 1L;           protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        response.setContentType("text/html;charset=utf-8");        PrintWriter out = response.getWriter();    }    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        doGet(request, response);    }}