JavaWeb(三)——JSP入门

第三章: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>

③测试

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/yubo_830/article/details/105940700
今日推荐