java desktop and web,JavaWEB之Jsp基础知识总结

理论

第一章 javaWEB基础

1、桌面应用程序一般分为两种

B/S(Browser/Server)客户端浏览器和服务器

C/S(Client/Server)客户端和服务器端

2、WEB开发指的是

开发部署在远程服务器上的应用程序,该应用程序可以用浏览器访问

WEB应用是基于HTTP(Hyper text transfer protcol ,超文本传输协议)的

而HTTP又是基于TCP/IP协议。客户端浏览器发送相关请求(request)道远程web服务器,又

远程服务器效应然后返回请求(response)响应并传输给客户端浏览器

3、HTTP请求的方法主要有

请求行(request line)

请求头(request header)

请求体 (request body)

get:直接由浏览器地址发送url(可以包含查询字符串,查询字符串有长度限制(64kb))

post:把由原来可以通过查询字符串发送到服务器上的数据改为http请求主体部分

(没有数据大小限制,并且相对来说更安全,适用于提交form表单)

用的较少的有put和delete

表单中action表示web服务器端用于接收此表单数据的页面

method采用哪一种http请求方法

4、JSP WEB服务器(又叫做WEB容器):用于存储html,jsp,servlet和其他一些web组件

5、Tomcat目录结构

bin:用于存放一些Tomcat提供的命令

conf:Tomcat server的一些默认配置

logs:用于存放一些日志文件的目录

webapps:用于存储web应用(WEB应用部署的目录)

work:web引用的临时目录

7、如何部署jspWEB应用

在webapps目录下创建一个文件夹,该文件夹是用于存储jsp页面的,然后再该目录下创建

jsp页面,并创建WEB-INF目录,然后在WEB-INF目录下创建web.xml应用描述文件

然后在conf目录下的server.xml文件中b的标签内添加标签

1)、path表示url访问时所指定的应用名称:

2)、docBase指明整个应用文件的位置(备注:该位置相对与webapps这么目录)

3)、debug表示调试等级

4)、reloadable表示重启tomcat是是否重新加载

8、如何手动打包一个WAR包,并部署

创建一个web项目,进入到该目录下,使用java -cvf 项目名.war 生成一个包含有web.xml和WEB-INF目录的war包

9、jsp的执行过程

1、browser发送request请求

2、jsp页面由JSP parser转换成Servlet.java文件

在_jspService方法由out.write方法输出JSP页面中的内容

3、由web容器和jdk吧Servlet.java文件编译成.class字节码文件

4、执行.class字节码文件生成response响应并传输给browser(浏览器)

第二章 JspServlet

1、Servlet的优点有

1、移植性好

2、功能强大

3、性能好

4、可靠安全

2、Servlet包结构

javax.Servlet.提供了基本的servlet基本库,抽象类和接口

javax.Servlet.http.扩展和继承了javax.Servlet.中的一些类和接口

如何插件一个我们自己的servlet:

public abstract interface Servelt{

//得到ServletConfig的初始化信息和启动参数

ServlettConfig getServletConfig();

//被servlet容器调用,并根据初始化信息来创建一个servlet实例

void init(ServletConfig servletConfig)throwsException;

//接收用户请求并返回用户信息

void service(ServletRequest servletRequest ,ServletResponse servletResponse)

//返回Servlet相关信息,包括作者,版本,版权等

String getServletInfo()

//被Servlet容器调用,当该servlet不用的时候释放掉所占有的所有资源

void destroy()

}

总结:

1、Servlet接口只定义了servlet和客户端联系的方法并没有具体的实现

2、Servlet开始接收客户请求前由servlet容器调用init()方法对其初始化并将该实例放到了服务器中

3、Service()方法被servlet容器调用接受客户的请求处理

1)、ServletRequest类:包含客户端的请求信息

2)、ServletResponse类:包含例客户端做出的相应

该方法会抛出ServletException和IOException两个异常

4、当Servlet实例长期不用,将被servlet容器通过垃圾处理器回收,并释放其所占的资源

3、javax.servlet.Servlet接口的派生类

//该类实现了Servlet接口并实现了部分方法,当创建普通的和HTTP无关的操作是可以通过是可以通过继承该类来创建新的servlet

javax.servlet.GenericServlet

该类继承了GenericServlet,并新增了HTTP有关的几种操作

javax.servlet.http.HttpServlet

//用来处理Http get请求

doGet(HttpServletRequest request, HttpServletResponse response);

//用来处理Http post请求

doPost(HttpServletRequest request, HttpServletResponse response);

// 用来处理Http请求的,可以处理get, post,delete

service(HttpServletRequest request, HttpServletResponse response);

4、如何创建及配置Servlet

1、新建Java类,继承javax.Servlet.http.HttpServlet

2、实现service(HttpServletRequest servletRequest ,HttpServletResponse

servletResponse)throwservletException,IOException;

3、进入WEB-INF目录,更新web.xml文件,增加Servlet描述信息,告诉web容器已经创建了一些Servlet

4、servlet说明:

5、servlet url匹配:

5、Servlet生命周期

1)、在web容器启动时,调用initial(ServletConfig)方法初始化Servlet

2) 、由响应的Http请求方法或者service()方法处理请求并返回响应

3)、当servlet使用时,web容器调用destroy()方法销毁servlet

6、jsp的工作原理是什么?

答:在一个jsp文件第一次被请求时,jsp引擎把该jsp文件转换成servlet,而servlet则是一个java原文件,如果转换时发现jsp文件有语法错误转换过程将中断

并向服务端或者客户端发出错误信息否则则转换成功,jsp引擎用javac把该java文件编译成相应的class文件,然后通过构造方法创建一个servlet实例该实例的jspinit方法被执行

jspinit在整个servlet的生命周期只被执行一次。然后jspService方法被调用来执行客户端浏览器的请求。对于每一个请求jsp引擎都会创建一个新的线程来处理该请求由于servlet

始终驻留在内存中所以需要是非常快的。如果.jsp文件被修改,服务器根据设置决定是否将该文件重新编译,如果需要重新编译,则将编译结果取代内存中的servlet,并继续上述处理过程。虽然JSP效率很高,但在第一次调用时由于需要转换和编译而有一些轻微的延迟。此外,如果在任何时候如果由于系统资源不足的原因,JSP引擎将以某种不确定的方式将servlet从内存中移去。当这种情况发生时jspDestroy()方法首先被调用, 然后servlet实例便被标记加入"垃圾收集"处理。 jspInit()及jspDestory()格式如下:可在jspInit()中进行一些初始化工作,如建立与数据库的连接,或建立网络连接,从配置文件中取一些参数等,在jspDestory()中释放相应的资源

7、三层WEB结构是哪三层?并解释每一层的作用?

答:分别是:数据层,表示层,业务层

数据层:用于与数据打交道

表示层:用户显示的表示层

业务层,表示层与业务层的桥梁

三层的好处在于表示明确,扩展性好,逻辑性好,当要加开发成本

8、在IE地址栏中输入http://localhost:8080/ServletExample/HelloServlet去访问servlet,那么请问该请求会去调用servlet的那个方法?为什么?

答:首先又客户端ie浏览器发送请求,那么服务器会调用相对的servlet程序去处理请求而servlet先会创建一个实例又实例去然后调用实例的init初始化方法,通过调用service方法去创建线程处理一个个客户端的请求

9、请描述一下HttpServletReuqest和HttpServletResponse的作用

HttpServletRequest是专门用于Http协议的ServletRequest的子接口他用于封装HTTP请求同HttpServletResponse一样在servic()方法内部调用HttpServletRequest对象的各种方法请求,来获取请求信息,web客户端发送给web服务器的消息分为请求行,请求消息头,消息正文。

获取请求行的相关信息有如下一些getMethod方法返回HTTP请求消息中的请求方式。

getRequestURI方法返回请求行中的资源名部分。

getQueryString 方法返回请求行中的参数部分。

getProtocol方法返回请求行中的协议名和版本。

getContextPath方法返回请求资源所属于的WEB应用程序的路径。

getPathInfo方法返回请求URL中的额外路径信息。额外路径信息是请求URL中的位于Servlet的路径之后和查询参数之前的内容,它以“/”开头。

getPathTranslated方法返回URL中的额外路径信息所对应的资源的真实路径。

getServletPath方法返回Servlet的名称或Servlet所映射的路径。

获取网络连接信息的主要方法有如下一些:

getRemoteAddr方法返回发出请求的客户机的IP地址,其格式为“192.168.0.3”这种形式的字符文本。

getRemoteHost方法返回发出请求的客户机的完整主机名,即“pc1.it315.org”这种格式。

getRemotePort方法返回发出请求的客户机所使用的网络接口的端口号。

getLocalAddr方法返回WEB服务器上接收当前请求的网络接口的IP地址。

getLocalName方法返回WEB服务器上接收当前请求的网络接口的IP地址所对应的主机名。

getLocalPort方法返回WEB服务器上接收当前请求的网络接口的端口号。

getServerName方法返回当前请求所指向的主机名。

getServerPort方法返回当前请求所连接的服务器端口号。

getScheme方法返回请求的协议名,例如http、https或ftp。

getRequestURL方法返回客户端发出请求时的完整URL。

至于获取请求头方法基本上就是get加上相应请求头的名字。

第三章 JSP动作指令

1、指令标签

page指令标签:申明当前jsp页面的编码格式,文本类型,编写语言和需要导入的类文件

import属性为导入相关类文件的权限定名,每个类文件用","号隔开

errorPage属性指明当页面出现java异常时跳转到某个页面,errorPage="errorPage.jsp";

session="true/false"表示当前jsp页面是否可以使用Session会话对象

表示动态的引用一个文件,如果是纯html,则copy到主页面中

如果其中还包含有java代码,加载到主页中后java代码会被编译

被包含的页面中不需要出现主页面中已经有的不重复出现的html标签,只需要写放在body标签内的内容

2、Java程序判断

不能在程序片段内定义方法,包含在此标签内部的代码最终会被放在由JSP引擎转换成的Servlet java文件的_JspServlet方法内部

所以此处不能定义方法,定义的变量为局部变量

变量和方法定义的标签,变量在多个线程间共享,变量和方法只在当前页面有效,最好使用变量作为Servlet的成员变量,方法为成员方法

3、如何对变量进行输出

1)、使用out.write()或者out.print()方法

2)、使用也可以直接对集合类型进行输出,不需要加分号

4、JSP动作指令

表示动态的包含另外的一个文件,并且可以使用

指令每次都动态的加载页面,所以页面有修改,也能及时被重新编译在

指令用于在web容器内部进行Jsp页面的转发,由一个jsp转发到另外一个jsp页面并且可以使用jsp:param指令传递参数给转发到的页面,在转发的页面中通过 request.getParamenter()方法获取传递过来的参数;

运用运行applet小应用程序,也可以使用jsp:param传递参数

可以引用Bean对象

1)、id表示Bean对象的名称,在setProperty和getProperty中id用来表示Bean对象

2)、name表示哪个Bean对象,引用uesBean里的id,Property表示bean对象中某个属性的名称,value即为该对对象 指定Property的值

3)、并且setProperty和getProperty可以不在uesBean使用uesBean所产生的对象放在PageContext页面上下文中

5、请求状态响应

1)、正常响应status code(状态码):200

2)、重定向一个页面:302

3)、内部服务器错误(java代码异常):500 如何处理此错误? 使用page指令的errorPage属性

4)、请求的资源不存在:404

6、include指令与include动作比较

include指令 jsp:include动作

语法格式

发生作用时间 页面转换期间 请求期间

包含的内容 文件的实际内容 页面的输出

转换成的servlet 一个servlet 两个servlet

编译时间 较慢 较快

执行时间 稍快 较慢

第四章 九大内置对象

session.setMaxInactiveInterval(10); // 用来设置session会话保持的最长时间,以秒为单位

response.setIntHeader("Refresh", 5); // 每隔5秒刷新本页面

response.setHeader("Refresh", "10;URL=http://www.baidu.com"); // 10秒后转到指定页面

out.print("body in bytes: " + request.getContentLength() + "
"); // 获取请求体部分的内容的长度,以byte为单位

out.print("content type: " + request.getContentType() + "
"); // 获取请求的内容类型

out.print("context path: " + request.getContextPath() + "
"); // 获取应用的路径信息

out.print("server ip: " + request.getLocalAddr() + "
"); // 服务器端IP

out.print("client" + request.getRemoteAddr() + "
"); // 获取浏览器端IP地址

out.print("http method: " + request.getMethod() + "
"); // 获取请求方法

out.print("query string: " + request.getQueryString() + "
"); // 获取查询字符串

out.print("request uri: " + request.getRequestURI() + "
"); // 获取URI(统一资源标识符)

out.print("request url: " + request.getRequestURL() + "
"); // 获取URL(统一资源定位符)

out.print("session id: " + request.getRequestedSessionId() + "
"); // 返回 客户端对应的session id

HttpSession sess = request.getSession(); // 由request获取HttpSession会话对象

out.print("session id:" + sess.getId());

out.getBufferSize()//缓冲区大小

out.getRemaining()//缓冲区剩余大小

out.isAutoFlush() //是否自动清空缓冲区

1、out隐含对象(输出对象)

直接用于在JSP页面输出内容

Javax.servlet.jsp.JspWriter(抽象类)继承制java.io.Writer

Jsp中的out对象最终被转换成servlet中的jspWriter对象

2、request隐含对象(请求对象)

用于获取Http请求相关信息,比如查询字符串,表单数据

javax.servlet.http.HttpServletRequest

3、page对象(页面对象)

表示对应单个JSP页面,servlet中声明如下:

final java.lang.Object page=this//page表示当前对象

4、PageContext(页面上下文)

finaljavax.servlet.jsp.pageContext pageContext;

页面上下文可以使用setAttribute(String,String)设置当前页面所存储的信息,页面间不共享数据使用getAttribute(String)方法获取在页面上下文中设置的属性

5、session对象(会话对象)

会话对象可以保存用户的基本信息,如一个用户登录到一个网站,该网站可以记录此用户的信息,并且用户信息在网站的所有页面间共享会话信息存储在服务器端(数据库,

文件系统,web容器本身实现的session存储)在A页面中使用session对象的setAttribute(String,String)方法存储数据,在其他页面中直接使用session.getAttribute (String)方法获取数据

javax.servlet.http.HttpSession session=null;

对Tomcatweb容器来说,一个会话的持有时间为30分钟(会话超时时间,单位为分钟)

在conf目录的web.xml

30

6、application对象(应用程序对象)

整个应用都能使用,不限于某个用户,所有用户都能访问的数据应该放在application对象中同样有setAttribute(String String)和getAttribute(String)方法

final javax.servlet.ServletContext application

7、response对象(响应对象)

response、sendRedirect("url")重定向到某个页面

8、config对象(Servlet配置信息)

final javax.servlet.servletConfig config;为jsp页面配置Servlet

configServlet

/config.jsp

configName

myValue

1

configServlet

/config

在config.jsp页面中由config对象的getInitParameter()获取初始化参数

9、exception对象(异常对象)

java.lang.Throwable exception =

如果想要使用exception对象,则使用该对象的页面(错误处理页)必须在page指令中声明isErrorPage="true"

10、隐含对象的作用范围

1、pageScope 只能作用于页面 page ,out,pageContext

2、reqyestScope 作用于Http请求,到了另外一个页面,request失效 request由页面A转发到页面B,则request同时作用于页面A和页面B

3、SessionScope session作用域,用于所有页面 session

4、applicationScope 应用程序作用域,作用于整个应用程序的所用用户的所用页面 application

11、重定向和转发的区别

转发:

web容器内部由一个JAP转发到另外一个JSP页面,客户端地址栏URL不会改变request.getReauestDispatcher("url").forWord(request,response);转发时指定的URL前可以 加 "/"转发中url相当于ContextPath,转发可以用request的setAttribute给目标页面传递参数,目标页面也可以通过request.getAttribute()方法获取传递过来的参数

重定向:

实际是告诉浏览器由一个页面跳转到另外的一个页面,客户端浏览器地址栏会发生改变,显示出目标地址HTTP Response status Code:状态码为302response.sendRedirect ("url")重定向中,URL相对于ContextPath来重定向,所以不需要再URL前加"/"。

12、Cookie

保存网站信息到客户端浏览器, 这个数据可以轻易地被获取到

JSP中,通过Cookie对象保存信息,key-value

通过response.addCookie(Cookie)添加cookie到浏览器端

通过request.getCookies()方法获取由客户端发送过来的Cookie对象数组,如果没有cookie,则返回 null

所以服务端需要进行null判断

1)cookie信息是在浏览器中的,但并不是所有的浏览器都支持cookie功能;

2)cookie对象不能单独使用,必须和request对象或response对象结合使用;

3)不同的浏览器中存储的cookie不是通用的。例如:IE存储的cookie只有IE自己使用;

4)存储在浏览器中的cookie对任何Web服务器都是开放的,所以写入的cookie可能被其它网页读取或覆盖掉

第五章 JavaBean

1、什么是JavaBean

JavaBean是一个普通的Java类,封装了get,set方法,并且可以增加一些通用的逻辑,增加了代码的重用性

1)、javabean是一个公开的(public)类

2)、javabean类必须有一个无参的构造方法

3)、javabean中变量通常称为属性

4)、取得或设定属性是,必须使用getXXX()和setXXX()方法。(java技术规范)

复习:

变量:

成员变量:

类变量:在类里面用static关键字修饰的变量,通过类或对象来 访问,通常使用类来访问,实例方法不能访问静态变量

实例变量:在类里面未用static关键字修饰的变量,只能通过对象来访问

局部变量:

在方法里定义的变量,必须进行初始化,只作用于该方法内部,如果方法内部有局部内部类使用方法里的某个变量,则该变量必须声明为final变量

方法:

成员方法:

静态方法

实例方法

构造方法:

2:jsp:uesBean

uesBean指定的id==>session.setAttribute("user",com.gs.bean.User user);

所以可以使用removeAttribute方法移除page,request,session,application对应的java Bean组件

jsp:setProperty jsp:getProperty的自省机制

表单里的name与setProperty和getProperty所指定的bean对象的属性名称一致

在使用setProperty的时候,可以使用*号匹配所有的属性

找到eclipse内置的tomcat的目录

第六章 数据源和连接池

1、JNDI java Naming and Directory Interface(JAVA命名和目录服务接口)

通过一个指定的字符串就能找到指定的资源JNDI规范通常提供一个lookup方法通过资源字符串查找所指定的资源

2、DataSource 通过一定的配置信息告诉WEB容器,应用连接到哪一个数据源

3、配置数据源和数据连接池

1)、在tomcat的conf目录下的context.xml文件中添加资源描述标记

auth="Container"认证类型,由容器提供认证

type="javax.sql.DataSource"表示此资源的类型是什么,javax.sql.Datasource表示为jdbc的数据源类型

driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"

url="jdbc:sqlserver://localhost:1433;DatabaseName=db_name"

username="user_name"

password="user_password"

maxTotal="20"最大连接数

maxIdle="5"最大空闲连接数

maxWaitMillis="10000"最大等待时间

/>

备注:对于tomcat的来说版本有差异,可以参考标记信息

对于6.0及以上的tomcat,只需要使用标记,把相关的参数配置直接放在该标记的属性部分

对于5.0 6.0 7.0 来说最大连接数是maxActive,最大等待时间是maxWillis

2)、在应用的web.xml文件中声明引用了哪个资源

JNDI JDBC DataSource

jndi/datasource

javax.sql.DataSource

Container

3)、使用Context去获取配置的jndi资源

javax.naming.Context context = new javax.naming.InitialContext();

Object obj =context.lookup("javax:comp/env/jndi/datasource");

javax.sql.DataSource ds=(javax.sql.DataSource)obj;

javax.sql.Connection conn=ds.getConnection();

4、数据库连接池对数据库相关对象的关闭操作

rs.close(); conn.close();

以上的关闭操作,是交由Tomcat容器来做的,conn.close并没有真正的把建立好的数据库连接关闭,而是把此数据库连接放回到数

第七章 过滤器和监听器

1、什么是过滤器?

过滤器是在某个URL之前所需要做的事情,URL可能是某个servlet所对应的,也有可能是jsp页面

特点:

声明式的 动态的 灵活的 模块化的 可移植的 可重用的 透明的

用处:

统一认证处理

对用户的请求做检查,做更精确的记录

监听或对用户所传递的参数做前置处理,如防止数据隐藏码攻击

改变图像文件的格式

对响应做编码的动作

对响应做压缩处理

对呀XML的输出使用xslt来转换

2、过滤器的写法

1)、自定义类,实现javax.servlet.Filter接口

2)、分别实现init(FilterConfig)doFilter(ServletRequest ,ServletResponse,FilterChain) destroy()

3)、在web.xml中配置该filter 告诉web容器存在这么一个filter,可以使用配置filter的初始化参数,在Filter代码中 用FilterConfigd对象来获取初始化参数

告诉web容器此filter对那个URL进行过滤

3、Filter的-生命周期

*1)、init(FilterConfig)在tomcat容器启动时就会对过滤器进行初始化

2)、在执行其过滤的url时,先初始化该URL所对应的servlet

据库连接池

备注:如果想让eclipse直接使用数据连接池的方式运行应用,则把context.xml文件copy到WebContent目录下的META-INF目录

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值