第三章:jsp入门
第1节:jsp概述
知识点1:动态网页的执行原理
1.容器初始化Servlet实例,根据请求方法,调用相应的doXXX方法,并初始化请求和响应对象,作为doXXX方法的参数使用;
2.执行doXXX方法后,将响应对象中的数据流写到客户端;
3.客户端浏览器将收到的数据进行解析,显示给用户;
知识点2: JSP的功能与特性
(一)什么是jsp
**JSP(Java Server Pages)**java服务器端页面,是JavaEE规范中的Web组件,用来编写动态页面.
(二)jsp的特点
1.JSP运行在服务器端,本质是Servlet
2.JSP文件以.jsp为后缀,在工程目录中存在WebContent目录下
3.JSP文件可以直接在浏览器中访问
4.JSP文件中的内容就是 HTML+Java代码,静态部分使用HTML和文本即可,动态部分使用Java代码
知识点3: JSP的执行流程解析
(一)翻译
Web服务器找到blank.jsp,对其进行翻译,生成blank_jsp.java文件,就是Servlet;查看路径: 工作空间E:\prj_eclipse_rs.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\0430-web\org\apache\jsp
翻译的命名方式:
单词.jsp->单词_jsp.vava
数字.jsp->_数字_jsp.java
(二)编译
服务器将blank_jsp.java编译成类文件blank_jsp.class,翻译和编译的过程遵守Servlet规范,因此说JSP的本质也是Servlet;
(三)实例化
服务器实例化类blank_jsp.class
(四)提供服务:
调用类中的_jspService方法提供服务
总结:
1.为什么要使用JSP组件?
Servlet生成动态页面比较繁琐,使用JSP生成动态页面比较便捷,因为其中的静态内容可以使用HTML生成
2.JSP执行的流程是什么?
JSP的执行过程是:翻译-编译-实例化-提供服务
3.JSP的本质
JSP的本质就是Servlet,不过是服务器将JSP进行了翻译和编译;可以说,JSP也是一个Java类;
第2节:jsp基本元素
知识点1:脚本元素
(一)什么是脚本元素
脚本元素可以用来包含任意Java代码
(二)语法格式
<% Java代码 %>
(三)特点
服务器翻译脚本元素时,将把其中Java代码直接翻译到_jspService方法中,如果语法错误,将在浏览器中提示错误
<body>
blank.jsp<br/>
<%
System.out.println("Hello Jsp!");
%>
</body>
out.write("blank.jsp<br/>\r\n");
System.out.println("Hello Jsp!");
out.write("\r\n");
知识点2:表达式元素
(一)什么是表达式元素
表达式元素用来向页面输出动态内容
(二)语法格式
<%= Java代码 %>
(三)特点
服务器翻译表达式元素时,将把其中Java代码部分的返回值使用out.write语句输出
<body>
<%=request.getRemoteAddr()%>
</body>
out.write("<body>\r\n");
out.print(request.getRemoteAddr());
out.write("\r\n");
out.write("</body>\r\n");
知识点3:模版元素
(一)什么是模板元素
模板元素指JSP中静态HTML或者XML内容
(二)模板元素
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv=*"Content-Type"* content=*"text/html; charset=UTF-8"*>
<title>Insert title here</title>
</head>
<body>
知识点4:注释元素
在JSP中可以使用注释元素,有三种情况
(一)JSP注释
1.语法
格式为<%–JSP注释–%>;
2.特点
JSP的注释只有在源代码中可见,翻译时已经忽略;
<body>
<%--JSP注释 --%>
<%=request.getRemoteAddr()%>
</body>
out.write("</head>\r\n");
out.write("<body>\r\n");
out.print(request.getRemoteAddr());
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>");
(二)HTML注释
1.语法
<!--HTML注释-->
2.特点
在JSP中,除了使用JSP注释外,还可以使用HTML注释,
1.HTML注释翻译时会被翻译成
out.write("<!-- HTML注释 -->\r\n"),
2.会被返回到客户端,
3.在网页源代码能看见
4.但是不显示到页面中;
<body>
<!-- HTML注释 -->
<%=request.getRemoteAddr()%>
</body>
out.write("</head>\r\n");
out.write("<body>\r\n");
out.write("<!-- HTML注释 -->\r\n");
out.print(request.getRemoteAddr());
out.write("\r\n");
out.write("</body>\r\n");
3.Java注释
(1)语法
单行://
多行:/**/
doc:/** */
(2)特点
JSP中的Java代码部分,可以使用Java注释;Java注释会翻译到.java文件中,但是编译时忽略
知识点5:声明元素
(一)什么是声明元素
在JSP文件中定义类的成员变量或方法的元素叫做声明元素
(二)语法
<%!声明语句%>
(三)特点
声明元素被翻译到Java类中,而不是_jspService方法中;
实际中使用不多;
知识点6:内置对象概念
(一)什么是内置对象
内置对象指的是在JSP中可以直接使用的对象,不需要声明,直接使用固定的名字使用即可;例如<%=request.getRemoteAddr()%>中的request就是内置对象;
(二)JSP的9大内置对象
1.分类
1.与输入/输出有关的对象: request、response、out
2.与属性作用域有关的对象:session、application、pageContext
3.与Servlet 相关对象:page、config
4.与错误处理有关的:exception
2.4大作用域
作用域范围从小到大顺序:page---->request---->session---->application
page 当前页面有效(页面跳转后无效)
request 同一次请求有效(请求转发后有效,重定向后无效)
session 同一次对话有效(同一个浏览器在退出关闭之前都有效)
application 全局有效(整个项目)
第3节:Servlet与JSP的作用
知识点1:Servlet与JSP的作用总结
1.JSP的作用
Servlet和JSP都可以生成动态页面;然而,显然JSP更适合生成动态页面,因为其中的静态部分可以直接使用HTML即可.
2.Servlet的作用
1.接收来自JSP的请求,
2.处理请求,
3.然后转到JSP页面把结果显示给客户端看
知识点2:Servlet与JSP之间跳转的方式
1.响应重定向
响应接口中提供了该方法
(1)使用方法
response.sendRedirect(request.getContextPath()+”/xxx”);
(2)特点
1.实际是两次HTTP请求,
2.服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的
3.浏览器地址栏发生变化,显示的是第二次请求的地址
2.请求转发
RequestDispatcher接口定义了请求转发的方法
要使用forward方法,需要先获得RequestDispatcher对象;请求接口中提供了获得该对象的方法:
(1)使用方法
request.getRequestDispatcher(url).forward(request,response);
(2)特点
1.客户端和浏览器只发出一次请求
2.请求转发是在服务器内部进行转发,
3.浏览器地址栏还是显示第一次请求的URL,没有发生变化
3.Servlet与JSP之间跳转的方式练习
①创建登录的login.jsp,用户名和密码,提交按钮
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/0430-web/LoginServlet" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
<input type="submit" name="提交"/>
</form>
</body>
</html>
②创建LoginServlet,处理登录的请求
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到用户名
String username = request.getParameter("username");
//得到密码
String password = request.getParameter("password");
//判断用户名和密码是否正确
//正确
if (username.equals("Tom") && password.equals("123")) {
//请求转发到成功页面
request.getRequestDispatcher("/success.jsp").forward(request, response);
}else {//错误
//重定向到错误页面
response.sendRedirect(request.getContextPath()+"/error.jsp");
}
}
③创建success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
success!!!
</body>
</html>
④创建error.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
error!!!
</body>
</html>
⑤测试
知识点3:请求属性的使用
1.如果需要在Servlet,JSP之间跳转时,同时把一些自定义的、或者通过数据库查询的、或者调用其他资源获得的数据传递到下一个资源时,就可以把这些数据设置为请求的属性即可。
2.请求属性可以是任意类型的对象,可以用setAttribute方法将对象作为属性存储到请求对象中
3.请求参数是用户提交请求时,自动封装到请求对象中的一些输入信息,都是String类型
1.向request作用域放值,使用请求转发后在jsp页面取值
①Servlet调用request.setAttribute(name,value)向请求作用域里放值
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到用户名
String username = request.getParameter("username");
//得到密码
String password = request.getParameter("password");
//判断用户名和密码是否正确
//正确
if (username.equals("Tom") && password.equals("123")) {
//向请求作用域放入数据,准备在页面接收并显示
request.setAttribute("username", username);
//请求转发到成功页面
request.getRequestDispatcher("/success.jsp").forward(request, response);
}else {//错误
//重定向到错误页面
response.sendRedirect(request.getContextPath()+"/error.jsp");
}
}
②jsp使用request.getAttribute(name)取得值
<body>
success!!!
<%
String username=(String)request.getAttribute("username");
%>
<%=username%>
</body>
③测试