JSP标签
JSP标签
html是静态页面,满足不了日益增长的需求。jsp技术的出现就是因为满足动态页面的需要,当jsp运行时会变成servlet类时它的最大特点。jsp不单止可以写html代码,还可以书写脚本<% %>
<%= %>
<%! %>
其实现在jsp技术在互联网的实际工作中是不会去用了
- MVC模式, V代表jsp
- 因为jsp的编译原因,服务器中一个jsp页面执行的时候需要先变成类在编译成字节码文件,这样的过程很慢,会增加服务器的负担
- jsp中可以书写脚本(java代码),容易造成代码混乱,阅读性差。
jsp标签
<jsp:forword>
<jsp:forword>
相当于请求转发,要配合<jsp:param>
使用
<jsp:forword page='转发页面'>
<jsp:param name='变量名' value='字符串'></jsp:param>
</jsp:forword>
在同一个项目中创建两个jsp页面:demo1.jsp
demo2.jsp
<!--demo1-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo1</title>
</head>
<body>
hi!
<jsp:forward page="demo2.jsp">
<jsp:param name="password" value="123456"/>
<jsp:param name="userName" value="user1"/>
</jsp:forward>
</body>
</html>
<!--demo2-->
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo2</title>
</head>
<body>
<%= request.getParameter("userName")%>
<%=request.getParameter("password")%>
</body>
</html>
效果图
注意:<jsp:forword>
中间一定要括<jsp:param>
,要不然会报错,中间也不能放注释<!--注释-->
要不然也会保持
<jsp:useBean>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo3</title>
</head>
<body>
<%
User user=new User();
user.setUserName("吴彦祖");
user.setPassword("123456");
%>
<p><%=user.getUserName()%></p>
<p><%=user.getPassword()%></p>
<%----%>
<jsp:useBean id="user2" class="cm.beans.User" scope="request"></jsp:useBean>
<jsp:setProperty name="user2" property="userName" value="刘亦菲"></jsp:setProperty>
<jsp:setProperty name="user2" property="password" value="777777"></jsp:setProperty>
<jsp:getProperty name="user2" property="userName"></jsp:getProperty>
<jsp:getProperty name="user2" property="password"></jsp:getProperty>
</body>
</html>
<jsp:useBean>
可以用来定义实体类:<jsp:useBean id='类名' class='实体类路径' scope='作用域'>
<jsp:setproperty>
用来设置<jsp:useBean>
定义的类的属性的值:<jsp:setproperty name='已经创建出来的类的名字' value='属性值'>
<jsp:getproperty>
用来获取<jsp:useBean>
定义的类的属性的值:<jsp:getproperty name='已经创建出来的类的名字' value='属性值'>
scope
可以指明放入哪个作用域
<jsp:include>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo4</title>
</head>
<body>
<jsp:include page="demo3.jsp"></jsp:include>
<p>这里是demo4.jsp</p>
</body>
</html>
效果图
把另外一个资源输出的内容插入到当前的jsp页面中,称之为动态引入
<jsp:include page="另一个资源地址" flush='ture/false'></jsp:include>
默认是false,代表服务器会等待改文件完全加载之后,输入到客户端,简单页面不用考虑,如果给true,代表缓存累积到一定数据,在输出给客户端,目的是为了缩短客户端的延迟
动态引入的特点:文件先编译,执行,当执行到include语句的时候才会触发被包含文件的编译,执行
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>demo4</title>
</head>
<body>
<jsp:include page="demo3.jsp"></jsp:include>
<p>demo4.jsp</p>
<%=user.getUsername()%>
</body>
</html>
代码编译报错
原因是因为include是动态引入,demo3编译后才会拼接,整个过程会生成两份代码,所以demo4中的user才会找不到。
然而静态引入的话是两份代码是先拼凑到一起才会再编译,编译过程中碰到重复的变量会报错,删除其中一份才可以正确编译
跳转的方式总结
- 使用form表单跳转
<form action="url></form>"
- 使用a标签跳转
<a href-"url"></a>
- 使用
respose.sendRedirect(url)
meta http-equiv="refresh" content='3;URL=www.baidu.com'
request.getRequestDispathcher(url).forward(request,response)
pageContext.forward("url");
<jsp:forward page="url"><jsp:param name="" value=""></jsp:forward>
跳转方式的特点
客户端跳转(重定向)
-
浏览器的地址栏会发生改变
-
是浏览器的行为
-
跳转后
request对象
已经改变了 -
可以在不同项目中跳转
<!-- 项目1 --> <a href="www.baidu.com">跳转到百度</a> <!-- 百度网页(另外服务器的项目) --> www.baidu.com
以上的1、2、3、4是重定向
服务端跳转(请求的转发)
- 浏览器的地址栏不会发生改变
- 是服务器行为
- 只要请求不断,前后是一个
request
对象 - 只能在本项目内部进行跳转,不能跨项目
以上的5、6、7、8是转发
百度网页(另外服务器的项目) -->
www.baidu.com
```
以上的1、2、3、4是重定向
服务端跳转(请求的转发)
- 浏览器的地址栏不会发生改变
- 是服务器行为
- 只要请求不断,前后是一个
request
对象 - 只能在本项目内部进行跳转,不能跨项目
以上的5、6、7、8是转发
上一篇: oracle 查询锁表语句