您的位置:首页 > Web前端 > JavaScript

JSP知识点总结

2012-08-27 14:13 127 查看
本人还是大四学生,我所知道的都总结下来了。如果写的不好请见谅!

Servlet缺点,为什么会出现jsp技术?

因为Servlet当初的设计目的是用来产生网页的程序,所以所有的页面必须在Servlet中进行构造,这样做的效率在当今来说,真的很低下,所以对于Servlet来说,它是很不利于展现的,不过它很适合于对数据的处理,所以很适合于充当控制器来使用。因为Servlet构建页面实在够差,所以后来SUN推出了JSP来一改Servlet引入的尴尬。

jsp = html+java片段+jsp标签+javascript+css

JSP(Java Server Pages):在HTML中嵌入java脚本语言;由引用服务器中的JSP引擎来编译和执行嵌入的java脚本语言命令;然后将生成的整个页面信息返回给客户端。

jsp功能强大是因为可以与javabean结合使用(即jsp作前台,javabean作后台===>Model1)

jsp+javabean的基础上再结合servlet(做控制),就会构成MVC的开发模式,

MVC模式是目前软件公司通用的开发模式。

如何手工部署一个web项目?

WebRoot项目名

|-WEB-INF

|-web.xml 部署文件

|-classes .class

|-lib *.jar

|-jsp

|-js

|-css

|-index.jsp

虚拟路径配置

<Context path="/hello"docBase="D:\webSite"/>

path="/hello" url

docBase="D:\webSite" 项目路径

JSP页面的元素包括:

静态内容:HTML静态文本

(一)指令元素: 以"<%@"开始,以"%>"结束,用于从jsp发送一个信息到容器,如设置文字编码,引入包等

如:

设置MIME类型<%@ pagecontentType="text/html;charset=gbk" %>

ps:MIME类型就是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文 件被访问的时候,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定 义的文件名,以及一些媒体文件打开方式。

导入所需要的包<%@page import="java.util.*,java.io.*"%>

包含某个文件 <%@include file="filename" %>

<%@ tagilb url=""prefix="" %> jstlJSP (标准标记库 JSPStandard Tag Library)

(二)脚本元素:在一定程度上可以理解就是java的片段

1、脚本: <% java代码 %> 局部变量

2、表达式: <%=java表达式 %> 输出变量 表达式

3、声明: <%! 变量、方法%> 全局变量

(三)动作元素:

<jsp:include page="filename"/>

<jsp:forward page=""/> ===>request.getRequestDispatcher("xxx").forward(request,response); forward(服务器端跳转) redirect(客户端跳转)

<jsp:flugin >

<jsp:usebean id=""class=""/>class值指明用到的哪个bean,id是bean的一个实例,相当于指定对象名

<jsp:setProperty name=""property="" value="" />name表示某一个对象名,property表示哪个属 性,value是具体的值,相当于调用了name.setProperty(value)这个方法

<jsp:getProperty name=""property="" />相当于调用name.getProprty();

其中scope四大属性范围:

1 page: 当前页面(默认)

2 request 一次请求

3 session 一次会话

4 application web应用程序

用法一:

<jsp:include page=""/>

用法二:

<jsp:include page="">

<jsp:param name=""value=""/>

</jsp:include>

<jsp:include page=""/> 与<%@include file="" %>有何区别?

答:{ ~前者是指令元素、后者是行为元素。<%@ include file=””%>,jsp的include指令元素读入指定页面的内容。并把这些内容和原来的页面融合到一起。(这个过程是在翻译阶段:也就是jsp被转化成servlet的阶段进行的。jsp页面是把include指令元素所指定的页面的实际内容(也就是代码段)加入到引入它的jsp页面中,合成一个文件后被jsp容器将它转化成servlet。可以看到这时会产生一个临时class文件和一个java文件。

~主要有两个方面的不同;

一:执行时间上:

<%@ include file=”relativeURI”%> 是在翻译阶段执行

<jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行.

二:引入内容的不同:

<%@ include file=”relativeURI”%>

引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起.

<jsp:include page=”relativeURI” flush=”true” />引入执行页面或servlet所生成的应答文本.

另外在两种用法中file和page属性都被解释为一个相对的URI.如果它以斜杠开头,那么它就是一个环境相关的路径.将根据赋给应用程序的URI的前缀进行解释,如果它不是以斜杠开头,那么就是页面相关的路径,就根据引入这个文件的页面所在的路径进行解释.更多有关URL是如何解释的请参考相关资料或书籍. }

注释:

<!- - html中的注释,客户端可以看到源代码 -->

<%- - jsp中的注释,客户端不可以看到源代码 --%>

JSP脚本中使用的注释:

<% //单行注释 %>

<% /*多行注释*/ %>

总结:只用html的注释在客户端是看得到的

JSP执行过程:(翻译-->编译-->执行)

WEB容器处理JSP文件请求需要经过3个阶段:

1、翻译阶段:JSP文件会被WEB容器中的JSP引擎转换成JAVA源码

\Tomcat6.0\work\Catalina\localhost\hello\org\apache\jsp\xxx.java

2、编译阶段:Java源码会被编译成可执行的字节码.class

3、执行阶段:容器接受了客户端的请求后,执行编译成字节码的JSP文件;处理请求后,容器把生成的页面反馈给用户端进行显示

第一次请求之后,WEB容器可以重用已经编译好的字节码文件。就不用再翻译、编译。

注意:如果对JSP文件进行了修改,WEB容器会重新对JSP文件进行翻译和编译。

传值方式:

方式1:

<a href="4.jsp?a=1&b=2">xx.jsp</a>

String s=request.getParameter("a");

String d=request.getParameter("b");

方式2:

<jsp:forward page="xx.jsp">

<jsp:param name="stuName" value="lishiming"/>

</jsp:forward>

方式3:

form表单

JSP的内置对象:

JSP 内置对象是 Web 容器创建的一组对象

JSP 内置对象是可以直接在JSP页面使用的对象 ,无需使用“new”获取实例

JSP 内置对象的名称是 JSP 的保留字

九大内置对象:

out==============>JspWriter 向客户端输出数据,字节流

pageContext=========>PageContext 代表jsp页面的上下文

request============>HttpServletRequest 接受客户端的请求

response===========>HttpServletResponse 响应

session============>HttpSession 用于保存用户的信息,跟踪用户的行为

application========>ServletContext 多个用户共享该对象,可以做计数器 this.getServletContext().setAttribute(name,value);

--------------------------------------------------------------------------------

config============>ServletConfig 代表jsp对应的servlet的配置,可以得到web.xml中的参数

page=============>Object 代表jsp这个实例本身(使用较少)

exception==========>Throwable 代表运行时的一个异常

out对象用于向客户端输出数据

out对象常用方法:

print():在页面中打印出字符串信息<%out.print("hello world"); %>

out.println()与<%= %> 区别?

发现使用表达式输出(<%=%>)明显要比使用out.println()输出更好。所以在JSP的开发页面中绝 对不能出现任何的out.println()语句。

request对象主要用于处理客户端请求,方法有:

String getParameter(String name) 根据页面表单组件名称获取页面提交数据

String[ ] getParameterValues (String name) 获取一个页面表单组件对应多个值时的用户的请求数据

void setCharacterEncoding (String charset) 指定每个请求的编码 在调用request.getParameter()之前进行设定,可以解决中文乱码问题

request.getRequestDispatcher(Stringpath) 返回一个javax.servlet.RequestDispatcher对象,该对象的forward方法用于转发请求

request.setAttribute("key",value);

Object request.getAttribute("key");

get: URL 不安全
http://localhost:8080/webLesson1/7.jsp?uname=aa&upass=bb&sex=man&fav=sport&fav=music
post: http

response对象用于响应客户请求并向客户端输出信息。

response对象常用的方法:

response.setHeader("refresh","1");//每隔1秒刷新一次

response.setHeader("refresh","2;url=xxx.jsp")

等同于:

<meta http-equiv="refresh"content="2;url=xxx.jsp">

定时跳转后,页面的地址就被改变了,所以跳转称为客户端跳转。

但是如果有些页面中是需要跳转的话,将其声明为动态页则肯定执行速度不如静态页快,那么此时就可以使用第二种设置头信息的方式完成

response.sendRedirect(String location);将请求重新定位到一个不同的URL 客户端跳转

response.addCookie(cc);

一个会话就是浏览器与服务器之间的一次通话,它包含浏览器与服务器之间的多次请求、响应过程

session是JSP内置对象,与浏览器一一对应,允许用户存储和提取会话状态的信息,浏览器关闭,本次会话结束

重新开启一个浏览器,相当于重新创建了一个session对象。

session对象用来存储有关用户会话的所有信息

session对象常用方法:

void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到session中

session.setAttribute("name","zhangsan");

Object getAttribute(String key):根据名称去获取session中存放对象的值

String name = (String)session.getAttribute("name");

session.getId(); 得到session的ID

session.isNew(); 判断该session是否是新的

session.Invalidate(); 销毁session

application类似于系统的“全局变量”,用于实现用户之间的数据共享

application对象的常用方法:

void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到application中

Object getAttribute(String key):根据键去获取application中存放对象的值

aaplication.getRealpath("/"); 得到项目的路径

在JavaEE的开发中有几个重要的开发模式:

1.Model1模式 2.Model2模式 3.MVC模式

Model1模式

Model1的基础是jsp文件,它由一些相互独立的jsp文件,和一些javaClass组成(它不是必须的),这些jsp从HTTP Request中获得

所需的数据,处理业务逻辑,然后将结果通过Response返回浏览器端。

可分为两类:

1.model1(纯jsp技术,不带任何javaclass)

2.jsp+java class(java class也就是我们所指的javabean业务逻辑)

缺点:

1、表现层和业务逻辑层混合在一起

2、在开发过程中,不利于多人的协同开发

3、不利于后期的维护

优点:

1、简单、开发速度较快

2、比较适合开发小的项目

MVC模式:强制性的使应用程序的输入、处理、输出分开。

M:Model 模型层 由java class来做,也可以是javabean、ejb等

V:View 视图层 由jsp来做

C:Controller 控制层 由servlet来做

Mvc模式的处理过程:

首先控制器接受用户的请求,并决定调用哪个模型来进行处理,然后模型用业务逻辑来处理用户的请求并返回数据,

最后控制器用相应的视图显示模型返回数据,并通过浏览器呈现给用户。

MVC是优秀的设计思想,但是也存在缺点:

1、工作量增加了

2、不使用小型项目

3、调试应用程序难度加大

当数据库中出现中文时,乱码问题的解决:

原因:

方法:

1、重新编码:newString(request.getParameter("uname").getBytes("iso-8859-1"),"gbk");

2、使用过滤器来解决

3、通过配置文件server.xml(不太稳定):在Connector元素中增加属性URIEcoding="gbk",表示客户端请求传来的值均以gbk的标准来编码 <Connector port="8080"protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

URIEcoding="gbk" />

GBK是GB2312的后续标准,添加了更多的汉字和特殊符号,GBK还是现如今中文Windows操作系统的系统默认编码

EL表达式

思考:JSP标准动作的局限:

1、一般是操作JavaBean的属性

2、JavaBean的属性只能为基本数据类型

3、不能进行逻辑操作

如何解决这个问题?

什么是EL

EL即Expression Language(表达式语言)

EL的功能

与<jsp:getProperty />类似 简化<jsp:getProperty/>

EL的语法

${ EL exprission }

${ bean.name } 或 ${ bean['name'] }

当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一定要使用[ ]。

例如: ${user.My-Name}应当改为${user["My-Name"]}

如果要动态取值时,就可以用[ ]来做,而“.“无法做到动态取值。

例如: ${sessionScope.user[data]}中data 是一个变量

没有指定哪个范围的变量,所以搜索的顺序:

page requset session application

最终都找不着返回null

EL内置对象:

pageScope requestScope sessionScope applicationScope

pageContext param paramValues(checkbox)

pageContext取得其他有关用户要求或页面的详细信息。

${pageContext.request.queryString} 取得请求的参数字符串

${pageContext.request.requestURL} 取得请求的URL,但不包括请求之参数字符串

${pageContext.request.contextPath} 服务的web application 的名称

${pageContext.request.method} 取得HTTP 的方法(GET、POST)

${pageContext.request.protocol} 取得使用的协议(HTTP/1.1、HTTP/1.0)

${pageContext.request.remoteUser} 取得用户名称

${pageContext.request.remoteAddr } 取得用户的IP 地址

${pageContext.session.new} 判断session 是否为新的

${pageContext.session.id} 取得session 的ID

${pageContext.servletContext.serverInfo} 取得主机端的服务信息

注意 <%@ page isELIgnored="true" %> 表示是否禁用EL语言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默认的启用EL语言。

自动类型转换

JSTL

<c:forEach >
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: