JSP 总结

Posted 王睿丶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JSP 总结相关的知识,希望对你有一定的参考价值。

原创不易,只想要一个赞,感谢!

1、页面乱码问题

链接:https://blog.csdn.net/qq_26748397/article/details/77943034

我正在初学JSP,我犯了第一个错误,再次登记一下!

原因:
JSP中默认使用iso-8859-1字符编码方式,而它不支持中文,所以一旦我们的代码有中文,就会出现乱码
应将其改为:UTF-8,如图所示:

也就是我们熟称的“万国码”!改成这个之后,写入中文代码就不会再出现乱码了!

2、注释、表达式、注意事项

在JSP中实现注释的方式有如下三种:

html 注释:<!–HTML 注释 ->还漏写了一个杠,注意。

JSP 注释:<%–JSP 注释 --%>

JSP 脚本注释:<%//JSP 单行注释 %>、<%/*JSP 多行注释 */%>

表达式:
使用out 对象输出信息时,需要在HTML 标签中进行嵌套,页面会显得混乱。JSP 还提供了另外一种输出显示的方式,就是借助表达式实现输出显示。表达式的语法如下:
<%=Java 表达式%>
tip:<%=title %>

注意:使用表达式进行输出时,在表达式的结尾处不能添加分号来表示结束,否则JSP 会提示错误。

3、错误调试方法

4、登录注册界面点击按钮无法获取值在界面显示

之前,老是遇到一个问题,比如我在一个登录界面,如图:

注册界面:

之后就跳转到这个错误的界面:

那么造成这样的问题,大部分的原因都是因为,找不到正确的网址!那么造成这种原因,只有可能是因为以下几点原因:

一丶

二丶
每次写完代码后,记得要先保存,然后再关闭服务器,再点击打开,重新运行下注册界面,点击提交,就不会再出现这样的错误了,因为服务器还需要重新在编译一次jsp代码,否则就跟没改过代码一样!

三丶

5、request.setAttribute()后,在action中为什么取不到值?

看网上有两种说法:
一丶:
不能这么请求。
因为页面上的request 和使用form提交的request 请求 不是一个对象。

二丶:
request 只在当前页面有效

正确写法应该是放在form里

<form action="WebPay.do" name="webPayForm" onsubmit="return _validation( this )">
<input id="test" name="test" value="test"/><!-- 要传到action的 -->
...
</form>
//action 中
request.getParameter("test")

具体参考网址:https://zhidao.baidu.com/question/360281724326530812.html?fr=iks&word=JSP%D6%D0%CE%AA%CA%B2%C3%B4%CA%B9%D3%C3setAttribute%B1%A3%B4%E6%D6%C1%C8%A1%B2%BB%B3%F6%C0%B4&ie=gbk

6、request.getRequestDispatcher(“login_success.jsp“).forward(request,response)

今天我遇到的问题是:注册界面使用 转发的方式 进行页面跳转时,无法利用request 对象取到用户名与密码的值。

具体原因是:点击查看

那么这句话的意思是:
这句话实际上就是实现跳转的,它把跳转路径变成了“login_success.jsp”了,就这么简单。

7、跳转页面的三种方式

一丶 重定向

response.sendRedirect(“index.jsp”)

二丶 转发
request.getRequestDispatcher(“index.jsp”).forward(request,response);

三丶 jsp 内置的跳转

<jsp:forward page=“index.jsp”></jsp:forward>

四丶 重定向与转发的区别
【1】重定向的特点

  1. 重定向是在客户端处理的请求跳转信息
  2. 而且浏览器中会显示一个新的 URL 地址
  3. 请求之间的数据会丢失,所以从另外一个页面想用 request.getParameter(String name) 是得不到值的!

【2】转发的特点

  1. 转发是在服务器处理的请求跳转信息
  2. 浏览器的 URL 不会有变化
  3. 可以携带之前的 request 对象 传给新的界面,这样就可以保证能取的到值了!

【3】jsp 内置的跳转

  1. 与转发有一个共同点,都是不会改变浏览器的 URL

8、request 内置对象

一丶 request 对象
request 对象中保存了用户请求的数据,通过调用相关方法就可以实现请求数据的读取

二丶 request 对象获取数据的常用方法:
getParameter(String name)
返回指定名称参数的值,返回值类型为 String 类型,若无对应名称的参数,返回NULL。

getParameterValues(String name)
返回一组具有相同名称的参数值,返回类型为 String 类型的数组

setCharacterEncoding(“UTF-8”)
设置请求的编码方式

效果图:


index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  
 	 //	action 点击事件后跳转的链接,method 采用 get 请求方式
    <form action="loginSuccess.jsp" method="get">	
	用户名:<input type="text" name="username" value="">
	密    码:<input type="text" name="password" value="">
	<button type="submit">提交</button>
	</form>
    
  </body>
  
</html>

loginSuccess.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'loginSuccess.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <%
	
		String username=request.getParameter("username");	//	读取用户名
		String password = request.getParameter("password");	//	读取密码并输出
		out.print("用户名:"+username+"</br>");
		out.print("密码:"+password+"</br>");
	
	%>
  </body>
</html>

三丶 中文乱码问题

【1】POST 请求

设置请求的编码方式:
request.setCharacterEncoding(“UTF-8”);
设置响应的编码方式:
request.setCharacterEncoding(“UTF-8”);

如果在 JSP 中已经对 page 指令中的 contentType 中的 charset 设置了编码方式为 UTF-8的化,则该句可以省略

【2】GET 请求

new String(s.getBytes(“ISO-8859-1”),“UTF-8”);

9、GET 与 POST 的区别

一丶 网络请求区别

POST 请求
是否在URL中显示参数: 否
数据传递是否有长度限制: 无
数据安全性: 高
URL 是否可以传播: 否

GET 请求
是否在URL中显示参数: 是
数据传递是否有长度限制: 有
数据安全性: 低
URL 是否可以传播: 是

二丶 中文乱码区别

【1】POST 请求

设置请求的编码方式:
request.setCharacterEncoding(“UTF-8”);
设置响应的编码方式:
request.setCharacterEncoding(“UTF-8”);

如果在 JSP 中已经对 page 指令中的 contentType 中的 charset 设置了编码方式为 UTF-8的化,则该句可以省略

【2】GET 请求

new String(s.getBytes(“ISO-8859-1”),“UTF-8”);

10、小项目【实现登录界面】

直接上效果图:



需求:现在要求你编写一个登录界面,假定用户名:系统管理员,密码:123 可以注册成功,其他用户拒绝注册,正确实现页面的跳转和提示

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  
    <form action="loginSuccess.jsp" method="get">
	用户名:<input type="text" name="username" value="">
	密    码:<input type="text" name="password" value="">
	<button type="submit">提交</button>
	</form>
	
  </body>
</html>

loginSuccess.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'loginSuccess.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
  
    	<%
	
		String username=request.getParameter("username");
		String password = request.getParameter("password");
//		out.print("用户名:"+username+"</br>");
//		out.print("密码:"+password+"</br>");
		if(username.equals("系统管理员")&&password.equals("123")){
			response.sendRedirect("true.jsp");
		}else{
			response.sendRedirect("false.jsp");
		}
		
	%>
  </body>
</html>

true.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'true.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>注册成功</h1>
  </body>
</html>

false.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'false.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    <h1>注册失败</h1>
  </body>
</html>

11、知识总结

一丶 JSP简介

JSP 全名为 Java Server Pages,其根本是一个简化的 Servlet 设计,他实现了在Java中使用HTML标签。JSP 是一种动态网页技术标准也是JavaEE的标准。JSP与Servlet一样,是在服务器端执行的。

二丶 JSP页面元素构成

  • 指令

  • 表达式

  • 小脚本

  • 声明

  • 注释

  • 静态内容

三丶 JSP指令
【1】page指令
通常位于jsp页面的顶端,同一个页面可以由多个page指令。
【2】include指令
将一个外部文件嵌入到当前JSP文件中,同时解析这个页面中的JSP语句
【3】taglib指令
使用标签库定义新的自定义标签,在JSP页面中启用定制行为

四丶 JSP指令—page指令语法


【1】language
指定JSP页面使用的脚本语言
默认值:Java
【2】import
通过该属性来引用脚本语言中使用到的类文件
默认值:无
【3】contentType
用来指定JSP页面所采用的编码方式
默认值:text/html; charset=ISO-8859-1

五丶 JSP注释

<!--html注释-->		//客户端可见

<%--html注释--%>	//客户端不可见

jsp脚本注释:
//单行注释
/**/多行注释		//客户端不可见

六丶 JSP脚本
由一对 <%%> 标签构成

效果图:

代码:

  <body>
    <%
    	out.println("大家好,我叫王睿");
     %>
  </body>

那么我们也可以理解为,写在<%%>这一对标签里的内容,它就是一种JSP脚本!

七丶 JSP声明

<%!

%>

  <body>
    <%!
    	String s = "张三";		//声明了一个字符串变量
    	int add(int x,int y)	//声明了一个返回整型的函数,实现了两个整数求和
    	{
    		return x+y;
    	}
     %>
  </body>

注意:如果要是不加感叹号,那么函数就会报错,因为加感叹的作用是声明的意思!

八丶 JSP表达式

  <body>
    <%!
    	String s = "张三";		//声明了一个字符串变量
    	int add(int x,int y)	//声明了一个返回整型的函数,实现了两个整数求和
    	{
    		return x+y;
    	}
     %>
     
 
	你好,<%=s %>
	<br>
	x+y=<%=add(3,-在 JSP 中的 <% %> 代码片段中添加链接

JSP基础

day06-jsp

jsp

JSP语法

JSP 语法