JSP知识点总结

本文深入探讨了JSP技术的工作原理及应用,包括JSP与Servlet的区别、页面元素介绍、内置对象解析、MVC模式讲解等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本人还是大四学生,我所知道的都总结下来了。如果写的不好请见谅!

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  >


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值