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); }}