web开发 jsp页面1 include page 简单页面跳转

注释

jsp页面代码编译后放到服务器的位置:
D:\Program Files (x86)\xampp\tomcat\work\Catalina\localhost\chapter3\org\apache\jsp
注释快捷键:ctrl+shift+/
取消注释快捷键:ctrl+shift+\

<body>
	<pre>
JSP中一共有两种类型的注释
	1.显示注释
		能够在客户端中查看的注释
		1.继承HTML风格的注释 &lt;!-- HTML注释 --&gt;
		<!-- HTML注释 -->
	2.隐式注释
		不能在客户端查看的注释
		1.JSP自己的注释	&lt;!-- JSP自己的注释 --&gt;
		<%-- JSP自己的注释 --%>
		2.继承Java风格的注释
		// 单行注释
		/* 多行注释 */
	</pre>
	<%
		//这是单行注释
		/* 这是多行注释 */
	%>
</body>

Scriptlet脚本小程序

现在一般不在jsp页面中写Java代码了,之前用的时候看这部分内容

<body>
	<%--
		Scriptlet脚本小程序
			JSP一共又三种Scriptlet脚本小程序:
				第一种:Java脚本段,可以写Java代码,定义局部变量,编写语句等
				<%
					//可以写Java代码,和Java语法一样
				%>
				生成的代码在servlet中的service方法中
				第二种:声明,声明全局变量、方法、类等
				<%!
					//声明全局变量
				%>
				生成的代码在servlet的类体中
				第三种:输出表达式,可以输出变量或字面量
				<%=数值 %>
				生成的代码在servlet中的service方法中,相当于out.print()输出简化
	 --%>
	 <%
	 	//out.print(str);这里不能输出局部变量
	 	out.print(num);
	 %>
	 <%--第一种 Java脚本段,可以写Java代码,定义局部变量,编写语句等 --%>
	 <%
	 	//定义局部变量
	 	String str = "Hello Jsp";
	 	//输出内容到控制台
	 	System.out.println(str);
	 	//输出内容到浏览器
	 	out.print(str);
	 %>
	 <%--第二种  声明,声明全局变量、方法、类等--%>
	 <%!
	 	//声明全局变量
	 	int num = 10;
	 %>
	 <%
	 	out.print(str);
	 	//输出全局变量
	 	out.print("全局变量" + num);
	 %>
	 <%--第三种 输出表达式,可以输出变量或字面量 --%>
	 <%=str %>
</body>

include包含

静态包含

<body>
	<%--
		include静态包含
			格式:<%@include file="要包含的页面地址"%>
			特点:
			1、将内容进行了直接的替换
			2、静态包含只会生成一个源码文件,最终的内容全部在_jspservice方法体中(源码文件中)
			3、不能出现同名变量
			4、运行效率高一点点,耦合性较高,不够灵活
			
			通过包含可以实现更方便的修改重复代码
	 --%>
	<%@include file="04_header.jsp" %>
	<h2>主体内容</h2>
	<%
		// 这里不能定义,因为在header里面有了,不能出现同名变量
		// int num = 1;
	%>
	<%@include file="04_footer.jsp" %>
</body>

动态包含(常用)

<body>
	<%--
		include动态包含
			格式:<jsp:include page="要包含的页面路径"></jsp:include>
			特点:
				1、动态包含相当于方法的调用
				2、动态包含会生成多个源码文件
				3、可以定义同名变量
				4、效率高,耦合度低
			注:
				当动态包含不需要传递参数时,include双标签之间不要有任何内容,包括换行和空格
			
			使用动态包含传递参数
				<jsp:include page="要包含的页面路径">
					<jsp:param name="参数名" value="参数值"/>
				</jsp:include>
				注:name属性不支持表达式,value属性支持表达式
				
				获取参数:
					request.getParameter(name);通过指定参数名获取参数值
	 --%>
	<jsp:include page="04_header.jsp"></jsp:include>
	<h2>主题内容</h2>
	<%
		//可以定义
		int num2 = 2;
		//这里可以定义变量文件名,后面直接用
		String url="04_footer.jsp";
	%>
	<jsp:include page="<%=url %>"></jsp:include>
	<%--动态包含传递参数 --%>
	<jsp:include page="<%=url %>">
		<jsp:param name="uname" value="admin"/>
		<jsp:param name="msg" value="<%=num2 %>"/>
	</jsp:include>
</body>

header.jsp和footer.jsp文件

<body>
	<h2>头部内容</h2>
	<%
		int num = 1;
		int num2 = 2;
	%>
</body>
<body>
<h2>底部内容</h2>
<%
	//获取动态包含传递的参数
	String uname = request.getParameter("uname");
	String msg = request.getParameter("msg");
	out.print(uname + "," + msg);
%>
</body>

JSP的四大域对象

JSP的四大域对象
	page作用域
		在当前页面有效,跳转后无效
	request作用域
		在一次请求中有效,服务端跳转有效,客户端跳转无效
	session作用域
		在一次会话中有效,服务端和客户端跳转有效。一般用于用户登录,如登录淘宝后,跳转多次仍然有登录信息
	application作用域
		在整个应用中有效
		
JSP中跳转方式
	1、服务端调转
		<jsp:forward page="跳转的页面地址"></forward>
	2、客户端跳转
		超链接

06_JSP_domain_four.jsp

<body>
	 <%
	 	//设置page范围的域对象
	 	pageContext.setAttribute("name1", "zhangsan");
	 	//设置request范围的域对象
	 	request.setAttribute("name2", "lisi");
	 	//设置session范围的域对象
	 	session.setAttribute("name3", "wangwu");
	 	//设置application范围的域对象
	 	application.setAttribute("name4", "zhaoliu");
	 %>
	 
	 <%--jsp中服务端跳转 --%>
	 <%-- <jsp:forward page = "06_JSP_domain_four_02.jsp"></jsp:forward> --%>
	 <%-- 超链接跳转 --%>
	 <a href="06_JSP_domain_four_02.jsp">跳转</a>
</body>

06_JSP_domain_four_02.jsp

<body>
	 <%
	 	//获取域对象中的值
	 	out.print("page范围:" + pageContext.getAttribute("name1") + "<br>");
	 	out.print("request范围:" + request.getAttribute("name2") + "<br>");
	 	out.print("session范围:" + session.getAttribute("name3") + "<br>");
	 	out.print("application范围:" + application.getAttribute("name4") + "<br>");
	 %>
</body>

使用forward服务端跳转

page范围: null
request范围:lisi
session范围:wangwu
application范围: zhaoliu

使用超链接客户端跳转

page范围: null
request范围:null
session范围:wangwu
application范围:zhaoliu

跳转后,再次打开浏览器

page范围: null
request范围: null
session范围: null
application范围: zhaoliu

简单的登录页面

jsp实现登录界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>登录</title>
</head>
<body>
	<form action="loginServlet" method="post">
		姓名:<input type="text" name="uname"><br>
		密码:<input type="password" name="upwd"><br>
		<button>登录</button> 
		<%-- 获取后台设置在作用域的数据并显示 --%>
		<span style="color:red; font-size: 12px"><%=request.getAttribute("msg") %></span>
	</form>
</body>
</html>

java实现loginServlet服务器

package com.xxxx.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置客户端的编码格式
		request.setCharacterEncoding("UTF-8");
		//接受客户端传递的参数
		String uname = request.getParameter("uname");
		String upwd = request.getParameter("upwd");
		
		//判断参数是否为空
		if(uname == null || "".equals(uname.trim()) || upwd == null || "".equals(upwd.trim())) {
			//提示用户信息
			request.setAttribute("msg", "用户姓名或密码都不能为空");
			//请求转发跳转到login.jsp
			request.getRequestDispatcher("login.jsp").forward(request, response);
			return;
		}
		
		//判断账号密码是否正确 要求:uname=admin upwd=123456
		if(!"admin".equals(uname) || !"123456".equals(upwd)) {
			//提示用户信息
			request.setAttribute("msg", "登陆失败!");
			//请求转发跳转到login.jsp
			request.getRequestDispatcher("login.jsp").forward(request, response);
			return;
		}
		//登陆成功
		//设置登录信息到session作用域
		request.getSession().setAttribute("uname", uname);
		//跳转到index.jsp
		response.sendRedirect("index.jsp");
	}
}

jsp实现登录后的界面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>登录成功!</title>
</head>
<body>
	<h2>欢迎<%=session.getAttribute("uname") %>登录!</h2>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值