欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

jsp和servlet知识点总结(转载)

程序员文章站 2022-07-01 22:58:01
一.jsp与servlet的区别: 1.经编译后就变成了servlet.(jsp的本质就是servlet,jvm只能识别java的类,不能识别jsp的代码,web容器将jsp的代码编译成jvm能够...

一.jsp与servlet的区别:
1.经编译后就变成了servlet.(jsp的本质就是servlet,jvm只能识别java的类,不能识别jsp的代码,web容器将jsp的代码编译成jvm能够识别的java类)
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
3.servlet中没有内置对象,jsp中的内置对象都是必须通过httpservletrequest对象,httpservletresponse对象以及httpservlet对象得到.
jsp是servlet的一种简化,使用jsp只需要完成程序员需要输出到客户端的内容,jsp中的java脚本如何镶嵌到一个类中,由jsp容器完成。而servlet则是个完整的java类,这个类的service方法用于生成对客户端的响应。
 
老师发的答案1:
jsp在本质上就是servlet,但是两者的创建方式不一样.servlet完全是java程序代码构成擅长于流程控制和事务处理而通过servlet
来生成动态网页;jsp由html代码和jsp标签构成,可以方便地编写动态网页
因此在实际应用中采用servlet来控制业务流程,而采用jsp来生成动态网页.在struts框架中,jsp位于mvc设计模式的视图层,而servlet位于控制层.
答案2:
jsp是servlet技术的扩展,本质上就是servlet的简易方式。jsp编译后是“类servlet”。servlet和jsp最主要的不同点在于,servlet的应用逻辑是在java文件中,并且完全从表示层中的html里分离开来。而jsp的情况是java和html可以组合成一个扩展名为.jsp的文件。jsp侧重于视图,servlet主要用于控制逻辑。
 
二.jsp的九大对象,七大动作,三大指令
 
jsp九大内置对象:
1>out 向客户端输出数据,字节流.如out.print(" dgaweyr");
 
2>request 接收客户端的http请求.
string getparameter(string name):得到表单参数名name的值.
string[] getparametervalues(string name):(得到string[]复选框时常用).
setattribute(string name,object obj):设置属性名为name,属性值为obj.
getattribute(string name);得到属性值.
 
3>response:封装jsp产生的回应,然后发送到客户端以响应客户的请求.重定向跳转任意界面.(服务器跳转)
addcookie(cookie cookie):
sendredirect("/wel.jsp"):跳转到指定页面
 
4>session:用于保存用户信息,跟踪用户行为,当前打开的内,多个页面共享数据. session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个webapplication开始,直到客户端与服务器断开连接为止.它是httpsession类的实例.
setattribute(string name,object obj):设置属性名为name,属性值为obj.
getattribute(string name):得到属性值.
 
5>application对象:实现了用户间数据的共享,可存放全局变量.它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问.服务器的启动和关闭决定了application对象的生命.它是servletcontext类的实例.
 
session,application,request的区别:
一个项目中session尽量少用几个,因为过多的session会影响程序的执行效率.它主要用于保存登录信息(用户信息,权限,资源)即频繁使用的信息.
application: 用于多个浏览器之间共享数据,多个用户共享该对象,可以做计数器.它的用法与session完全一样.
数据范围:
application(服务器关闭时失效)>ression(浏览器关闭时失效)>request(只能用于两个跳转页面之间)
 
6>page对象代表jsp这个实体本身,即当前页面有效.相当于java中的this.
数据范围:page<session<application
 
7>.exception:代表运行时的异常.
在会发生异常的页面加入指令:<%@ page errorpage="处理错误的页面.jsp"%>
在处理异常的页面写入:<%@ page iserrorpage="true"%>
 
8>.pagecontext对象 pagecontext对象提供了对jsp页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的session,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pagecontext.
 
9>.config jsp对应的servlet的配置,可以得到web.xml中的初使化参数.
 
jsp七大动作:
一:include 动态包含(分别编译):
用jsp:include动作实现<jsp: include page="included.jsp" flush="true" />
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。flush属性: 用true ,表示页面可刷新。默认为false;
 
二:usebean动作(jsp页面使用javabean的第二种方式):
<jsp:usebean id="对象名" class="包名.类名" scope="作用范围(request/page/application/session)"/>
作用域默认为page(本页面有效).
三:getproperty动作(name为usebean动作中的id).
从对象中取出属性值:<jsp:getproperty name="javabean对象" property="javabean对象属性名" />
四:setproperty动作(name为usebean动作中的id):
为对象设置属性值:<jsp:setproperty name="javabean对象" property="javabean对象属性名" value="值"/>
为对象设置属性值:<jsp:setproperty property="javabean对象属性名" name="javabean对象" param="username"/>
(param="username" 相当于 value=<%=request.getparameter("username")%>)
 
五:param动作(传递参数)):
到达跳转页面可以通过 request.getparameter(“参数名”)方式取出参数值
<jsp:include page="转向页面的url" >
           <jsp:param   name="参数名1" value="参数值1">
           <jsp:param   name="参数名2" value="参数值2">
           ...........
 </jsp:include>
或:
<jsp:forward page="转向页面的url" >
           <jsp:param   name="参数名1" value="参数值1">
           <jsp:param   name="参数名2" value="参数值2">
           ...........
</jsp:forward>
 
六:forward动作:
跳转页面:<jsp:forward page="login.jsp" />
 
七:plugin动作:<jsp:plugin>:用于指定在客户端运行的插件
 
jsp三大指令之:
一:page指令:
1.指定页面编码.例:
<%@ page language="java" contenttype="text/html;charset=gbk" pageencoding="gbk" %>
2.导入包,例:
<%@ page import="java.util.*,java.text.*" %>.
二:include 指令
静态包含(统一编译):<%@ include file="included.jsp"%>
 
三:taglib
 
三.jsp中的静态包含与动态包含
动态include(<jsp: include page="included.jsp"/>)
静态include(<%@ include file="included.jsp"%>)
1. 静态include的结果是把其他jsp引入当前jsp,两者合为一体,可以达到数据的共享即可以说是统一编译的,而
动态include的结构是两者独立的,直到输出时才合并即为分别编译的.
2.动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对象,页面设置,都由自己创建,而静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能 有变量同名的冲突.而页面设置也可以借用主文件的.
3.动态包含总是检查被包含页面的变化,静态包含不一定检查被包含页面的变化.
4.动态包含可带参数,静态包含不能带参数.如(<jsp: include page="included.jsp">放入参数</jsp:include>);
 
四.servlet的生命周期
加载(服务器启动时,会到web.xml文件中去找到servlet文件的配置并创建servlet的实例) → 初使化(init()此方法只执行一次) → 执行(service(),doget(),dopost()) → 清理(销毁destory())
service():方法本身包含了doget()和dopost().如果服务器发现了service()方法,则不再执行doget(),dopost().
一般不建议去重写父类的service方法.因为重写了此方法doget方法和dopost方法将得不到利用.
没有service()方法默认执行doget()方法.
 
五.servlet的十大方法
init(httpservletconfig config): 被servlet 容器调用以指明一个servlet被放进服务中。
service(httpservletrequest request, httpservletresponse response):被servlet 容器调用以允许servlet响应一个请求
doget(httpservletrequest request, httpservletresponse response):被server调用处理客户端的get请求 .
dopost(httpservletrequest request, httpservletresponse response):被server调用处理客户端的post请求.
doput(httpservletrequest request, httpservletresponse response):被server调用处理客户端的put请求.
dodelete(httpservletrequest request, httpservletresponse response):被server调用处理客户端的delete请求.
destroy():被 servlet container调用以告知一个servlet它被剔除服务。
getservletinfo():返回有关servlet的信息,例如作者、版本、版权。
getservletconfig():返回servletconfig对象
dohead(httpservletrequest request, httpservletresponse response):被server调用处理客户端的head请求.
 
六.servlet类的基本架构
servlet 接口:主要定义了servlet的生命周期方法
servletconfig接口:为servlet提供了使用容器服务的若干重要对象和方法。
servletcontext接口:是servlet的上下文对象,这个对象是在服务器启动时创建的,为servlet提供了使用容器服务的若干重要方法。
genericservlet抽象类:为servlet提供了一般的实现(包括实现了servlet和servletconfig两个接口),保存了容器通过init方法传递给servlet的一个servletconfig类型的重要对象。
httpservlet抽象类:为处理http请求的servlet提供了一般实现,主要是定义和实现了若干service方法。
继承关系:genericservlet继承了servlet和servletconfig接口;httpservlet继承了genericservlet;我们写的servlet继承了httpservlet
 
七.如何配置一个servlet使它运行
1.servlet的名字,包类
<servlet>
<servlet-name>httpservletdemo(为servlet取的名字)</servlet-name>
<servlet-class>com.lxitedu.httpservletdemo(包名.类名)</servlet-class>
</servlet>
 
2.映射.访问的地址(url)
<servlet-mapping>
<servlet-name>httpservletdemo(与上面的servlet名字要完全一样)</servlet-name>
<url-pattern>/myservlet(运行时地址栏显示的文件名)</url-pattern>
</servlet-mapping>
 
八. get与post有何区别
1.post比get安全.(get用的问号传值法)
2.post接收的长度比较长.
3.post是以表单的形式提交请求的,get是以浏览器的形式提交请求的。所以get比较快。
4.post更能解决我们的中文乱码问题。
在默认情况下是get请求,form的method属性如果不指定,也默认为get请求。
get请求,会将参数显示在浏览器的地址栏上,其显示格式,在地址之后会以?开始,以'&'分隔参数,可以通过httpservletrequest()对象的getquerystring()方法来获得get请求的参数值。
post请求:servletrequest对象的getinputstream()方法可以获得一个由socket得来的输入流,可以使用这个流来实现文件的上传。getreader()方法可以直接获取post请求的参数
 
九.说说jsp或servlet中有哪几种跳转方式。它们有何区别
1.客户端跳转:
1).使用form表单的action属性设置要跳转的页面(此方法可以将此页面的form表单属性值传递到下一页面):如下
<form action="my.jsp" name="lili" onsubmit="return test()">
<input type="submit" value="提交">
或者(为button类型需要手动提交表单):
<input type="button" value="注册" onclick="test()">
javascript的函数:
function test(){
    //手动设置跳转页面
     document.lili.action="my1.jsp";
    document.lili.submit();
}
2).使用javascript中的页面跳转的方法(不能将form表单中的属性值传递到下一页面):
window.location.href="my.jsp";
window.location.replace("my.jsq");//此方法不可将页面后退.
2.服务端跳转的两种方法对比:
<jsp:forward page="xxx.jsp"/>:等价于
request.getrequestdispatcher("xxx.jsp").forward(request,response);
本服务器的资源跳转,效率更高.地址栏不改变(仍为跳转前的页面).可得到request属性值.
response.sendredirect("xxx.jsp"):
重定向到任意资源.地址栏改为当前页面.无法得到request属性值.
 
十.servlet中的数据能与jsp共享吗?如果可以如何传递
能,我们可以将servlet中的数据放入httpsession,httpservletrequest,servletcontext,pagecontext对象中,
在jsp页面中使用其相对应的内置对象得到我们servlet中的数据.

作者“风漂雨落”