命令行请求jsp页面_jsp数据交互(一)

本文详细介绍了JavaWeb中命令行请求JSP页面的数据交互过程,包括JSP的执行流程、内置对象(如request、response、session等)的使用方法,以及session与cookie的区别。讲解了如何通过request对象获取请求参数,解决乱码问题,以及使用response对象进行重定向。此外,还探讨了JavaBean的规范以及不同请求转发和重定向的方法及其应用场景。
摘要由CSDN通过智能技术生成

jsp内置对象这里看别人的总结http://www.cnblogs.com/xiaotangtang/p/4943610.html

一、jsp中java小脚本

1.

2.不能有分号

3.

二、注释

1.客户端可以看到

2.客户端不能看到

三、jsp页面的的执行过程

1.客户端请求(输入URL)

2.服务器

(1)现将jsp翻译成.java文件(第一次请求)

如果是第二次请求,并且jsp页面内容未改变

(2)将java文件编译成.class文件

(3)执行.class文件

3.将执行后的结果和html静态内容发送到客户端

4.断开连接

四、jsp内置对象

是由web容器创建的对象,可以直接用,不用再new

1.out:方法print(文本)向客户端输出内容

2.request:客户端请求内容

方法:

getParameter(“键”),获取客户端提交的单个数据

getParameterValues(“键”)获取客户端提交的多个数据

setCharacterEncoding("编码")解决post提交方式的乱码

getRequestDispatcher("页面"):进行页面转发

3.response:响应客户端的请求,向客户端输出内容

方法

sendRedirect("页面");//进行页面重定向

六、会话:session

浏览器与服务器的一次通话(类似一次打电话)

1.会话跟浏览器是一一对应的

2.同一个浏览器不同请求是一次会话

3.不同浏览器就是不同会话

4.一般用于保存客户端特定的信息(临时)

session失效:

1.原则上,浏览器关闭,session就失效(实际过程中不一定)

2.超过有效期失效

3.调用invalidate(),立即失效

方法:

setAttribute(String key,object value),向session保存数据

object setAttribute(String key)向session读取数据

setMaxInactiveIntervals设置有效期

invalidate()使session失效

removeAttribute(String key)移除指定的session

七、inlude指令:将页面信息包含到另一个页面(静态包含)

八、application:应用程序级别的对象

各个客户端共享的数据

方法:

setAttribute(String key ,object value)

getAttribute(String key)

getRealPath("虚拟路径");根据虚拟路径获取物理路径

九、Cookie: 保存特定客户端的信息

用法:

1.创建

Cookie ck=new Cookie(String key,String value)

ck.setMaxAge("时间"),设置有效时间,不设置默认浏览器关闭时失效

2.保存

response.addCookie(ck);

3.读取cookie

a.Cookie[]cks=request.getCookies();

b.遍历

getName():获取当前cookie的名字(键名)

getValue():获取当前cookie的值

十、session与cookie的区别

session                    cookie

保存在服务器的内存中         保存在客户端的硬盘上

保存object类型               保存String类型

保存临时数据                 保存永久数据

安全性高                     安全性差

十一、JavaBean

是一个java类

从功能上来说,java类分为:业务类和数据类

一个java类符合以下要求才是JavaBean:

1.是一个公有类

2.有无参的公共的构造方法

3.属性私有:第一个字母小写

4.有getter和setter方法

(方法名格式:get属性名(大写),set属性名(大写))

Validate:验证

Context:上下文

Request:请求  :当前请求(别的请求无效)

Response:响应

Redirect:重定向

Session:会话:当前会话 (可以包含多个请求)在该会话有效期内可以访问

Application:当前服务器(可以包含多个会话):

当服务器启动后就会创建一个application对象,被所有用户共享

page、request、session、application四个作用域对象都有

setAttribute()和getAttribute()方法

而且作用域范围越来越大

1:request对象

是从客户端向服务器端发出请求,包括用户提交的信息以及客户端的一些信息。request对象是javax.servlet.http.HttpServletRequest类的实现实例。

request对象封装了浏览器的请求信息,通过request对象的各种方法可以获取客户端以及用户提交的各项请求信息。

使用request对象获取客户端提交的请求参数的常用方法如下:

1.String getParameter(String name),获取上一页面所提交的参数值的参数值,并以字符串形式返回指定参数的值,如果参数不存在则返回空值。用于表单、链接或网址栏传递参数时,使用此方法。

例如,获取客户端name的参数值:

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

2.String[ ] getParameterValues(String name),获取以相同名称命名的表单组件提交的数据,主要用于获取复选框的值,返回值类型是字符串数组String[ ]

例如,获取客户端hobby复选框的所有取值:

String[ ] hobbys = request.getParameterValues("hobby");

if(hobbys != null)

{

out.println("您的爱好有:");

for(int i=0;i

out.println(hobbys[i]);

}

3.void setCharacterEncoding(String encoding),设置字符编码方式,用来解决传递非英文字符所出现的乱码问题。

对于以post提交的表单数据

在第一行写:request.setCharacterEncoding("UTF-8");

对于以get提交的表单数据

提交的数据作为查询字符串被附加到URL 的末端发送到服务器,此时字服务器端调用

setCharacterEncoding()方法就没有作用了,我们需要得到请求参数值之后,进行编码转换

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

name=new String(name.getBytes("ISO-8859-1"),"UTF-8");

也可以通过TomCat目录下的conf下的server.xml文件,在元素中添加URIEncoding 属性,将它的值设置为“utf-8”

port="8080"

protocol="HTTP/1.1"

reidrectPort="8433"

URIEncoding ="UTF-8"

/>

4.RequestDispatchergetRequestDispatcher(String path)----获取请求分配器

返回一个javax.servlet.RequestDispatcher对象该方法的forward()方法用于 转发请求

例如,request.setCharacterEncoding("UTF-8");

实例:使用request对象实现用户注册功能

zhuce.html源代码如下:

个人信息注册

个人信息注册

        姓名:

密码:

请选择你的职业:

农民

工人

学生

教师

你喜欢的城市:

辽宁省

湖北省

河南省

山东省

江苏省

湖南省

请选择你的爱好:

旅游

看书

游戏

琴棋书画

自我介绍:

自我介绍

zhuce.jsp源代码如下:

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

个人信息注册

您的姓名是:

您的密码是:

您的职业是:

您喜欢的城市是:

您的爱好有:

if(hobbys != null)

{

out.println("您的爱好有:");

for(int i=0;i

out.print(hobbys[i]);

}

%>

自我介绍:

2:response对象

常用方法:

void addCookie(Cookie cookie):在客户端添加cookie

void sentRedirect(String location);重新定位到新的URL

1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;

response.sendRedirect()是重新定向,前后页面不是一个request。

request.getRequestDispather();返回的是一个RequestDispatcher对象。

2.RequestDispatcher.forward()是在服务器端运行;

HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.

所以RequestDispatcher.forward()对于浏览器来说是“透明的”;

而HttpServletResponse.sendRedirect()则不是。

3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而

ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为

ServletRequest具有相对路径的概念;而ServletContext对象无次概念。

RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或

jsp。它有两个方法:

1.void forward(ServletRequest request,ServletResponse response)

用来传递request的,可以一个Servlet接收request请求,另一个Servlet用这个request请求来产生response。request传递的请求,response是客户端返回的信息。forward要在response到达客户端之前调用,也就是 before response body output has been flushed。如果不是的话,它会报出异常。

2.void include(ServletRequest request,ServletResponse response)

用来记录保留request和response,以后不能再修改response里表示状态的信息。

如果需要把请求转移到另外一个Web App中的某个地址,可以按下面的做法:

1. 获得另外一个Web App的ServletConext对象(currentServletContext.getContext(uripath)).

2. 调用ServletContext.getRequestDispatcher(String url)方法。

eg:ServletContext.getRequestDispatcher("smserror.jsp").forward(request,response);

二者区别:

response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参

数,如:

url?id=1.

request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求

能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而

sendRedirect()会新建request对象,所以上一个request中的数据会丢失。

更具体来说就是这样的:

redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后

服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.

forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的response. 这时页面

收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页

面可直接用request.getAttribute获得数据。

最基本的用法就如上了,其他的一些应注意的地方如下:

跳转方式

http://localhost:8080/Test应用

运用forward方法只能重定向到同一个Web应用程序中的一个资源。而sendRedirect方法可以让你重定向到任何

URL。

表单form的action="/uu";sendRedirect("/uu");表示相对于服务器根路径。如http://localhost:8080/Test应

用(则提交至http://localhost:8080/uu);

Forward代码中的"/uu"则代表相对与WEB应用的路径。如http://localhost:8080/Test应用(则提交至

http://localhost:8080/Test/uu);

(运用RequestDispatcher接口的Forward)方法

forward()无法重定向至有frame的jsp文件,可以重定向至有frame的html文件,

同时forward()无法在后面带参数传递,比如servlet?name=frank,这样不行,可以程序内通过

response.setAttribute("name",name)来传至下一个页面.

重定向后浏览器地址栏URL不变.

只有在客户端没有输出时才可以调用forward方法。如果当前页面的缓冲区(buffer)不是空的,那么你在调用

forward方法前必须先清空缓冲区。

"/"代表相对与web应用路径

RequestDispatcher rd = request.getRequestDispatcher("/ooo");

rd.forward(request, response);提交至http://localhost:8080/Test/ooo

RequestDispatcher rd = getServletContext().getRequestDispatcher("/ooo");

rd.forward(request, response);提交至http://localhost:8080/Test/ooo

RequestDispatcher rd =getServletContext().getNamedDispatcher("TestServlet");(TestServlet为一个

)

rd.forward(request, response);提交至名为TestServlet的servlet

如果在之前有很多输出,前面的输出已使缓冲区满,将自动输出到客户端,那么该语句将不起作用,

这一点应该特别注意。

另外要注意:它不能改变浏览器地址,刷新的话会导致重复提交

从http://localhost:8080/Test/gw/page.jsp中转发

在JSP页面被解析后转换成pageContext.forward("OtherPage.jsp");

"/OtherPage.jsp"提交到http://localhost:8080/Test/OtherPage.jsp

"OtherPage.jsp"提交到http://localhost:8080/Test/gw/OtherPage.jsp

(运用HttpServletResponse接口的sendRedirect)方法302

是在用户的浏览器端工作,sendRedirect()可以带参数传递,比如servlet?name=frank传至下个页面,

同时它可以重定向至不同的主机上,sendRedirect()可以重定向有frame.的jsp文件.

假设转发代码包含于注册的servlet-url为/ggg/tt;jsp为/ggg/tt.jsp:

绝对路径:response.sendRedirect("http://www.brainysoftware.com

根路径:response.sendRedirect("/ooo")发送至http://localhost:8080/ooo

相对路径:response.sendRedirect("ooo")发送至http://localhost:8080/Test/ggg/ooo,

sendRedirect等同于此方式

response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);

String newLocn = "/newpath/jsa.jsp";

response.setHeader("Location",newLocn);

(Meta Refresh)方法200

这种方法是由HTML提供的,Meta本身就是HTML标签。使用方法是:

相应的java代码

String content=stayTime+";URL="+URL;

response.setHeader("REFRESH",content);

------------------------------------------------------------------------------------------------

--------------------------

使用response.sendRedirect()地址栏将改变

使用request.getRequestDispatcher().forward(request,response)地址栏中的信息保持不变.

------------------------------------------------------------------------------------------------

--------------------------

request.setAttribute存的东西

只用通过方法2跳转 才能在新页取出来

1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ;

response.sendRedirect()是重新定向,前后页面不是一个request。

2.RequestDispatcher.forward()是在服务器端运行;

HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成.

3.ServletContext.getRequestDispatcher(String url)中的url只能使用绝对路径; 而

ServletRequest.getRequestDispatcher(String url)中的url可以使用相对路径。因为

ServletRequest具有相对路径的概念;而ServletContext对象无此概念。

RequestDispatcher对象从客户端获取请求request,并把它们传递给服务器上的servlet,html或

jsp。它有两个方法:

2.void include(ServletRequest request,ServletResponse response)

用来记录保留request和response,以后不能再修改response里表示状态的信息。

二者区别:

response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参

数,如:

url?id=1.

request.getRequestDispatcher(url).forward(request,response)是直接将请求转发到指定URL,所以该请求

能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而

sendRedirect()会新建request对象,所以上一个request中的数据会丢失。

更具体来说就是这样的:

redirect 会首先发一个response给浏览器, 然后浏览器收到这个response后再发一个requeset给服务器, 然后

服务器发新的response给浏览器. 这时页面收到的request是一个新从浏览器发来的.

forward 发生在服务器内部, 在浏览器完全不知情的情况下发给了浏览器另外一个页面的响应. 这时页面

收到的request不是从浏览器直接发来了,可能己经用request.setAttribute在request里放了数据.在转到的页

面可直接用request.getAttribute获得数据。

重定向的重要应用:

使用重定向技术实现超链接的数据传递

黄色

使用超链接进行数据传递时,采用的是get方式提交请求,如果在传递数据中存在中文,就会造成乱码,因为request.setCharacterEncoding("utf-8")只适用于post方法提交 所以可以通过 设置tomcat字符集实现

当传递多个数据时,可以用&连接

黄色

Session

//设置10分钟后失效

session.setMaxInactiveInterval(10*60);

也可以在项目的web.xml中设置  代码片段如下:

30       ------这里的单位是分钟  系统默认会话超时是30分钟  0表示失效   -1表示永不超时

使整个session会话失效:session.invalidate();

如果只想清空session的某个对象 ,则可以调用session.removeAttribute(String key)方法,将指定的对象从session中清除

此时session对象仍然有效

1、概念:Session代表服务器与浏览器的一次会话过程,这个过程是连续的,也可以时断时续的。在Servlet中,session指的是HttpSession类的对象,这个概念到此结束了,也许会很模糊,但只有看完本文,才能真正有个深刻理解。

2、Session创建的时间是:

JSP文件在编译成Servlet时将会自动加上这样一条语句 HttpSession session = HttpServletRequest.getSession(true);这也是JSP中隐含的 session对象的来历。

由于session会消耗内存资源,因此,如果不打算使用session,应该在所有的JSP中关闭它。

引申:

2)、当JSP页面没有显式禁止session的时候,在打开浏览器第一次请求该jsp的时候,服务器会自动为其创建一个session,并赋予其一个sessionID,发送给客户端的浏览器。以后客户端接着请求本应用中其他资源的时候,会自动在请求头上添加:

Cookie:JSESSIONID=客户端第一次拿到的session ID

这样,服务器端在接到请求时候,就会收到session ID,并根据ID在内存中找到之前创建的session对象,提供给请求使用。这也是session使用的基本原理----搞不懂这个,就永远不明白session的原理。

下面是两次请求同一个jsp,请求头信息:

通过图可以清晰发现,第二次请求的时候,已经添加session ID的信息。

3、Session删除的时间是:

1)Session超时:超时指的是连续一定时间服务器没有收到该Session所对应客户端的请求,并且这个时间超过了服务器设置的Session超时的最大时间。

2)程序调用HttpSession.invalidate()

3)服务器关闭或服务停止

4、session存放在哪里:服务器端的内存中。不过session可以通过特殊的方式做持久化管理。

5、session的id是从哪里来的,sessionID是如何使用的:当客户端第一次请求session对象时候,服务器会为客户端创建一个session,并将通过特殊算法算出一个session的ID,用来标识该session对象,当浏览器下次(session继续有效时)请求别的资源的时候,浏览器会偷偷地将sessionID放置到请求头中,服务器接收到请求后就得到该请求的sessionID,服务器找到该id的session返还给请求者(Servlet)使用。一个会话只能有一个session对象,对session来说是只认id不认人。

6、session会因为浏览器的关闭而删除吗?

不会,session 存在于服务器内存中

ServletContext application=this.getServletContext();

List listUser = (List)application.getAttribute("currentListUser");

if(listUser == null){

listUser = new ArrayList();

}

listUser.add(user);

application.setAttribute("currentListUser", listUser);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值