JavaWeb
B/S与C/S的区别
1, 从安装上来讲,B/S只需要在服务器端安装即可,而C/S却需要每一个客户端进行安装。 2, 从部署上来说,B/S只需要服务器能够支持即可,而C/S却对每一个客户端的电脑提出
了要求。
3, 从升级,维护角度来说,B/S只需要在服务器端升级维护即可,像网易的邮箱,而C/S
却是服务器更新维护一次,客户端就要下载相关的补丁才能使用
4, 从安全性来讲,B/S是基于服务器的,较之C/S安全性好
5, 从本质上来说,B/S是基于请求驱动的,即客户端发送一个Http请求,然后服务器进行
处理之后,响应给客户端,而C/S却是基于事件驱动的,像腾讯的QQ。
6, 从耦合度来讲,B/S与服务器端耦合,而C/S却是与客户端的操作系统进行耦合。 但是Client/Server(从游戏的角度来讲)较之Brows/Server具有优质的画面。
Servlet的使用步骤:
1, 创建一个JAVA类,存放在com.fit.servlet包中,并且此类extends HttpServlet类,才能
成为一个Servlet
2, 覆写doGet()和doPost()方法
3, 最后,在web.xml文件中进行Servlet配置。具体的配置如下:
<servlet>
<servlet-name>Servlet类名</servlet-name>
<servlet-class>完整的包.类名称</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet类名</servlet-name>
<url-partten>网页访问的名称,例如/hello</url-partten>
</servlet-mapping>
Servlet的生命周期,作用,并说出和CGI(Common Gateway Interface)的区别
就是指Servlet从创建出实例对象到销毁的过程。它是一个容器,负责创建实例来接受客户端的请求,并且以多线程的方式响应给客户。具体过程如下:
Servlet被服务器实例化之后,容器运行其init方法进行初始化,请求到达时运行其service方法,在此过程中仅创建一个对象,然后service方法自动调用与请求相应的doXxx方法,当服务器决定将实例进行销毁时,再调用其destroy方法。
与CGI(通用网关接口)的区别在于,Servlet处于服务器进程中,它通过多线程的方式运
行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每一个请求都产生新的进程,服务完成后就销毁,所以效率低于Servlet
作用:可以用来进行接收客户端的请求,也可以进行请求流的控制。
Http协议:(了解)
首先它是(Hypertext Transfer Protocol)超文本传输协议。 HTTP报文由从客户机到服务器的请求和从服务器到客户机的响应构成。请求报文格式如下:
请求行 - 通用信息头 - 请求头 - 实体头 - 报文主体
请求行以方法字段开始,后面分别是 URL 字段和 HTTP 协议版本字段,并以 CRLF 结尾。
应答报文格式如下:
状态行 - 通用信息头 - 响应头 - 实体头 - 报文主体
状态码元由3位数字组成,表示请求是否被理解或被满足。原因分析是对原文的状态码作简短的描述,状态码用来支持自动操作,而原因分析用来供用户使用。客户机无需用来检查或显示语法。
工作流程: 一次HTTP操作称为一个事务,其工作过程可分为四步:
首先客户机与服务器需要建立连接。只要单击某个超级链接,HTTP的工作就开始了。
建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符、客户机信息和可能的内容。
服务器接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括服务器信息、实体信息和可能的内容。
客户端接收服务器所返回的信息通过浏览器显示在用户的显示屏上,然后客 户机与服务器断开连接。
Javascript的作用:
1, 进行验证(通过正则表达式,在css+HTML的部分特性进行浏览器端的格式验证工
作)
2, 进行交互(将客户端的一个请求通过JavaScript可以发送到服务器端,也可以在
浏览器端进行人机的交互,突破了以前静态页面的交互性限制)
3, 进行特效的处理,如走马灯,时间时钟。
Servlet生命周期:(详细)
是指Servlet实例从被创建到其消失(对象销毁,回收)中间的时间及各个阶段,称之为Servlet生命周期。
前提:web服务器加载类。之后执行以下过程:
1,实例化:Servlet容器创建Servlet实例,具体就是当接收到客户端的第一次请求时,Servlet容器负责创建Servlet的一个实例。且在此过程中仅创建一个实例,通过多线程的方式响应客户端的请求
2,初始化:该容器调用init()方法。
3,服务:当请求到达时,该Servlet容器自动调用server()方法,根据客户端发送请求的方式,选择doXxx()方法执行
4,销毁:当web服务器被卸载的时候,调用destroy()方法进行对象的销毁。
请看以下的一段代码:
package com.fit.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
public Test() {
super();
System.out.println("===========================");
}
public void destroy() {
System.out.println("对象被销毁!");
}
public void init() throws ServletException {
System.out.println("对象初始化!");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("get方法执行");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
throws ServletException, IOException {
System.out.println("服务开始启动了!");
super.service(arg0, arg1);
}
}运行效果如下:
===========================
对象初始化!
服务开始启动了!
get方法执行
2011-7-19 12:07:04 org.apache.catalina.core.StandardContext reload 信息: Reloading this Context has started
对象被销毁!
分析原因:
1,实例化对象发生在客户端请求第一次到达的时候,而不是类被加载的时候。
2,对象只被实例化一次.
3,如果service()被覆写的话,则调用的时候加入super.service(arg0, arg1);这句话时候才可以清楚的调用的doXxx()方法,如果不加入此句话,那么将不会执行doGet()方法。所以一般不要覆写service()方法。只需要覆写doGet()和doPost()方法。
4,当web服务器被卸载的时候,将执行destroy()方法。进行对象的销毁!
Jsp页面构成元素,Jsp跟Html的区别,优势 Jsp定义:(Java Server Page)Java服务器端语言,组成如下:
1, 静态模板:由HTML,css,JavaScript等元素构成。
2, 指令:设定网页元素的属性,用于提供这个歌JSP网页的相关信息。
3, 脚本元素--声明:<%!...%>,在此之中可以进行变量,常量的定义,类,方法都可
以声明,但是一般不用。
4, 脚本元素--Java脚本:<%...%>,在此期间可以进行Java代码的拼写。 5, 脚本元素--表达式:<%= ..%>,用于表达式输出时使用。
6, 动作:利用JSP动作可以重用JavaBean组件,可以动态的包含页面,也可以进行
服务器端的跳转(即将用户的请求转发给其他的页面)。
7, 注释:
--HTML注释:<!-- -->,此种注释可以在页面中看到,成为客户端注释。 --Jsp注释:<%-- --%>,此种注释在页面中看不到,也成为服务器端注释。 --Java注释:
?单行注释://
?多行注释:/*???*/
Jsp优点:使用HTML,CSS等技术构建页面的模板部分,用Java语言根据用户的输入动态生成可变的内容部分。既可以实现HTML控制页面布局,也亦可以实现Servlet的功能,实现了内容与表示分离。
Jsp的常见指令,并说出静态包含和动态包含的区别 Page指令:<%@ page language=”java” import=” 完整的包.类名称”
autoFlush=”true[false]” errorPage=”文件名” isErrorPage=”false[true]” isThreadSafe(设置是否能多线程使用)
contentType=”text/html;charset=ISO-8859-1” %>
包含指令:<%@ include file=”文件名”%>
taglib指令:此指令用于在Jsp页面中引入用户自定义的标签库。例如: <@% taglib url=/jsp/jstl/core prefix=”c”%> 静态包含跟动态包含的区别:
<%@ include file=”文件名%>,此包含属于静态包含,是指先将文件包含进来然后在进行编译,编译后生成的class文件中,被包含的文件在静态块中。且此种包含不允许带参数。
<jsp: include page=”文件名”flush=”true”>此种包含属于动态包含,先解释再包含进来结果,即只有在客户端进行请求时才会被动态的编译载入,在生成的class类中,它被请求一次就被创建一次。且此种被包含页面可以取得包含它的页面的参数。 Jsp常见的动作, ?调用JavaBean相关:
?<jsp:useBean id=”对象名” class=”类名”scope=“范围属性”>,调用此动作,可以用于实例化JavaBean,或者定位一个已经存在的JavaBean的实例,并把实例的引用赋给一个变量。
?<jsp:getProperty property=”属性名字”name=”对象”>,通过这个动作可以取得JavaBean对象的属性
?<jsp:setProperty proterty=”属性名字” name=”对象” value=”属性值”>或者<jsp:setProperty proterty=”属性名字” name=”对象”param=”索引参数”>通过此动作,可以用来设置JavaBean的简单属性和索引属性,此动作的name属性必须与<jsp:userBean>总的id属性相匹配。 当JavaBean的属性名与请求参数名相同的情况下,可以使用property=“*”的方式为多个JavaBean的属性同时赋值,如:<jsp:setProperty name=”BeanId” property=”*”>
?jsp页面通信:
?<jsp:include page=”页面”>:此动作用来在当前Jsp包含动态和静态文件的输出结果,可以和<jsp:param name=”” value=””>配合使用,向嵌入的Jsp页面传递参数
?<jsp:forward page=”页面”>:此动作用来从当前Jsp页面转向其他页面,并传递Request对象,response对象,该标签后面的代码将不会被执行。
Jsp的内置对象,四种作用域的通信对象的范围 ?输入/输出对象
?request:表示客户端对网页的请求
?response:用于处理Jsp生成的响应,使用Http协议将响应发送给客户端。
?out:表示从response中取得的输出流。常用的方法有write(),print(),println()等,用于在页面中输出文本形式的响应内容
?作用域通信对象
?pageContext:此通信对象的作用域仅在当前页面有效,一旦跳转则不可用
?request:此通信对象的作用域针对的同一个客户的请求,如果不是同一个请求则不可以使用
?session:此通信对象的作用域适用于一次会话,即打开的同一个浏览器的所有页面都可以适用
?application:此通信对象的作用域适用于基于WEB服务器的所有会话,适用于监听器 ?Servlet对象
?page:指向当前Jsp页面经过转译(jsp?.java文件),编译(.java文件?.class文件)后的对象本身,即编译后的Servlet对象本身
?config:是在一个Servlet初始化时,服务器向它传递的初始化信息。初始化信息可以在web.xml中找到。
?错误对象
?execption:表示Jsp页面运行时抛出的异常对象,可以在专门准备的错误处理页面中访问这个异常对象。
Jsp执行过程:
?jsp文件转译:当客户端请求一个正确的Jsp文件时,将Jsp—>.java文件(即将Jsp文件翻译成相应的Servlet类的源文件)
?编译:.java文件?.class文件,即将Servlet类的源文件进行编译成为.class的Servlet文件。 ?调用Servlet的service()方法响应用户的请求。
描述Jsp和Servlet的区别,共同点,各自的应用范围: 1,从发展上来看,Jsp可以避开Servlet的输出页面的繁琐步骤,它集合了HTML和Servlet的优点。
2, 从本质上来说,Jsp是Servlet的扩展,它是Servlet的简易形式。Jsp经过转译之后就成为了类Servlet。
3, 从创建方式上来说:Jsp由HTML代码和JSP标签构成,而Servlet则完全是由程序代码构成擅长于流程控制和事务处理的类
4, 从使用角度来说:在MVC中,Jsp担任的是VIEW层,侧重于视图,而Servlet则充当的控制层,侧重于控制逻辑。
请求转发和重定向
? response.sendRedirect():利用response对象向客户端发回一个响应指示其访问其他URL资源,或者说是一个web组件向另一个web组件发送一个新的请求,属于重定向,地址栏有变化。且不可以传递属性request参数,当所有的代码执行完之后才进行重定向。 ?request.getRequestDispatcher().forword(req,resp):web组件将一个请求转发给另一个web组件,他们始终是同一个请求,在此期间可以传递request属性参数,地址栏没有变化。且一执行到此代码处 ,后边的将不再执行
JavaBean的组成:
?类必须是具体的,公共的。
?提供无参数的构造方法
?提供getter()和setter()方法访问它的属性。
版权所有@杨肖飞yangxf159371@126.com