JSP(三)JSP内置对象(上)

第三节  JSP内置对象(上)

目录

第三节  JSP内置对象(上)

-九大内置对象

-web程序的请求响应模式

-out对象

-get与post都是页面提交信息的方式

- request对象

-response 对象

-请求转发和请求重定向的区别


-九大内置对象

JSP内置对象是Web容器创建的一组对象,不使用new就可使用。

常用:out,response,request,session,application

其他:config,Page,pageContext,exception

-web程序的请求响应模式

用户发送请求(request)

服务器给用户响应(response)

-out对象

jspWriter类的实例,是向客户端输出内容常用的对象

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

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

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

即: 如果在out.flush();之后使用out.clear();程序会抛出异常,只能执行out.flush();之前的,之后的不能正常执行

而out.clearBuffer();之前使用out.flush();则不会抛出异常

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

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

int getRemaining()返回缓冲区还剩余多少可用

注: 关于flush和out的输出问题,out只是将内容放到缓冲区,并不给与直接输出,flush是将当前缓冲的内容输出之后清空缓冲区。关于为什么out可以输出,是因为当请求结束后即页面加载要完成了,会自动将缓冲区的内容全部输出但不清空缓冲区,这也是为什么缓冲区的剩余空间会有变化

-get与post都是页面提交信息的方式

get:数据在URL中可以看到,适合数据量不大,安全性不高的数据,例如搜索,查询等。

post:将用户的信息封装在HTML HEADER内,......,例如注册,修改,上传等

使用表单标签,与用户交互

网站怎样与用户进行交互?答案是使用HTML表单(form)。表单是可以把浏览者输入的数据传送到服务器端,这样服务器端程序就可以处理表单传过来的数据。

语法:

提交方式之一: form表单

<form name="标签名称"   action="动作/目标地址"   method="提交方式">

</form>讲解:

1.<form> :<form>标签是成对出现的,以<form>开始,以</form>结束。

2.action :浏览者输入的数据被传送到的地方,比如一个PHP页面(save.php)。

3.method : 数据传送的方式(get/post)。

request是对提交的数据进行处理

- request对象

request.setCharacterEncoding("utf-8") 解决中文乱码问题,无法解决URL传递中文出现的乱码问题,需要配置conf/server.xml文件。

request.getParameter()可以获取通过URL传递的参数。

request.getParameter()与request.getParameterValues()得到提交的数据

 

默认提交的是英文字符集,要显示中文要设置字符集

方法一:request.setCharacterEncoding()设置传过来的格式(无法用于解决URL传值)

方法二:修改tomacat的server.xml配置文件,在配置端口下面加上字符集配置,在Connector标签下加入一个属性如下:

URIEncoding=“utf-8”URIEncoding=""(解决URL传值问题)

例:

<%=request.getParameter("username") %>

<%  

        String [] favorites=request.getParameterValues("favorite");

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

        out.println(favorites[i]+"&nbsp;&nbsp;");

}

<%request.setAttribute("pwd","123456"); %>

获取密码:<%=request.getAttribute("pwd") %><br>

请求体的MIME类型:<%=request.getContentType() %><br>

协议类型及版本号:<%=request.getProtocol() %><br>

服务器主机名:<%=request.getServerName() %><br>

服务器端口号:<%=request.getServerPort() %><br>

-response 对象

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

string getcharacterEncoding()返回响应用的是何种字符编码

void setContentType(String type ) 设置响应的mime类型

print Writer getWriter()返回可以向客户端输出字符的一个对象(注意比较:printWrite与内置对象的区别

例:

<%@ page language="java"  import="java.util.*,java.io.*" contentType="text/html; charset=UTF-8"%>//PrintWriter 浏览器不认识,要导入io包。

<%

         response.setContentType("text/html;charset=utf-8");//设置响应的MIMI类型

         out.println("<h1>response测试对象</h1>");

         out.println("<hr>");

         //out.flush();//当response.sendRedirect("reg.jsp");时,为out.flush();加注释否则会抛出异常

         PrintWriter outer = response.getWriter();//获得输出流对象      

         outer.println("大家好,我是response对象输出流outer对象");

         response.sendRedirect("reg.jsp");//请求重定向:sendRedirect(“跳转的页面地址”)重新定向客户端的请求

%>

 

注: PrintWriter与内置out对象的区别:

PrintWriter的输出总是提前于内置out对象,即outer.println();输出的结果在out.println()的上方

解决方法:out.flush();//强制清空缓冲区,把缓冲区的内容写到浏览器上

-请求转发和请求重定向的区别

请求重定向是客户器端行为而请求转发是服务器端行为

//请求重定向

         response.sendRedirect("request.jsp");

         //请求转发

         request.getRequestDispatcher("request.jsp").forward(request, response);

请求重定向:客户端行为,response.sendRedirect(),本质上等同于2次请求,第一次请求的对象不会保存,即从reg.jsp中请求跳转到response.jsp的对象不会保存,第二次请求将改变地址栏,即跳转到页面request.jsp

请求转发:服务器行为,request.getRequestDispatcher().forward(req.resp);是一次请求,转发后请求对象会保存,即reg.jsp的请求跳转到response.jsp的对象会保存,地址栏的URL不会改变,将request.jsp页面内容呈现在response页面中,并将以上对象填入request的相应的位置中。

猜你喜欢

转载自blog.csdn.net/RayMa0305/article/details/81603691
今日推荐