对jsp基础的一些掌握和概括
先看当我们创建jsp文件时,eclipse自动生成的jsp代码。
之后,我们再添加一些代码,如图所示。
如上图所示,JSP的页面元素包括: HTML, java代码(脚本Scriptlet),指令,注释。
a.脚本Scriptlet,网页中的java代码可以分为如下三类。
i. 主要用来定义书写局部变量,java语句等
<%
局部变量、java语句
%>
ii.主要用来定义全局变量和方法
<%!
全局变量、定义方法
%>
iii.可以用来输出变量值,而且不需要加分号,前两种和普通的java语句一样,需要加分号
<%=输出表达式 %>
demo 代码如下
<%@ 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>
</head>
<body>
<%!
public String name="";
public void show()
{
name="hello jsp method";
}
%>
<br/>
<%
String name1="hello param";
out.print("name1:"+name1+"<br/>") ;
show();
out.print("name:"+name) ;
%>
<br/>
<%="name3:"+name1 %>
</body>
</html>
访问该项目文件如图
注意:如果此时服务已经启动,修改web.xml、配置文件、java 等(后端服务器相关的代码或者配置)需要重启tomcat服务,但是如果修改 Jsp\html\css\js ,不需要重启,注意,out.println()不能回车; 要想回车:“<br/>”,即out.print() 和<%= %> 可以直接解析html代码
b.指令
page指令
<%@ page ....%>
page指定的属性:
language:jsp页面使用的脚本语言,在这里一般是java
import:导入类
pageEncoding:jsp文件自身编码
contentType:浏览器解析jsp的编码
例如:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date" %>
利用import属性导入一个包为java.util.Date
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
时间:
<%
out.print(new Date());
%>
<br/>
<%="时间:"+new Date()%>
</body>
</html>
访问该项目文件如图
c.注释,注释分为以下三种。
html注释:<!-- --> , 可以被客户 通过浏览器查看源码 所观察到
java注释:// /*...*/ 不可以被客户 通过浏览器查看源码 所观察到
jsp注释:<%-- --%> 不可以被客户 通过浏览器查看源码 所观察到
demo代码如下
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- html 注释 -->
<%
//java注释
/*
java注释
*/
%>
<%--jsp注释 --%>
</body>
</html>
访问该项目文件,并在浏览器查看源代码如图
JSP九大内置对象(自带的,不需要new 也能使用的对象)。
out:输出对象,向客户端输出内容。
request:请求对象;存储“客户端向服务端发送的请求信息”。
request对象的常见方法:
String getParameter(String name) :根据请求的字段名key (input标签的name属性值) ,返回字段值value (input标签的value属性值)
String[] getParameterValues(String name): 根据请求的字段名key ,返回多个字段值value (checkbox)
void setCharacterEncoding("编码格式utf-8") :设置post方式的请求编码 (tomcat7以前默认iso-8859-1,tomcat8以后改为了utf-8)
getRequestDispatcher("b.jsp").forward(request,response) ; :请求转发 的方式跳转页面 A - > B
ServletContext getServerContext():获取项目的ServletContext对象
示例:
注册和显示
register.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>
<form action="show.jsp" method="get">
用户名:<input type="text" name="uname" /><br/>
密码:<input type="password" name="upwd"/><br/>
年龄:<input type="text" name="uage"/><br/>
爱好<br/>
<input type="checkbox" name="uhobbies" value="足球"/>足球、
<input type="checkbox" name="uhobbies" value="篮球"/>篮球、
<input type="checkbox" name="uhobbies" value="乒乓球"/>乒乓球<br/>
<input type="submit" value="注册">
</form>
</body>
</html>
show.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>
<%
//设置编码
request.setCharacterEncoding("utf-8") ;
//获取值
String name = request.getParameter("uname") ;
int age = Integer.parseInt(request.getParameter("uage") ) ;
String pwd = request.getParameter("upwd") ;
//通过该方法返回一个字符串数组
String[] hobbies = request.getParameterValues("uhobbies") ;
%>
注册成功,信息如下:<br/>
姓名:<%=name %><br/>
年龄:<%=age %><br/>
密码:<%=pwd %><br/>
爱好:<br/>
<%
//判断拿到的值是否为null,以免报NullPointerException
if(hobbies !=null)
{
for(String hobby :hobbies)
{
out.print(hobby +" ");
}
}
%>
</body>
</html>
访问该项目文件,
此时观察到地址栏发生了变化,是因为我们表单的提交方式设置为get,该方式的地址栏信息一般如下!
连接/文件?参数名1=参数值1 & 参数名2=参数值2 & 参数名1=参数值1 。
get提交方式: method="get" 和 地址栏 、超链接(<a href="xx">)请求方式 默认都属于get提交方式
我们将form表单的提交方式改为post,可以观察到:
get与post请求方式的区别:
a. get方式 在地址栏显示 请求信息 (但是地址栏能够容纳的 信息有限,4-5KB;如果请求数据存在大文件,图片等 会出现地址栏无法容纳全部的数据而出错) ;post不会显示。
b. 文件上传操作,必须是post。
推荐使用post
统一请求的编码 request。
get方式请求 如果出现乱码,解决:
a.统一每一个变量的 编码 (不推荐)
new String( 旧编码,新编码);
name = new String(name.getBytes("iso-8859-1"),"utf-8");
b. 修改server.xml ,一次性的 更改tomcat默认get提交方式的编码 (utf-8)
建议 使用tomcat时, 首先在server.xml中 统一get方式的编码.. URIEncoding="UTF-8"
<Connector connectionTimeout="20000" port="8888" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8/>
tomcat7 :默认编码格式为: (iso-8859-1)
tomcat8 :默认编码格式为:(utf-8)
post方式请求 如果出现乱码,解决:
request.setCharacterEncoding("utf-8") ;
还剩七个内置对象:分别是:
session 会话对象
appliation 全局对象
response 响应对象
pageContext JSP页面容器
config 配置对象(服务器配置信息)
page 当前JSP页面对象(相当于java中的this)
exception 异常对象
后面一一复习使用!