JavaWeb(7)之JSP

本文详细介绍了JSP的概述、运行原理及脚本元素,包括声明标签、表达式标签和程序代码标签的使用。探讨了JSP开发中的路径问题,解析了请求转发与重定向的区别,并通过一个登录案例展示了MVC模式的应用。文中还涵盖了如何在实际开发中处理请求数据和页面跳转,以及登录成功人数的统计方法。
摘要由CSDN通过智能技术生成

JSP的概述

什么是JSP

在这里插入图片描述
JSP: Java Server Pages (ava服务器端页面),其实就在HTML中嵌入Java代码。

为什么学习JSP

SUN公司提供了动态网页开发技术: Servlet. Servlet 自身有一些缺点, SUN公司发现了这些问题,推出了一个新的动态网页开发技术JSP。
Servlet的缺点:
Servlet 需要进行配置,不方便维护。
Servlet 很难向网页中输出HTML页面内容

JSP的运行原理

JSP的简单使用

创建一个JSP页面

在这里插入图片描述
在这里插入图片描述
创建JSP页面还自动创建模板,但是要将编码设置为UTF-8

<%@ 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>
	<h1>Hello JSP </h1>
</body>
</html>

JSP需要发布到服务器中才可以运行的
发布项目到Tomcat中
访问JSP页面

运行结果:
在这里插入图片描述
运行原理:
在这里插入图片描述
JSP文件翻译成Java文件,将这个Java文件编译生成class文件,运行class文件,而class文件最终继承的是httpservlet。

JSP脚本元素

JSP脚本元素概述

JSP= HTML +Java代码+ JSP自身东西
JSP的脚本元素就是在JSP中嵌入Java代码。

脚本元素的分类

声明标签

语法:
<%!变量或方法声明%>
写在这个脚本中的代码,翻译成Servlet内部的成员变量或成员方法。、
因为Servlet是一个线程不安全类,所以不推荐使用。

用法:

<body>
	<%! 
		//声明变量
		int a=3;
	%>
</body>

表达式标签

语法: <%=表达式%>
写在这个脚本中的代码, 翻译成方法内部的out,prin();当中的内容,显示在页面上。

用法:

	<%=
		a
	%>

运行结果后可以将声明便签好中的a输出到页面上

程序代码标签

语法:
<% 程序代码%>
写在这个脚本中的代码, 翻译成方法内部的局部变量或方法内部代码片段。
用法:

推荐使用程序代码标签,而不是声明标签,因为声明标签是写在Servlet中,而Servlet是一个线程不安全类。

JSP的开发模式之MVC模式

MVC模式简介

JSP开发模式

在这里插入图片描述

开发中的路径问题

web开发中的路径问题
web开发中目录路径问题的解决

什么时候会遇见路径问题

提供一些页面,在页面中会提供链接或者表单,当点击链接或者表单的时候需要进行提交,提交到Servlet中。从页面向Servlet发送请求的地址(路径)应该如何编写。

路径的分类

先创建一个动态web项目:
在这里插入图片描述
分别使用相对路径和绝对路径,使根目录下的demo1.jsp和demo1目录下的demo1.jsp,访问ServletDemo1。

相对路径

相对路径的写法:
 相对路径不是以 / 开头的。
 是以 ./(当前路径)和 …/(上一层路径)开头的。
相对路径的使用:

  •  在根路径下的页面访问Servlet
     demo1的访问路径:
     http://localhost:8080/web02/demo1.jsp
     ServletDemo1的访问路径:
     http://localhost:8080/web02/ServeltDemo1
    在这里插入图片描述

  •  在某个目录下的页面访问Servlet
     demo1的访问路径:
     http://localhost:8080/web02/demo1/demo1.jsp
     ServletDemo1的访问路径:
     http://localhost:8080/web02/ServeltDemo1
    在这里插入图片描述

绝对路径(推荐使用)

绝对路径的写法:
通常以 / 开始的路径

使用绝对路径,不需要关心当前文件和要请求的文件的相对位置的关系!!!

  • 注意:
    绝对路径分成服务器端路径和客户端路径
    客户端路径:需要带工程名
    服务器端路径:不需要带工程名

在这里插入图片描述

案例需求介绍

案例需求描述

提供登录页面,用于用户登录(用户名和密码需要查询数据库)。如果登录失败,需要回到登录页面(给出提示信息)。如果登录成功,页面进行跳转,在成功页面上显示登录成功的总人数。

案例流程分析

在这里插入图片描述

Request作为域对象存取数据

Request作为域对象的API

向Request域中保存数据
在这里插入图片描述
从Request域中获取数据
在这里插入图片描述
从Request域中移除数据
在这里插入图片描述

Request(请求)作为域对象的作用范围

Request对象其实就是从客户端浏览器向服务器发送的一次请求信息的封装。那么实质上向Request中所保存的数据有效期也是一次请求范围。

一次请求范围:从客户端浏览器向服务器发送一次请求, 服务器针对这次请求对浏览器作出响应。当服务器作出响应之后,请求对象就销毁了,保存在其中的数据就无效了。

请求转发和重定向完成页面的跳转

请求转发

通过ServletReguest对象获得ReguestDispatcher对象
在这里插入图片描述
再根据RequestDispatcher中的方法进行请求转发
在这里插入图片描述
代码实现:

创建一个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>
	<h1>跳转后的页面</h1>
</body>
</html>

创建一个Servlet

@WebServlet("/ServletDemo1")
public class ServletDemo1 extends HttpServlet {
   
	private static final long serialVersionUID = 1L;

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
   
		// 1. 请求转发的方式
		/*
		 * RequestDispatcher dispatcher = request.getRequestDispatcher("/demo1.jsp");
		 * dispatcher.forward(request, response);
		 */
		// 也可以一条写完
		request.getRequestDispatcher("/demo1.jsp").forward(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值