Jsp 动态网页设计

一、表单提交方式之Get和Post的区别


Get:以明文的方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB,安全性较低但效率比Post方式高。适合提交数据量不大,安全性不高的数据。比如:搜索、查询等功能。

Post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息。比如:注册、登录、修改、上传等功能。


二、Jsp内置对象

1、Request对象

request对象封装了客户端的请求信息,通过它才能了解到客户的需求,然后做出响应,request对象具有请求域,即完成客户端的请求之前,该对象一直有效,是HttpServletRequest的实例对象,常用方法如下:

String getParameter(String name):返回name指定参数的参数值,常用于获取页面提交的数据

String[] getParameterValues(String name) :返回所有包含参数name的数组

void setAttribute(String,Object):存储此请求中的属性,常用于请求转发时给下个页面传递数据

object getAttribute(String name):返回name指定的属性值,常用于获取RequestScode的属性

String getContentType():返回请求体的MIME类型

String getProtocol():返回请求用的协议类型及版本号

String getServerName():返回接收请求的服务器主机名

2、Response对象

response对象包含了响应客户请求的有关信息,但在Jsp中很少直接用到它,它的对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效,是HttpServletResponse的实例对象,常用方法如下:

String getCharacterEncoding():返回响应用的字符编码格式

void setContentType(String type):设置相应的MIME类型

PrintWriter getWriter():返回一个可以向客户端输出字符的对象,注意:getWriter()获得的对象输出内容会提前于内置对象out输出内容。解决:调用out.flush();

sendRedirect(String location):重新定向客户端的请求

3、Session对象

session对象在第一个Jsp页面被装载时自动创建,完成会话期管理,从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话,当一个客户访问一个服务器时,可能会在服务器的几个页面之间切换,服务器通过session对象可知这几个页面是同一个客户操作,服务器的内存中保存着不同用户的session,是HttpSession的实例对象,在HttpServerletRequest中获取,常用方法如下:

long getCreateTime():返回SESSION创建时间

String getId():返回SESSION创建时Jsp引擎为它设置的唯一标识

Object setAttribute(String name,Object value):用指定名称将对象绑定到此会话

Object getAttribute(String name):返回指定名称绑定的对象,如不存在,返回null

String[] getValueNames():返回一个包含此SESSION所有可用数据的集合

int getMaxInactiveInterval():返回SESSION在两次请求之间的最大存活时间,单位秒

Session的生命周期:创建、活动、销毁。

Session的销毁方式(3种):session.invalidate();session超时;服务器重启;

服务器如何判断多个页面是同一个会话:在Session被创建时,服务器会为Session对象指定一个唯一的标识ID,当客户端后续访问服务器时,Session对象都会把这个标识ID传给服务器,这样服务器就能识别出访问当前页面的是哪一个会话了。同一个Session对象的生命周期为打开浏览器开始,直到关闭浏览器结束。

Session的使用场景:保存登录验证码图片的文字、保存登录前的访问路径(如在商城中浏览商品无须登录,当购买商品时,需要进行用户登录,此时就需要保存当前访问的路径,直到登录成功后,从Session中将路径取出,这里保存的是相对路径,即经过控制器拦截处理的路径)。

注意:当所有页面关闭后,重新打开一个新的页面,Session对象虽然会重新创建,但原有的Session不会被销毁,这个旧的Session对象仍存在于服务器端,只不过再无客户端携带它与服务器校验,直到Session超时,这个Session对象才被销毁,Tomcat默认的Session超时时间为30分钟,我们可以通过session.setMaxInactiveInterval(时间/秒),也可在xml中配置<session-timeout>节点。

4、Out对象

out对象常用于向客户端输出内容。

void println():向客户端打印字符串

void clear():清除缓冲区的内容,如果在flush()方法后调用会抛出异常

void clearBuffer():清除缓冲区的内容,在flush()方法后调用不会抛出异常

void flush():将缓冲区内容输出到客户端

int getBufferSize():返回缓冲区字节数的大小,如不设缓冲区,则大小为0

int getRemaining():返回缓冲区剩余可用的空间大小

boolean isAutoFlush():返回缓冲区满时,是自动清空还是抛出异常

void close():关闭输出流

5、Application对象

application对象实现了用户间数据的共享,可存放全局变量,它开始于服务器的启动,终止于服务器的关闭,在用户的前后连接或不同用户之间的连接中,可以对application对象的同一属性操作,在任何地方对application对象属性的操作,都将影响到其他用户对此的访问,服务器的启动和关闭决定了application对象的生命它是ServletContext类的实例,常用方法如下:

void setAttribute(String name,Object value):使用指定名称将对象绑定

Object getAttribute(String name):返回指定名称绑定的对象,如无绑定,返回null

Enumeration getAttributeNames():返回所有可用属性名的枚举

String getServerInfo():返回Jsp(Servlet)引擎名和版本号

6、Page对象

page对象就是指向当前Jsp页面本身,有点像类中的this指针,它是Java.lang.Object类的实例,常用方法如下:

class getClass():返回此Object的类

int hashCode():返回此Object的hash码

boolean equals(Object obj):判断此Object是否与指定的Object对象相等

void copy(Object obj):把此Object拷贝到指定的obj对象中

Object clone():克隆此Object对象

String toString():把此Object对象转换成String类的对象

void notify():唤醒一个等待的线程

void notifyAll():唤醒所有等待的线程

void wait(int timeout):使一个线程处于等待状态知道timeout结束或被唤醒

void wait():使一个线程处于等待直到被唤醒

7、PageContext对象

pageContext对象提供了对Jsp页面内所有的对象及名字空间的使用,它可以访问到本页所在的session,也可以取得本页面所在的application的某一属性值,它相当于页面中所有功能的集成者,它本类名也是pageContext,常用方法如下:

JspWriter getOut():返回当前客户端响应被使用的JspWriter流(out)

HttpSession getSession():返回当前页中的HttpSession对象

Object getPage():返回当前页的Object对象(page)

ServletRequest getRequest():返回当前页的ServletRequest对象

ServletResponse getResponse():返回当前页的ServletResponse对象

void setAttribute(String name,Object attr):设置属性和属性值

Object getAttribute(String name,int scope):指定范围内取出属性值

int getAttributeScope(String name):返回某属性的作用范围

void forward(String relativeUrlPath):使当前页面重导到另一页面

void include(String relativeUrlPath):在当前位置包含另一文件

8、Config对象

config对象是在一个Servlet初始化时,Jsp引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(属性名和属性值构成)以及服务器的有关信息(传递一个ServletContext对象),常用方法如下:

ServletContext getServletContext():返回含有服务器相关信息的ServletContext对象

String getInitParameter(String name):返回初始化参数的值

Enumeration getInitParameterNames():返回Servlet初始化所需所有参数的枚举

9、exception对象

exception对象是一个异常对象,当一个页面在运行过程中发生了异常,就产生这个对象,如果一个Jsp页面要应用此对象,就必须把isErrorPage设为true,否则无法编译,它是Java.lang.Throwable的实例,常用方法如下:

String getMessage():返回描述异常的消息

String toString():返回关于异常的简短描述信息

void printStackTrace():显示异常及其栈轨迹

Throwable FillInStackTrace():重写异常的执行栈轨迹

捕捉页面使用:errorPage="异常捕捉交给谁处理" 

处理页面使用 :isErrorPage="是否应用exception对象"


三、请求转发与请求重定向

请求重定向:客户端行为,本质等于两次请求,第一次请求对象不保存,URL地址会改变

通过HttpServerletResponse对象:response.sendRedirect("/login.html");

通过Controller返回类型:return "redirect:/login.html";

通过Jsp指令:<c:redirect url="/login.html"/>

例子:你去A局办事,A局的人告诉你这事属于B局管,然后你走出A局,自己乘车去了B局。

请求转发 :服务器行为,是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变

通过HttpServerletRequest对象:request.getRequestDispatcher("/login.html").forward(req,resp);

通过Controller返回类型:return "forward:/login.html";

通过Jsp指令:<jsp:forward page="login.html">

例子:你去A局办事,A局知道这事属于B局管,它并没有拒绝你的请求,而是帮你联系B局办事。


四、JavaBean的使用

1、Javabean的设计原则

共有类、无参的共有构造方法、属性私有、getter()和setter()方法

2、Jsp动作

Jsp动作元素为请求处理阶段提供信息,动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以有属性,可选的内容、与开始标签匹配的结束标签。

3、Jsp中使用Javabean的两种方式

像Java类一样,直接创建实例

<%  Manager manager =new Manager();  %>

Jsp动作标签里使用Javabean

<jsp:useBeanid="manager"  scope="page" class="jspUseBean.Manager">

scope是作用域范围,id是唯一标识,class是Javabean的全类名(包名+类名)

4、给已实例化的Javabean对象属性赋值的四种方式

name的属性是useBean的id,property的值是所匹配的javabean的属性,从表单获取,value的值是手动为javabean设置属性,params的值是从request对象的参数获取,request参数的赋值方法,如:<form action="java.jsp?wjx="wjx"/>

<jsp:setProperty property=" * " name="manager"/>   

<jsp:setProperty property="username" name="manager"  />

<jsp:setProperty property="username" name="manager" value="wjx" />

<jsp:setProperty property="username" name="manager" params="wjx" />

5、获取Javabean对象属性的值

<jsp:getProperty property="username" name="manager" value="wjx" />

6、Javabean的4个作用域范围,可用userBean的scope属性来设置范围

page: 仅在当前页面有效

request:请求范围,可以通过HttpRequest.getAttribute()方法获取Javabean对象,

session:会话范围,可以通过HttpSession.getAttribute()方法获取Javabean对象

application:全局范围,可以通过application.getAttribute(0方法获取Javabean对象


五、Cookie对象

Cookie是Web服务器保存在客户端的一系列的文本信息,典型应用:判断注册用户是否已经登录网站,购物车的处理等。作用:对特定对象的追踪,保存用户网页浏览记录与习惯,简化登录,弊端是容易泄漏用户信息,常用方法如下:

void setmaxAge(int expiry):设置cookie有效期,单位秒

int getMaxAge():获取cookie对象的有效时长,单位秒

void setValue(String value):对cookie对象进行赋值

String getValue():获取cookie的值

String getName():获取cookie的名称

void setPath("/"); 设置共享路径

完整的创建过程:

Cookie cookie = new Cookie("userId", String.valueOf(user.getId()));

cookie.setMaxAge(60 * 60 * 24 * 30);

cookie.setPath("/");

response.addCookie(cookie);

使用场景:商城的购物车(购物车的内容是一个Json数组,转换成Java即是一个List)、用户的登录状态(用户的唯一标识可以存放在浏览器中)


六、Cookie和Session对比


七、Jsp指令和动作元素

1、include动作(动态引入,不能获取jsp页面数据)

<jsp: include page="../include/header.jsp" flush="true|false" />

page 指要包含的页面 , flush 指被包含的页面是否从缓冲区读取

2、forward动作

<jsp:forward page="url" />  等价 request.getRequestDispatcher("url").forward(req,resp);

3、param动作

<jsp:param name="参数名" value="参数值">

常常与<jsp:forward>一起使用,作为其的子标签

4、include指令(静态引入,能获取jsp页面数据)

<%@ include file="/WEB-INF/include/taglib.jsp" %>

5、指令和动作比较


八、中文乱码

1、URL传中文参数出现乱码

例子:<a href="request.jsp?username=老吴">URL传中文参数</a>

解决:选择Tomcat目录下的Server.xml,找到Connector字段,Connector里面是默认端口号以及其他配置信息,再往里添加URIEncoding="utf-8"字段,然后重启Tomcat服务器。注:在代码中使用request.setCharacterEncoding("utf-8");不能解决URL传中文乱码的问题。

URI和URL的区别:URL是绝对路径,URI是相对路径。


2、表单传中文参数出现乱码

例子:<%=request.getParameter("username")%> (接收表单页面的代码)

原因:Tomcat在提交表单时默认的编码格式是ISO-8859-1,我们需要的是utf-8。

解决:在例子代码执行前设置Tomcat的编码格式,request.setCharacterEncoding("utf-8");

3、中文信息保存在cookie对象中,先转码再保存,获取后再解码。

import Java.net.*;  

request.setCharacterEncoding("utf-8");

转码:String username =URLEncoder.encode(request.getParameter("username"),"utf-8");

解码:username =URLDecoder.decode(cookie.getValue(),"utf-8");


4、Jsp文件里写中文后不能保存代码

原因:Jsp文件的编码格式是ISO-8859-1。

解决:把所有的编码格式都改为utf-8。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,531评论 18 399
  • JSP(Java Server Pages),其根本是一个简化的 Servlet 设计,实现了在 Java 当中使...
    静候那一米阳光阅读 456评论 0 1
  • 一、jsp定义及作用 JSP技术使用Java编程语言编写类XML的tags和scriptlets,来封装产生动态网...
    yzw12138阅读 1,220评论 0 0
  • 一. Java基础部分.................................................
    wy_sure阅读 3,780评论 0 11
  • 最近腰颈椎肩膀都非常不舒服,已经每天尽量有意识改正自己的不良坐姿并且增加相应锻炼,但还是没啥效果……桑心,每年都要...
    只一点阅读 143评论 0 0