JavaWeb学习——JSP页面元素及九大内置对象

Posted Johnny*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb学习——JSP页面元素及九大内置对象相关的知识,希望对你有一定的参考价值。

使用eclipse开发JavaWeb项目

为新建Javaweb_yq工作站增加Server实例

window > preference>server>Runtime Environment > add 添加本地tomcat所在安装目录
在这里插入图片描述

为项目MyJspProject 添加 tomcat和jdk支持

  1. 创建好MyJspProject项目
  2. 为该项目添加tomcat和jdk支持。项目右键build path add library 加入以下支持:JRE System Library和APache Tomcat
    在这里插入图片描述
    添加jdk是因为tomcat的字节码文件需要在JVM上运行,而jsp需要tomcat/lib中的servlet-api.jar。该jar可将jsp转为servlet
  3. 部署tomcat
    在这里插入图片描述

**注意:**一般建议 将eclipse中的tomcat与 本地tomcat的配置信息保持同步:即 将eclipse中的tomcat设置为托管模式。
操作方式是:【第一次】创建tomcat实例之后, 双击,选择Server Location的第二项
在这里插入图片描述
否则默认是将tomcat备份到项目中,配置信息是与tomcat独立的。

Jsp

统一字符编码

设置jsp文件的编码,该编码用于Jsp编译成Java文件时,通过jsp文件中的pageEncoding属性设置。
设置浏览器读取jsp文件编码,通过jsp文件中的content属性设置。
一般将上述设置成一致的编码,推荐使用utf-8

文本编码,jsp文件以什么编码形式保存。可有以下三种方式设置:

  1. eclipse全工作站设置。如下:
    在这里插入图片描述
  2. 设置某个项目
  3. 设置单独文件

Jsp的页面元素

Jsp页面元素包括:html、Java代码(也就是嵌套在脚本中的javadiamante)、指令、注释

脚本

<%
局部变量、java语句
%>

<%!
全局变量、定义方法
%>

<%= 输出表达式>

源代码:
在这里插入图片描述
f12所看到的:

在这里插入图片描述
注意,out.println()不能回车; 要想回车:“
”,即out.print()、 <%= %> 可以直接解析html代码。

指令

  1. page指令

language属性:jsp页面使用的脚本语言
import : 导入类
pageEncoding: Jsp 文件翻译成java文件时的编码
contentType:浏览器解析jsp时的编码

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"  import="java.util.Date" %>

注释

html注释<!-- -->  ,可以被客户 通过浏览器查看源码 所观察到
java注释//     /*...*/
jsp注释<%-- --%>

Jsp九大内置对象

内置对象即不需要new也能使用的对象。

out 对象

输出对象,向客户端输出内容

request 对象

请求对象;存储“客户端向服务端发送的请求信息”

request对象常见方法:

方法名含义
String getParameter(String name)根据请求字段名key,返回字段值value
String[] getParameterValues(String name)根据请求的字段名key ,返回多个字段值value (checkbox)
void setCharacterEncoding(“编码格式如utf-8”)设置post方式的请求编码 ,不设置则默认为tomcat设置的编码
ServletContext getServerContext()获取项目的ServletContext对象
getRequestDispathcer( “目标jsp”).forward(request, response)请求转发的方式跳转

response 对象

void addCookie(Cookie cookie)服务端向客户端增加cookie对象
void sendRedirect(String location) throws IOException页面跳转的一种方式,重定向
void setContentType(String type)设置服务端相应编码,即设置服务端的contentType类型

session对象

JavaWeb学习(三)——Cookie、session

application 对象

application.getContextPath()获取项目虚拟路径
application.getRealPath(“项目虚拟路径”)获取该项目虚拟路径对应的绝对路径

	<%="虚拟路径:" + application.getContextPath() +"</br>"%>
	<%="绝对路径:"  +application.getRealPath("/MyJspProject")+"</br>" %>
打印结果:
虚拟路径:/MyJspProject
绝对路径:E:\\studydemo\\JavaWeb_yq\\.metadata\\.plugins\\org.eclipse.wst.server.core\\tmp0\\wtpwebapps\\MyJspProject\\MyJspProject

config对象

配置独享,服务器配置信息

page

当前JSP页面对象,相当于Java中的this

exception异常对象

四种范围对象

范围由小到大

对象名称范围
pageContext(Jsp页面容器)当前页面有效,页面跳转(请求转发或重定向)之后无效
request(请求对象)同一次请求有效,其他请求无效(请求转发有效,重定向后无效)
session(会话对象)同一次会话有效(无论怎么跳转都有效,关闭/切换浏览后无效)
application(全局对象)全局有效(整个项目有效,切换浏览器有效,关闭服务或切换其他项目无效)

以上四种对象共有的方法:

方法名含义
Object getAttribute(String name)根据属性名,获取属性值
void setAttribute(String name, Object obj)
void removeAttribute(String name)根据属性名删除对象

注意

  1. 以上4个范围 对象,通过setAttribute() 赋值,通过getAttribute() 获取值
  2. 尽量使用范围小的对象,因为对象范围越大,造成的性能损耗越大。

请求转发与请求重定向

请求转发重定向
地址栏是否改变不变(check.jsp)改变(success.jsp)
是否保留第一次请求时的数据(针对4种范围对象)保留不保留
请求的次数12
跳转发生的位置服务端客户端发出的第二次跳转

在这里插入图片描述

两种请求方式

请求主要有两种方式,一种是get另一种是post。get方式情形有:表单指定method=“get”、超链接形式(< a href > </ a >)、以及通过地址栏构造包含请求参数的链接的方式都属于get方式请求。

区别

  1. get方式的在地址栏显示请求信息,但地址栏显能够容纳的内容优先,只有4-5KB。Post请求不会显示在地址栏,其将请求信息放置在请求体中。
  2. 文件上传操作必须使用post请求。

注册小项目

在这里插入图片描述

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="post">
			用户名:<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>
		<%
			//设置post请求编码
			request.setCharacterEncoding("utf-8") ;
			String name = request.getParameter("uname") ;
			//name = new String(  name.getBytes("gbk") , "utf-8"); get方式修改编码
			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/>
		
		<%
			if(hobbies !=null){
			for(String hobby :hobbies)
			{
				out.print(hobby +"&nbsp;");
			}
			}
		%>
	
		
		
</body>
</html>

注册结果:
在这里插入图片描述

若不使用request.setCharacterEncoding(“utf-8”) ,则在输入中文时会出现乱码。

乱码问题的解决
首先统一请求的编码。
如果是get请求,则可以通过以下方式:
1、修改server.xml。修改tomcat安装目录下的server.xml,添加URIEncoding=“UTF-8”,如下

<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>

此种方法一劳永逸。
2、 还有一种比较鸡肋的方式就是每个变量都通过getBytes获得对应字节流,然后再转为对应编码。

new String( 旧编码,新编码);
name = new String(name.getBytes(“iso-8859-1”),“utf-8”);

如果是post请求则直接使用:

request.setCharacterEncoding(“utf-8”) ;

以上是关于JavaWeb学习——JSP页面元素及九大内置对象的主要内容,如果未能解决你的问题,请参考以下文章

JSP页面元素,及JSP九大内置对象之二out和request

JAVAWEB学习——JSP九大内置对象

第三十三章——javaweb初识和九大内置对象

JSP九大内置对象

九大内置对象的数据类型

JSP九大内置对象