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】重定向的特点
- 重定向是在客户端处理的请求跳转信息
- 而且浏览器中会显示一个新的 URL 地址
- 请求之间的数据会丢失,所以从另外一个页面想用 request.getParameter(String name) 是得不到值的!
【2】转发的特点
- 转发是在服务器处理的请求跳转信息
- 浏览器的 URL 不会有变化
- 可以携带之前的 request 对象 传给新的界面,这样就可以保证能取的到值了!
【3】jsp 内置的跳转
- 与转发有一个共同点,都是不会改变浏览器的 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 中的 <% %> 代码片段中添加链接