美文网首页
Jsp 动态网页设计

Jsp 动态网页设计

作者: 潜心之力 | 来源:发表于2017-10-10 19:01 被阅读0次

    一、表单提交方式之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。

    相关文章

      网友评论

          本文标题:Jsp 动态网页设计

          本文链接:https://www.haomeiwen.com/subject/xuxsyxtx.html