jsp的声明:
<%!
int i=10;//实例变量,加!后的代码出现在源码的类里面,可以添加方法
%>
<%
int i=10;//局部变量,出现在源码的方法里,不能添加方法
%>
注释:
<%--out.write("adc")--%> jsp注释,注释掉的代码根本不会翻译到servlet中
<!---
<%="abc"%> html的注释,代码依旧会翻译到servlet中,只是html没有显示而已
->
指令: 给服务器使用,告诉服务器如何使用jsp页面
page指令:作用于整个jsp页面,
定义jsp的页面上属性:
language:语言,默认是java.指示jsp中的脚本语言
import:导入需要的java类
Session:默认是true;是否生成httpSession对象;
buffer:字符缓存,默认是8kb;
errorPage:页面出错时转向的页面./开头代表绝对路径
配置全局错误转向页面:
在web.xml中配置:
匹配错误类型
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/error.jsp</location>
</error-page>
匹配错误码:
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
isErrorPage:是否产生exception对象,默认为false;
ContentType:作用与request.setContentType()相同.给浏览器用。
pageEncoding:告知服务器用什么编码读取jsp,实际上只需写这个,pageEncoding同时具有ContentType的作用
isELIgnore:默认值为false,是否忽略EL表达式
taglib指令:
引入外部标签:
include指令:
属性:file
路径:/开头表示当前应用
页面包含:
<%@include file="/1.jsp"%>
静态包含:将2个jsp合成一个class文件,(推荐,效率高)
动态包含:
<jsp:include page="/1.jsp"/>
生成2个class,分别输出各自的代码
jsp中的动作元素(标签):
jsp:include:
动态包含:属性:page
jsp:forward:
转发:属性:page
代码:<jsp:forward page="/index.jsp"></jsp:forward>
jsp:param:
传递请求参数,结合其他标签来使用:
<jsp:forward page="/2.jsp">
<jsp:param value="djw" name="username"/>
</jsp:forward>
在2.jsp中可获取username;
jsp九大隐式对象:
JSP内置对象名称 对应的类型 备注
request javax.servlet.http.HttpServletRequest
response javax.servlet.http.HttpServletResponse
session javax.servlet.http.HttpSession JSP指令page中有一个开关session=”true”
application javax.servlet.ServletContext
config javax.servlet.ServletConfig
page java.lang.Object 代表当前Servlet对象本身
exception java.lang.Throwable JSP指令page中有一个开关isErrorPage="true"
out javax.servlet.jsp.JspWriter 和response.getWriter()返回的PrintWriter作用一样
pageContext javax.servlet.jsp.PageContext
jsp四大域对象:
pageContext内置对象:
1本身是域对象,只能该页面使用
特点:只能操作该页面中的数据
2还能操作其他三个域对象:
pageContext.setAttribute("p", "p");//页面
pageContext.setAttribute("p", "p",pageContext.PAGE_SCOPE);//和上面一行一样
request.setAttribute("p", "pp");//请求,只有当页面转发时,两个页面的请求才为同一个请求,可以用pagecontext来操作
pageContext.setAttribute("p", "p",pageContext.REQUEST_SCOPE);//同上
session.setAttribute("p", "ppp");//作用域范围为一次回话
pageContext.setAttribute("p", "ppp",pageContext.SESSION_SCOPE);//同上
application.setAttribute("p", "pppp");//作用域范围为该应用
pageContext.setAttribute("p", "pppp",pageContext.APPLICATION_SCOPE);//同上
pageContext.findAttribute
String str=(String)pageContext.findAttribute("p");
该方法的注意点主要在于页面,回话,请求这三个域的范围.
还能获得其他8个隐式对象,
提供了包含和转发的简易方法
Jsp.out的缓存机制:
1,out.write(“abc”)
2,response.getWrite.write("def");
以上代码输出显示的是defabc
因为out是jsp的输出流,先写入jsp的缓存中,2中上的语句写入的的respense的缓存,
输出到页面最终要使用的是reponse中的流,所以jsp中的流先关闭,
刷新后abc就进入response中的缓存,进入的顺序在def的后面。
javabean的概念:
遵循的命名规则:
1有默认的构造函数
2字段私有
3类必须是public
4提供公有的get和set方法(属性)
5一般实现java.IO.Serializable接口(保证数据不丢失)
作用:封装数据,传输数据
javaWeb开发模型:
javabean+jsp:简单的应用
Mvc:Model+View+Controller(模型+视图+控制器)
model:javabean表示
view:jsp数据显示
controller:servlet控制
mvc是表现层的架构
三层架构视图:
在jsp中操作javabean:
使用动作元素:(内置标签)
jsp:useBean:在指定的范围中查找javabean,如果没有找到,则创建新的javabean,并放到指定的javabean中,如果找到,直接取出
jsp:setProperty:
jsp:getProperty:将指定名称的bean对象的值打印到页面上,当属性的值为null,则显示的为null
代码:
<jsp:useBean id="p" class="text.jsp.Person"></jsp:useBean>
<jsp:setProperty property="name" name="p" value="djw"/>
<jsp:getProperty property="name" name="p"/>
用请求参数填充javabean中的属性:(即表单中数据提交目标为jsp页面,jsp直接将获取到的数据封装到javabean中)
<% request.setCharacterEncoding("UTF-8"); %> //有中文数据时需要使用,告知服务器用UTF-8来解码
<jsp:useBean id="p" class="text.jsp.Person"></jsp:useBean>
<jsp:setProperty property="name" name="p" param="name"/>
<jsp:setProperty property="gender" name="p" param="gender"/>
<jsp:getProperty property="name" name="p"/>
<jsp:getProperty property="gender" name="p"/>
<jsp:setProperty property="*" name="p"/>
通配符:使用前提:表单中的属性名和javabean中的字段名一致才可以使用,可以这么认为:表单中的所有属性都封装到了javabean中,
只要属性名正确,就都可以一一获取。