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中配置节点。

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指令:

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

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

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

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

通过Jsp指令

例子:你去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参数的赋值方法,如:

<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张图片

七、Jsp指令和动作元素

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

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

2、forward动作

 等价 request.getRequestDispatcher("url").forward(req,resp);

3、param动作

常常与一起使用,作为其的子标签

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

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

5、指令和动作比较

Jsp 动态网页设计_第2张图片

八、中文乱码

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

例子:URL传中文参数

解决:选择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。

你可能感兴趣的:(Jsp 动态网页设计)