JSP概述
- JSP(Java Sever Pages)
运行在服务器端的Java页面
使用HTML嵌套Java代码实现
- 新建jsp页面
<%@ page language="java" import="java.util.Arrays"
contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>第一个jsp页面</title>
</head>
<body>
</body>
</html>
- 设置JSP页面属性:page
语法:
<%@ page language=“属性值” import=“属性值” contentType=“属性值”%>
注释:
language:指定JSP页面使用的脚本语言
import:通过该属性来引用脚本语言中使用到的类文件(导包)
contentType:用来指定页面的MIME类型,以及字符编码方式
- 声明变量
<%%>声明局部变量
<%!%>声明全局变量
- 实现页面输出
1、使用out对象
- out对象是JSP的内置对象
- 无需实例化即可使用
- 实现数据的输出显示
out对象的方法 | 说明 |
---|---|
print() | 向页面输出显示 |
println() | 想页面输出显示,在结尾处添加换行 |
2、<%=%>
如:<%=title%>(无;)
示例:使用Java来输出HTML标签
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
// 导包 关键字import
<%@ page import="java.util.*" %>
<%@ page import="java.util.Map.*" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>使用Java来输出HTML标签</title>
<!--创建集合ids,names-->
<% List ids = new ArrayList(); %>
<% List names = new ArrayList(); %>
<%
// 添加元素
ids.add(1);
ids.add(2);
ids.add(3);
names.add("家具");
names.add("文具");
names.add("玩具");
%>
</head>
<body>
<!-- 使用Java来输出HTML标签 -->
<%
// 使用out对象输出
out.print("<table>");
out.print("<tr><td>种类编号</td><td>种类名称</td></tr>");
for(int i=0;i<ids.size();i++){
out.print("<tr><td>"+ids.get(i)+"</td><td>"+names.get(i)+"</td></tr>");
}
out.print("</table>");
%>
<!-- 将Java代码和html标签分离-->
<table>
<tr><td>种类编号</td><td>种类名称</td></tr>
<%
for(int i=0;i<names.size();i++){
%>
// 使用<%=%>方式输出
<tr><td><%=ids.get(i) %></td><td><%=names.get(i) %></td></tr>
<%
}
%>
</table>
<!--拓展练习-->
<!-- 将输出到select标签中 -->
<%
Map<Integer,String> cts = new HashMap<>();
cts.put(1, "玩具");
cts.put(2, "文具");
cts.put(3, "书籍");
%>
<%
Set<Entry<Integer,String>> e = cts.entrySet();
Iterator<Entry<Integer,String>> it = e.iterator();
%>
<select name="ct_id">
<%
while(it.hasNext()){
Entry<Integer,String> entry = it.next();
%>
<option value="<%=entry.getKey() %>"><%=entry.getValue() %></option>
<%
}
%>
</select>
<br />
<!-- 将输出到radio标签中 -->
<%
Set<Integer> keySet = cts.keySet();
for(Integer key:keySet){
%>
<input type="radio" name="ctl" value="<%=key %>" /><%=cts.get(key) %>
<%
}
%>
</body>
</html>
- 添加注释
HTML注释:<!–HTML注释-- >
JSP注释:<%–JSP注释–%>
JSP脚本中注释:<%//单行注释%>、 <%/多行注释/%>
- 常见错误
404错误—找不到访问的页面或资源
- 运行时,URL输入错误
- 将页面放在WEB-INF下
- 外部启动Tomcat,未部署项目
500错误----JSP页面代码有误
- JSP页面代码有错误
页面无法显示
- 未启动Tomcat
- 数据的传递
请求对象:request
方法 | 说明 |
---|---|
String getParameter(String name) | 根据表单组件名称获取提交数据 |
String[] getParameterValues(String name) | 获取表单组件对应多个值时的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码 |
RequestDispatcher getRequestDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forward()方法用于转发请求 |
示例:
<!--单个-->
<input type="text" name="userName">
String userName=request.getParameter("userName");
<!--多个-->
<input type="checkbox" name="hobby" value="1" />足球
<input type="checkbox" name="hobby" value="2" />篮球
<input type="checkbox" name="hobby" value="3" />排球
String[] hobbies=request.getParameterValues("hobby");
响应用户请求:response
示例:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
String cu_name=request.getParameter("cu_name");
String cu_phone=request.getParameter("cu_phone");
// 假设用户名是刘德华,密码是9999
// 正确跳转至欢迎页面,如果不正确而返回登陆页面
if("刘德华".equals(cu_name) && "9999".equals(cu_phone)){
//显示传递
response.sendRedirect("/web02/welcome.jsp?cu_name="+cu_name);
//隐式传递
//.getRequestDispatcher("")将页面跳转 里面接收页面的跳转地址
//.forward(request, response)将当前页面中的request和response两个对象,直接传递给下一个页面
//request.getRequestDispatcher("welcome.jsp").forward(request, response);
/*两者的区别
localhost:8080/web02/welcome.jsp?cu_name=???
localhost:8080/web02/login1.jsp?cu_name=%E5%88%98%E5%BE%B7%E5%8D%8E&cu_phone=9999
response属于客户端行为 是由客户端(浏览器行为)来发起跳转请求的
request属于服务端行为是由服务器内部来进行跳转的 如果服务器跳转了页面的地址 浏览器不知道 所以浏览器的地址还保留在上一个页面的地址
*/
}else{
// 返回登陆界面
// response.sendRedirect("接收1个字符串的参数 为需要跳转的地址");
response.sendRedirect("/web02");
// 另一种方法,用的较少不推荐
//out.print("<script type='text/javascript'>location.href='/web02'</scropt>");
}
%>
</head>
<body>
</body>
</html>
- 内置对象:可直接使用的对象
说明 | 对象 |
---|---|
请求对象 | request |
输出对象 | out |
响应对象 | response |
应用程序对象 | application |
会话对象 | session |
页面上下文对象 | pageContext |
页面对象 | page |
配置对象 | config |
异常对象 | exception |
- 解决中文乱码
- JSP中默认使用的字符编码方式:iso-8859-1(不支持中文)
- 支持中文的常见编码如下表:
编码方式 | 收录的字符 |
---|---|
gb2312 | 常用简体汉字 |
gbk | 简体和繁体汉字 |
utf-8 | 所有国家需要的字符 |
设置请求和响应的编码方式
request.setCharacterEncoding(“utf-8”);
response.setCharacterEncoding(“utf-8”);
<%@ page language=“java”
contentType=“text/html; charset=utf-8”%>