zoukankan      html  css  js  c++  java
  • jsp相关内容

    举例:管理cookie

    首先创建index.jsp页面,从request对象中获取cookie,判断是否含有此服务器发来的cookie。如果没有说明是第一次访问本站;如果有则直接将值读取出来,并赋给对应的表单。关键代码如下:

    <%

    String welcome="第一次访问";

    String[] info=new String[]{" "," "," "};

    Cookie[] cook=request.getCookies(); 

    if(cook!=null)

    {

        for(int i=0;i<cook.length;i++){

           if(cook[i].getName().equals("mrCookInfo")){

               info=cook[i].getValue().split("#");

               welcome=",欢迎回来!";

           }

        }

    }

    %>

    <%=info[0]+welcome %>

    <form action="show.jsp" method="post">

    <ul style="line-height:2">

    <li>姓名:<input name="name" type="text" value="<%=info[0]%>">

    <li>生日:<input name="birthday" type="text" value="<%=info[1]%>">

    <li>邮箱:<input name="mail" type="text" value="<%=info[2]%>">

    <li><input type="submit" value="提交">

    </ul>

    接下来创建show.jsp页面,在该页面中通过request对象将用户输入的表单信息提取出来,创建一个cookie对象,并通过response对象的addCookie()方法将其发送到客户端。

    <%

    String name=request.getParameter("name");

    String birthday=request.getParameter("birthday");

    String mail=request.getParameter("mail");

    Cookie myCook=new Cookie("mrCookInfo",name+"#"+birthday+"#"+mail);

    myCook.setMaxAge(60*60*24*365);

    response.addCookie(myCook);

    %>

    表单提交成功

    <ul style="line-height:2px">

    <li>姓名:<%=name %>

    <li>生日:<%=birthday %>

    <li>邮箱:<%=mail %>

    <li><a href="index.jsp">返回</a>

    结果如下:第一次访问页面时用户表单中的信息是空的,当用户提交过一次表单之后,表单中的内容就会被记录到cookie对象中,再次访问的时候会从cookie中获取用户输入的表单信息并显示在表单中,如下图所示:

    responese对象

    respone代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。response 对象常用方法如下:

    方法

    返回值

    说明

    addHeader(String name,String value)

    void

    添加HTTP头文件,如果同名的头存在,则覆盖

    setHaeder(String name,String value)

    void

    设定指定名称的文件并头的值,如果存在则覆盖

    addCookie(Cookie cookie)

    void

    向客户端添加一个cookie对象

    sendError(int sc,String msg)

    void

    向客户端发送错误信息。例如:404 网页找不到

    sendRedirect(String location)

    void

    发送请求到另一个指定位置

    getOutputStream()

    ServletOutputStream

    获取客户端输出流对象

    setBufferSize(int size)

    void

    设置缓冲区大小

    重定向网页:通过使用sendRedirect()方法,将响应发送到另一个指定的位置进行处理。重定向可以将地址重新定向到不同的主机上,在客户端浏览器上将会得到跳转的地址,并重新发送请求连接。用户可以从浏览器的地址栏中看到跳转后的地址。进行重定向操作后,request 中的属性全部消失,并且进入一个新的request 对象的作用域。例如:

    response.sendRedirect(“www.baidu.com”)

    处理HTTP头文件:setHeader()方法设置HTTP头文件。

    例如:设置网页没5秒自动刷新一次

    response.setHeader(“refresh”,”5”);

    例如:设置2秒钟后自动跳转到制定的页面

    response.setHeader(“refresh”,”2;URL=welcome.jsp”)

    设置输出缓冲:通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区;只有在以下三种情况下才会把缓冲区的内容写到客户端。

    1. JSP页面的输出信息已经全部写到了缓冲区;
    2. 缓冲区已满;
    3. 在JSP页面中调用了flushbuffer()方法或out对象的flush()方法。

    使用response对象的setBufferSize()方法可以设置缓冲区的大小。例如设置其大小为0,即不缓冲。

    response.setBufferSize(0);

    session对象

    session对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保护该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为”key/value”。session对象的value可以是复杂的对象类型,而不仅仅局限于字符串类型。session 中的常用方法:

    方法

    返回值

    说明

    getAttribute(String name)

    Object

    获得指定名字的属性

    getAttributeNames()

    Enumeration

    获得session中所有属性对象

    getCreationTime()

    long

    获得session对象创建时间

    getId()

    String

    获得session对象唯一编号

    getLastAccessedTime()

    long

    获得session对象最后一次被操作时间

    getMaxInactiveInterval()

    int

    获得session对象有效时间

    isNew()

    boolean

    判断session对象是否为新创建的

    removeAttribute()

    void

    删除session对象中指定名称的属性

    invalidate()

    void

    销毁session对象

    setMaxInactiveInterval(int interval)

    void

    设置session对象的最大有效时间

    setAttribute(String key,Object obj)

    void

    将obj以key名称保存在session中

    创建及获取session信息:

    session 是与请求有关的会话对象,是java.servlet.http.HttpSession对象,用于保存和存储页面的请求信息。session 对象的setAttribute()方法可以实现将信息保存在session范围内,而通过getAttribute()方法可以获取保存在session范围内的信息。

    例如:

    1)在index.jsp页面,实现将文字信息保存在session范围内:

    <body>

    <%

    String sessionMessage="session练习";

    session.setAttribute("message",sessionMessage);

    out.print("保存在session范围内的对象为:"+sessionMessage);

    %>

    结果:

    保存在session范围内的对象为:session练习

    2)在default.jsp页面中:

    <body>

    <%

    String message=(String)session.getAttribute("message");

    out.print("保存在session内的值为:"+message);

    %>

    </body>

    结果:

    保存在session范围内的对象为:session练习

    application对象

    application对象可以将信息保存在服务器中,知道服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session相比,application对象的生命周期更长,类似于系统的“全局变量”。application对象常用方法如下表:

    方法

    返回值

    说明

    getAttribute(String name)

    Object

    通过关键字返回保存在application对象中的信息

    getAtrributeNames()

    Enumeration

    获取所有application对象使用的属性名

    setAttribute(String key,Object obj)

    void

    通过指定的名称将一个对象保存在application对象中

    getMajorVersion()

    int

    获取服务器支持的Servlet版本号

    getServerInfo()

    String

    返回JSP引擎的相关信息

    removeAttribute()

    void

    删除application对象中指定名称的属性

    getRealPath()

    String

    返回虚拟路径的真实路径

    getInitParameter(String name)

    String

    获取指定name的application对象属性的初始值

    访问应用程序初始化参数

    application提供了对应用程序环境属性访问的方法。例如,通过初始化信息为程序提供连接数据库的URL、用户名、密码,每个Servlet程序客户和JSP页面都可以使用它获取连接数据库的信息。为了实现该目的,Tomcat使用了web.xml文件。

    实例:

    application实现网页计数器

    由于application保存的信息在整个应用中都有效,因此可以将当前访问网站的数量保存在application对象中,在每次访问网页时,实现将保存在application对象中的值加1,从而实现网页计数器。

    1)在index.jsp页面中,实现将信息保存在application对象中。具体代码如下:

    <body>

    <h4>application对象实现网页计数器</h4>

    <%

    out.print("设置数值");

    Integer intcount;

    if(application.getAttribute("count")==null){                //如果保存在application对象内的内容为空

        intcount=1;

    }

    else{

        intcount=(Integer.parseInt(application.getAttribute("count").toString()));   //获取保存在application对象里的内容

    }

    application.setAttribute("name", "xiaohe");            //将信息保存在application对象内

    application.setAttribute("count", intcount);

    out.print("set name=xiaohe");

    out.print("<br> set counter="+intcount+"<br>");

    %>

    <a href="j.jsp">计数器页面</a>

    </body>

    运行结果如下:

    2)在j.jsp页面中,实现计数器统计。代码如下:

    <body>

    <br>获取用户名:<%=application.getAttribute("name") %>

    <br>计数器:

    <%

    int mycount=Integer.valueOf(application.getAttribute("count").toString()).intValue();

    out.println(mycount);

    application.setAttribute("count", Integer.toString(mycount+1));

    %>

    </body>

    j.jsp页面运行结果如下:

    out 对象

    out对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用out对象输出数据时,可以对数据缓冲区进行操作,及时清楚缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。

    管理响应缓冲

    在使用out输出数据时,需要使用clear()方法清除缓冲区内容,以便重新开始操作。此外,也可以通过clearBuffer()方法清除缓冲区中的内容。两者的区别是:clear()方法,如果相应内容已提交,则会报出IOException异常;clearBuffer()方法,即使内容已经提交给客户端也能够访问该方法。out对象管理缓冲区的方法如下表:

    方法

    返回值

    说明

    clear()

    void

    清除缓冲区中尚存的内容

    clearBuffer()

    void

    清除当前缓冲区中尚存的内容

    flush()

    void

    刷新流

    isAutoFlush()

    boolean

    检查当前缓冲区是自动清空,还是满了就抛出异常

    getBufferSize()

    int

    获取缓冲区的大小

    向客户端输出数据

    out对象的另一个重要功能是向客户端写入数据。out对象提供了两个向页面中输出信息的方法:

    print():在页面中打印字符串信息,不换行

    println():在页面中打印字符串信息且换行

    例如:

    <%out.print(“输出数据,不换行”)%>

    其他内置对象

    获取会话范围的pageContext对象

    pageContext对象的作用是取得任何范围的参数,通过它可以获取JSP页面的out、request、response、session、application等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用pageContext对象。pageContext对象的常用方法如下表:

    方法

    返回值

    说明

    forward(String path)

    void

    将JSP页面重新定向至另一个页面

    getAttribute(String name)

    Object

    获取参数值

    getAttributeNamesInScope(int scope)

    Enumeration

    获取某范围的参数名称集合

    getRequest()

    ServletRequest

    获取request对象

    getResponse()

    ServletResponse

    获取response对象

    getOut

    JspWriter

    获取out对象

    getSession()

    HttpSession

    获取session对象

    getPage()

    Object

    获取page对象

    setAttribute(String name,Object value)

    void

    设置指定参数属性

    读取web.xml配置信息的config对象

    config对象的主要作用是取得服务器的配置信息。通过pageContext对象的getServletConfig()方法可以获取一个config对象。config对象常用方法如下表:

    方法

    返回值

    说明

    getInitParameter(String name)

    String

    获取服务器指定参数的初始值

    getInitParameterNames()

    Enumeraction

    获取服务器所有初始参数名称

    getServletContext()

    ServletContext

    获取Servlet上下文

    getServletName()

    String

    获取Servlet服务器名

    应答或请求的page对象

    page对象代表JSP本身,只有在JSP页面内才是合法的。page隐含对象本质上包含当前Servlet接口引用的变量,类似于Java编程中的this指针。page对象常用方法如下表;

    方法

    返回值

    说明

    getClass()

    Object

    返回当前Object的类

    hashCode()

    Object

    返回此Object的哈希代码

    toString()

    String

    将此Object类转换成字符串对象

    equals(Object obj)

    boolean

    比较此对象与指定的对象是否相等

    获取异常信息的exception对象

    exception对象的作用是显示异常信息,只有在包含isErrorPage=”true”的页面中才可以使用,在一般的JSP页面中使用该对象将无法编译JSP文件。exception对象和Java的所有对象一样,都具有系统的继承结构。Exception对象几乎定义了所有的异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况;如果在JSP页面中出现没有捕捉到的异常,就会生成exception对象,并把exception对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的exception对象。Exception对象的常用方法:

    方法

    说明

    getMessage()

    返回exception对象的异常信息字符串

    getLocalizedmessage()

    返回本地化的异常错误

    toString()

    返回关于异常错误的简单信息描述

    fillInStackTrace()

    重写异常错误的栈执行轨迹

    Servlet技术

    Servlet基础

    Servlet技术功能:Servlet是位于Web服务器内部的服务器端的Java应用程序,它对Java Web的应用进行了扩展,可以对HTTP请求进行处理及响应,功能十分强大。

    1. Servlet与普通Java应用程序不同,它可以处理HTTP请求以获取HTTP头信息,通过HttpServletRequest接口与HttpServletResponse接口对请求进行处理及回应。
    2. Servlet可以在处理业务逻辑之后,将动态的内容通过返回并输出到HTML页面中,与用户请求进行交互。
    3. Servlet提供了强大的过滤器功能,可针对请求类型进行过滤设置,为Web开发提供灵活性与扩展性。
    4. Servlet可与其他服务器资源进行通信。

    Servlet与JSP的区别

    Servlet是一种运行在服务器端的Java应用程序,先于JSP的产生。在Servlet的早期版本中,业务逻辑代码与网页代码写在一起,给Web程序的开发带来很多不便。针对早期版本Servlet的不足,Sun提出了JSP技术。

    JSP是一种在Servlet规范之上的动态网页技术,通过JSP页面中嵌入的Java代码,可以产生动态网页。也可以将其理解为Servlet技术的扩展,在JSP文件第一次被请求时,它会被编译成Servlet文件,在通过容器调用Servlet进行处理。两者区别如下:

    1. Servlet承担客户请求与业务处理的中间角色,需要调用固定的方法,将动态内容混合到静态之中产生HTML;而在JSP页面中,可直接使用HTML标签进行输出,要比Servlet更具显示层的意义。
    2. Servlet中需要调用Servlet API接口处理HTTP请求,而在JSP页面中,则直接提供了内置对象进行处理。
    3. Servlet的使用需要进行一定的配置,而JSP文件通过”.jsp”扩展名部署在容器之中,容器对其自动识别,直接编译成Servlet进行处理。

    Servlet API编程常用的接口和类

    在Servlet编程中,Servlet API提供了标准的接口与类,这些对象对Servlet的操作非常重要,他们为HTTP请求与程序回应提供了丰富的方法。

    1. Servlet接口

    在Servlet开发中,任何一个servlet对象都要直接或间接的实现javax.servlet.Servlet接口。此接口包含5 个方法,其功能及作用如下:

    方法

    说明

    public void init(ServletConfig config)

    Servlet 实例化后,Servlet容器调用此方法来完成初始化工作

    public void service(ServletRequest request,ServletResponse response)

    此方法用于处理客户端的请求

    public void destroy()

    当Servlet对象应该从servlet容器中移除时,容器调用此方法,以便释放资源。

    public ServletConfig getServletConfig()

    此方法用于获取Servlet的配置信息,返回ServletConfig对象

    public String getServletInfo()

    此方法返回有关Servlet的信息,它是纯文本格式的字符串,如作者、版本等

    1. ServletConfig接口

    ServletConfig接口位于javax.servlet包中,它封装了Servlet的配置信息,在Servlet初始化期间被传递。每一个Servlet都有且只有一个ServletConfig对象。

    1. HttpServletRequest接口

    HttpServletRequest接口位于javax.servlet.http包中,继承了javax.servlet..ServletRequest接口,是Servlet中的重要对象,在开发过程中较为常用,其常用方法如下:

    方法

    说明

    public String getContextPath()

    返回请求的上下文路径,此路径以“/”开头

    public Cookie[] getCookies()

    返回请求中发送的所有cookie对象,返回值为cookie数组

    public String getMethod()

    返回请求所使用的HTTP类型,如get,post等

    public String getQueryString()

    返回请求中参数的字符串形式,如请求MyServlet?username=mr,则返回username=mr

    public String getRequestURI()

    返回主机名到请求参数之间部分的字符串形式

    Public StringBuffer getRequestURL()

    返回请求的URL,此URL中不包含请求的参数

    Public String getServletPath()

    返回请求URI中的Servlet路径的字符串,不包含请求中的参数信息

    Public HttpSession getSession()

    返回与请求关联的HttpSession对象

    例子:HttpServletRequest接口的使用:

    创建名为MyServlet的类(它是一个Servlet),代码如下:

    public class MyServlet extends HttpServlet {

     

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

           response.setContentType("text/html");

           response.setCharacterEncoding("UTF-8");

           PrintWriter out=response.getWriter();

           out.print("<p>上下文路径:"+request.getServletPath()+"</p>");

           out.print("<p>HTTP请求类型:"+request.getMethod()+"</p>");

           out.print("<p>请求参数:"+request.getQueryString()+"</p>");

           out.print("<p>请求URI:"+request.getRequestURI()+"</p>");

           out.print("<p>请求URL:"+request.getRequestURL()+"</p>");

           out.print("<p>请求Servlet路径:"+request.getServletPath()+"</p>");

           out.flush();

           out.close();

        }

    }

    在浏览器地址栏中输入http://localhost:8080/servlet/MyServlet?action=test,运行结果如下:

     

    4.HttpServletResponse接口

    HttpServletResponse接口位于javax.servlet.http包中,继承了javax.servlet..ServletRequest接口,也是Servlet中的重要对象,常用方法如下:

                 方法

                    说明

    public void addCookie(Cookie cookie)

    向客户端写入cookie信息

    public void sendError(int sc)

    发送一个错误状态码为sc的错误响应到客户端

    public void sendError(ine sc,String msg)

    发送一个包含错误状态码及错误信息的响应到客户端

    public void sendRedirect(String location)

    使用客户端重定向到新的URL,参数location为新地址

    例子:使用HttpServletResponse对象的sendError方法向客户端发送错误信息

    创建一个名称为HeServlet的Servlet对象,在doGet()方法中模拟一个开发过程的异常,并将其通过throw关键字抛出,关键代码如下:

    public class HeServlet extends HttpServlet {

        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

           try { //创建异常

               throw new Exception("数据库连接失败");

           } catch (Exception e) {

               response.sendError(500,e.getMessage());

           }

        }

    }

    运行结果如下图所示:

     

    5.GenericServlet类

    6.HttpServlet类

    Servlet过滤器

    Servlet过滤器是客户端与目标资源间的中间层组件,用于拦截客户端的请求与相应信息。 

    过滤器的配置:

    创建一个过滤器,通过web.xml文件进行配置后才可使用。

    1. 声明过滤器对象:在web.xml文件中,<filter-name>指定过滤器的名称,可自定义。<filter-class>指定过滤器对象的完整位置,包含包名和类名,<init-param>设置过滤器的初始化参数。

        <filter>

        <filter-name>CharacterEncodingFilter</filter-name>          <filter-class>com.he.CharacterEncodingFilter</filter-class>         <init-param>

            <param-name>encoding</param-name>

            <param-value>UTF-8</param-value>

        </init-param>

        </filter>

       

    1. 映射过滤器:这里需要配置过滤器的名称、过滤器关联的URL样式、过滤器对应得请求方式等。

    <filter-mapping>

        <filter-name>CharacterEncodingFilter</filter-name>

        <url-pattern>/*</url-pattern>

        <dispatcher>REQUEST</dispatcher>

    <dispatcher>FORWARD</dispatcher>

    </filter-mapping>

    说明:< dispatcher >的可选值及说明:

    可选值

    说明

    REQUEST

    当客户端直接请求时,通过过滤器进行处理

    INCLUDE

    当客户端通过RequestDispatcher对象的include()方法请求时,通过过滤器进行处理

    FORWARD

    当客户端通过RequestDispatcher对象的forward()方法请求时,通过过滤器进行处理

    ERROR

    当声明式异常产生时,通过过滤器进行处理

  • 相关阅读:
    Arduino IDE for ESP8266 项目云盒子 (1)AP直接模式
    Arduino IDE for ESP8266 项目云盒子(2)一键自配置+网页服务器
    Arduino IDE for ESP8266 项目(4)HTTP客户端+服务端
    远程桌面访问linux
    Arduino IDE for ESP8266 项目(3)创建AP+STA
    Arduino IDE for ESP8266 项目(2)wifi扫描
    Arduino IDE for ESP8266 项目(1) 点亮灯+按键LED+pwm
    双目SLAM(2) opencv
    双目SLAM(1) 总配置
    ORB-SLAM2(4) 离线双目数据测试
  • 原文地址:https://www.cnblogs.com/hefy/p/2935786.html
Copyright © 2011-2022 走看看