jsp
Java Server Pages
jsp是(Java Server Pages):java服务器页面。基本上告别html,写jsp。jsp书写在html代码中。
是sun公司设计的一种动态网页技术。
模板:
<%--
Created by IntelliJ IDEA.
User: name
Date: ${DATA}
Time: ${TIME}
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<html>
<head>
<base href="<%=basePath%>">
<title>$Title$</title>
</head>
<body>
$END$
</body>
</html>
jsp三种脚本
<%! %>声明脚本。 只能书写声明语句。并且声明的成员变量,成员方法 ,内部类。
<%= %> 输出: 替代out.print();
<% %> java代码片段。 会被翻译servcie方法中。在java代码片段中,能书写的内容,参考,方法里面语句。并且多个 java代码片段,可以组合一起去使用
<html>
<head>
<base href="<%=basePath%>">
<title>$Title$</title>
</head>
<body>
<%--静态引入--%>
<%@include file="logo.jsp" %>
hello web
<%--声明脚本,只能书写声明语句; 并且声明的成员变量,成员方法,内部类--%>
<%!
String name = "Hello jsp";
public static void test() {
System.out.println("HelloWorld");
}
static {
test();
}
%>
<%--表达式,输出表达式的内容到界面,翻译成out.print()--%>
<%=name%>
<br>
<%--小脚本,java代码片段--%>
<%
int a = 10;
for (int i = 0; i < 10; i++) {
out.print(i);
}
%>
</body>
</html>
logo.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<h1>
这是logo界面
</h1>
jsp注释
jsp集合了java,html,在jsp中可以书写html注释,java注释,还可以嵌入jsp自己的注释。
<%--jsp注释 既可以注释java内容,也可以注释html内容--%>
<!--html注释 可以在浏览器中看到-->
java注释:只能修饰java代码。单行: // 多行: /* / 文档: /* */
jsp指令:page 和 include
写法:
<%@ 指令名 key=value key=value %>.
page:
idea 默认
<%@ page contentType=“text/html;charset=UTF-8” language=“java” %>
include:静态引入jsp
<%–静态引入–%>
<%@include file=“logo.jsp” %>
taglib:
taglib指令主要是在页面上引入其他已经定义好的标签或者函数。
在taglib指令中的属性:
uri:是当前标签对应的Java代码封装之后的名称空间,唯一
prefix:它是当前在页面上可以使用的标签的前缀。
jsp作用域:
jsp作用域有4个,分别是(范围从小到大):
page(pageContext),范围是当前页面
request(request),范围是一次请求(一次请求可以包含多个界面)
session(session),范围是一次会话(一次会话可以包含多次请求)
application(application),范围是整个应用(一个应用包含多个会话)
…………………………………………
请求转发与重定向
//请求转发--把请求继续交给服务器的另一个资源
//服务端的行为,客户端不知情,客户端还是只发送了一次请求,客户端浏览器地址没有变化
request.getRequestDispatcher("third.jsp").forward(request,response);
//重定向--让客户端重新发送请求到服务器上的另一个资源
//客户端的行为,发送了两次请求,客户端的浏览器地址栏发生变化
response.sendRedirect("third.jsp");
index.jsp:
<html>
<head>
<base href="<%=basePath%>">
<title>$Title$</title>
</head>
<body>
<%
pageContext.setAttribute("name", "zhangsan");//往page作用域中存入数据(大小仅限于当前界面)
out.print(pageContext.getAttribute("name"));//获取数据,根据key获取value
out.print(pageContext.findAttribute("name"));//从page,request,session,application依次查找
%>
<a href="newPage.jsp">跳转</a>
</body>
</html>
newPage.jsp:
<html>
<head>
<base href="<%=basePath%>">
<title>$Title$</title>
</head>
<body>
<%
request.setAttribute("gender","女");//向request作用域中存入数据
session.setAttribute("user","Rose");//向session作用域中存入数据
application.setAttribute("name","Alex");//向application作用域中存入数据
String gen =(String)request.getAttribute("gender");
Object name = pageContext.getAttribute("name");
out.print("request:" + gen);//女
out.print("page:" + name); //null
//请求转发--把请求继续交给服务器的另一个资源
//服务端的行为,客户端不知情,客户端还是只发送了一次请求,客户端浏览器地址没有变化
// request.getRequestDispatcher("third.jsp").forward(request,response);
//重定向--让客户端重新发送请求到服务器上的另一个资源
//客户端的行为,发送了两次请求,客户端的浏览器地址栏发生变化
response.sendRedirect("third.jsp");
%>
</body>
</html>
third.jsp:
<html>
<head>
<base href="<%=basePath%>">
<title>third</title>
</head>
<body>
<%
String gen =(String)request.getAttribute("gender");
out.print("request:" + gen);//女
out.print("<br>");
String user = (String)session.getAttribute("user");
out.print("session:" + user);
out.print("<br>");
String name = (String)application.getAttribute("name");
out.print("application:" + name);
%>
</body>
</html>
jsp内置对象
这9个内置对象,可以在JSP翻译之后的对应的Java源代码的service方法中找到:
·HttpServletRequest request 请求—容器对象
·HttpServletResponse response 响应
·HttpSession session session 容器对象(会话内使用)
·ServletContext application 表示当前项目对象(全局的)—容器对象
·ServletConfig config 专门获取当前这个Servlet(jsp)的配置信息
·Object page = this 它表示的是当前这个JSP页面对象(翻译之后就是一个Servlet程序,这个page本身就是一个Servlet,但是由于在翻译之后赋值给了Object类型,导致不能使用使用Servlet中的功能)。后期把它当作(jsp)第四个容器使用。------不建议使用
·PageContext pageContext 它表示的是当前jsp页面的上下文。它的主要功能之一就是可以获取到JSP页面上的其他八个内置对象。
·Throwable exception 主要是表示当前JSP页面上的异常信息的----必须该页面标记了是错误页面。 通过 exception.getMessage();
·JspWriter out 它相当于我们在Servlet中使用的response.getWrite();
jsp标签:
jsp页面可以嵌入java代码实现业务逻辑。但是后期开发中很少在jsp中书写java代码。在jsp中提供了一些内置的标签,可以帮助我们减少java代码。直接书写,不需要导入任何东西。
jstl 本身是一个标签库–jsp
struts2—框架。里面提供了标签库–jsp
核心思想:尽量在jsp中少写java代码,有很技术替代java. 例如:el jstl jsp
jsp:useBean
javabean对象在java中如何描述:
属性私有,并且对每个属性,有getter setter 方法。
要求需要无参的构造方法,并且是public
User user =new User();
user.setUserName;
user.getUserName;
jsp:useBean
jsp:setProperty
jsp:getProperty
它们三个合起来可以操作一个Java对象,并且可以给这个对象的属性设置值或者取出某个对象的属性值。
<%--相当于
User user = new User();
request.setAttribute("user",user);
--%>
<jsp:useBean id="user" class="com.hisoft.javabean.User" scope="request"/>
<%--相当于
user.setUsername("李四");
--%>
<jsp:setProperty name="user" property="username" value="李四"/>
<%--相当于
out.print(user.getUsername());
--%>
<jsp:getProperty name="user" property="username"/>
jsp:include标签—动态引入其他页面
<%--动态引入其他界面,tomcat会把页面都翻译成java文件--%>
<jsp:include page="logo.jsp"/>
jsp:forward标签
<%--相当于
request.getRequestDispatcher("third.jsp").forward(request,response);
--%>
<jsp:forward page="third.jsp"></jsp:forward>
jsp获取sql
<%
UserDao userDao = new UserDao();
List list = userDao.executeQueryForList();
for (int i = 0; i < list.size(); i++) {
User user = (User)list.get(i);
out.print(user.getUsername()+user.getId()+user.getPassword()+user.getBirthday());
}
%>