jsp javascript servlet 数据传递总结

本文详细阐述了JSP与Servlet的区别、应用场景、内置对象、指令与动作等内容,并深入探讨了Servlet的生命周期及其方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.Jsp与servlet的区别: 1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类) 2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制. 3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到. Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。 老师发的答案1: JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成擅长于流程控制和事务处理而通过Servlet 来生成动态网页;JSP由HTML代码和JSP标签构成,可以方便地编写动态网页 因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层. 答案2: JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。 二.Jsp的九大对象,七大动作,三大指令 jsp九大内置对象: 1>out 向客户端输出数据,字节流.如out.print(" dgaweyr"); 2>request 接收客户端的http请求. String getParameter(String name):得到表单参数名name的值. String[] getParameterValues(String name):(得到String[]复选框时常用). setAttribute(String name,Object obj):设置属性名为name,属性值为obj. getAttribute(String name);得到属性值. 3>response:封装jsp产生的回应,然后发送到客户端以响应客户的请求.重定向跳转任意界面.(服务器跳转) addCookie(Cookie cookie): sendRedirect("/wel.jsp"):跳转到指定页面 4>session:用于保存用户信息,跟踪用户行为,当前打开的浏览器内,多个页面共享数据. session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止.它是HttpSession类的实例. setAttribute(String name,Object obj):设置属性名为name,属性值为obj. getAttribute(String name):得到属性值. 5>application对象:实现了用户间数据的共享,可存放全局变量.它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问.服务器的启动和关闭决定了application对象的生命.它是ServletContext类的实例. session,application,request的区别: 一个项目中session尽量少用几个,因为过多的session会影响程序的执行效率.它主要用于保存登录信息(用户信息,权限,资源)即频繁使用的信息. application: 用于多个浏览器之间共享数据,多个用户共享该对象,可以做计数器.它的用法与session完全一样. 数据范围: application(服务器关闭时失效)>ression(浏览器关闭时失效)>request(只能用于两个跳转页面之间) 6>page对象代表jsp这个实体本身,即当前页面有效.相当于java中的this. 数据范围:page.exception:代表运行时的异常. 在会发生异常的页面加入指令:

在处理异常的页面写入:

8>.pageContext对象 pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本类名也叫pageContext. 9>.config jsp对应的servlet的配置,可以得到web.xml中的初使化参数. jsp七大动作: 一:include 动态包含(分别编译): 用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。flush属性: 用true ,表示页面可刷新。默认为false; 二:useBean动作(jsp页面使用javaBean的第二种方式): 作用域默认为page(本页面有效). 三:getProperty动作(name为useBean动作中的id). 从对象中取出属性值: 四:setProperty动作(name为useBean动作中的id): 为对象设置属性值: 为对象设置属性值: (param="username" 相当于 value=

) 五:param动作(传递参数)): 到达跳转页面可以通过 request.getParameter(“参数名”)方式取出参数值 ........... 或: ........... 六:forward动作: 跳转页面: 七:plugin动作::用于指定在客户端运行的插件 JSP三大指令之: 一:page指令: 1.指定页面编码.例: 2.导入包,例: . 二:include 指令 静态包含(统一编译): 三:taglib 三.Jsp中的静态包含与动态包含 动态include() 静态include() 1. 静态include的结果是把其他jsp引入当前jsp,两者合为一体,可以达到数据的共享即可以说是统一编译的,而 动态include的结构是两者独立的,直到输出时才合并即为分别编译的. 2.动态include的jsp文件独立性很强,是一个单独的jsp文件,需要使用的对象,页面设置,都由自己创建,而静态include纯粹是把代码写在外面的一种共享方法,所有的变量都是可以和include它的主文件共享,两者高度紧密结合,不能 有变量同名的冲突.而页面设置也可以借用主文件的. 3.动态包含总是检查被包含页面的变化,静态包含不一定检查被包含页面的变化. 4.动态包含可带参数,静态包含不能带参数.如(放入参数); 四.Servlet的生命周期 加载(服务器启动时,会到web.xml文件中去找到Servlet文件的配置并创建servlet的实例) → 初使化(init()此方法只执行一次) → 执行(service(),doGet(),doPost()) → 清理(销毁destory()) service():方法本身包含了doGet()和doPost().如果服务器发现了service()方法,则不再执行doGet(),doPost(). 一般不建议去重写父类的service方法.因为重写了此方法doGet方法和doPost方法将得不到利用. 没有service()方法默认执行doGet()方法. 五.Servlet的十大方法 init(HttpServletConfig config): 被servlet 容器调用以指明一个servlet被放进服务中。 service(HttpServletRequest request, HttpServletResponse response):被servlet 容器调用以允许servlet响应一个请求 doGet(HttpServletRequest request, HttpServletResponse response):被server调用处理客户端的GET请求 . doPost(HttpServletRequest request, HttpServletResponse response):被server调用处理客户端的POST请求. doPut(HttpServletRequest request, HttpServletResponse response):被server调用处理客户端的PUT请求. doDelete(HttpServletRequest request, HttpServletResponse response):被server调用处理客户端的DELETE请求. destroy():被 servlet container调用以告知一个servlet它被剔除服务。 getServletInfo():返回有关servlet的信息,例如作者、版本、版权。 getServletConfig():返回ServletConfig对象 doHead(HttpServletRequest request, HttpServletResponse response):被server调用处理客户端的Head请求. 六.Servlet类的基本架构 Servlet 接口:主要定义了servlet的生命周期方法 ServletConfig接口:为servlet提供了使用容器服务的若干重要对象和方法。 ServletContext接口:是Servlet的上下文对象,这个对象是在服务器启动时创建的,为servlet提供了使用容器服务的若干重要方法。 GenericServlet抽象类:为servlet提供了一般的实现(包括实现了servlet和ServletConfig两个接口),保存了容器通过init方法传递给servlet的一个ServletConfig类型的重要对象。 HttpServlet抽象类:为处理http请求的servlet提供了一般实现,主要是定义和实现了若干service方法。 继承关系:GenericServlet继承了Servlet和ServletConfig接口;HttpServlet继承了GenericServlet;我们写的servlet继承了HttpServlet 七.如何配置一个servlet使它运行 1.servlet的名字,包类 httpServletDemo(为servlet取的名字) com.lxitedu.HttpServletDemo(包名.类名) 2.映射.访问的地址(url) httpServletDemo(与上面的servlet名字要完全一样) /myServlet(运行时地址栏显示的文件名) 八. Get与post有何区别 1.post比get安全.(get用的问号传值法) 2.post接收的长度比较长. 3.post是以表单的形式提交请求的,get是以浏览器的形式提交请求的。所以get比较快。 4.post更能解决我们的中文乱码问题。 在默认情况下是get请求,form的method属性如果不指定,也默认为get请求。 get请求,会将参数显示在浏览器的地址栏上,其显示格式,在地址之后会以?开始,以'&'分隔参数,可以通过HttpServletRequest()对象的getQueryString()方法来获得get请求的参数值。 post请求:ServletRequest对象的getInputStream()方法可以获得一个由Socket得来的输入流,可以使用这个流来实现文件的上传。getReader()方法可以直接获取post请求的参数 九.说说jsp或servlet中有哪几种跳转方式。它们有何区别 1.客户端跳转: 1).使用form表单的action属性设置要跳转的页面(此方法可以将此页面的form表单属性值传递到下一页面):如下

或者(为button类型需要手动提交表单): javascript的函数: function test(){ //手动设置跳转页面 document.lili.action="my1.jsp"; document.lili.submit(); } 2).使用javascript中的页面跳转的方法(不能将form表单中的属性值传递到下一页面): window.location.href="my.jsp"; window.location.replace("my.jsq");//此方法不可将页面后退. 2.服务端跳转的两种方法对比: :等价于 request.getRequestDispatcher("xxx.jsp").forward(request,response); 本服务器的资源跳转,效率更高.地址栏不改变(仍为跳转前的页面).可得到request属性值. response.sendRedirect("xxx.jsp"): 重定向到任意资源.地址栏改为当前页面.无法得到request属性值. 十.servlet中的数据能与jsp共享吗?如果可以如何传递 能,我们可以将servlet中的数据放入HttpSession,HttpServletRequest,ServletContext,PageContext对象中, 在jsp页面中使用其相对应的内置对象得到我们servlet中的数据. 本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mcy478643968/archive/2011/01/18/6150072.aspx
<think>好的,我现在需要帮用户解答关于JSPServlet之间数据传递的具体方法。用户之前已经问过两者的区别与联系,现在进一步想了解数据传递的方式。用户提供的三个引用中,引用1提到Servlet传递数据JSP显示,引用2讨论了Forward转发和参数传递,引用3提到通过URL参数传递。首先,我需要整理这些引用中的信息,并结合自己的知识,系统地分点回答。用户可能希望了解不同方法的具体步骤、优缺点以及适用场景。根据引用1,数据传递可以通过请求转发,比如使用request.setAttribute和RequestDispatcher.forward。引用2补充了url转发的具体代码示例,而引用3提到JSP传递参数给Servlet通常使用表单或URL参数,而不是setAttribute。 接下来,我需要考虑用户可能的实际应用场景,比如在MVC架构中,Servlet作为Controller处理逻辑,然后将数据传给JSP视图显示。因此,需要详细说明每种方法的具体实现步骤,比如表单提交、URL重写、请求转发、会话对象等。 还要注意引用中的内容,比如引用3指出JSP传递参数给Servlet通常不通过setAttribute,而是表单或URL参数。这可能意味着用户需要明确区分两种方向的数据传递JSPServletServletJSP的不同方法。需要确保回答结构清晰,分点列出不同方法,并附上代码示例,帮助用户理解。同时,生成的相关问题要针对可能延伸的知识点,比如性能优化、参数接收方式、会话管理区别等。最后,检查是否符合系统指令,比如使用正确的LaTeX格式,引用标识自然添加,避免使用Markdown,用中文回答,并生成相关问题。确保每个传递方法都有对应的引用标注,如使用请求转发时引用[^1]和[^2]。</think>### JSPServlet数据传递方式详解 #### 一、JSPServlet传递数据 1. **表单提交** 通过`<form>`标签的`action`属性指向Servlet路径,使用`<input>`标签传递参数。 ```jsp <!-- JSP表单 --> <form action="/MyServlet" method="post"> <input type="text" name="username"> <input type="submit" value="提交"> </form> ``` Servlet通过`request.getParameter("username")`接收参数[^1][^3]。 2. **URL重写** 在链接中附加参数,适用于GET请求: ```jsp <a href="/MyServlet?productId=1001">查看商品</a> ``` Servlet通过`request.getParameter("productId")`获取值[^3]。 3. **JavaScript跳转** 通过`window.location`或`window.open`传递参数: ```jsp <script> function redirect() { window.location.href = "/MyServlet?action=delete"; } </script> ``` #### 二、ServletJSP传递数据 1. **请求转发(Forward)** 使用`request.setAttribute()`存储数据,通过`RequestDispatcher`转发到JSP: ```java // Servlet代码 request.setAttribute("message", "操作成功"); request.getRequestDispatcher("/result.jsp").forward(request, response); ``` JSP通过`${message}`或`<%=request.getAttribute("message")%>`获取数据[^1][^2]。 2. **会话对象(Session)** 存储跨多个请求的数据: ```java HttpSession session = request.getSession(); session.setAttribute("user", userObj); ``` JSP通过`${sessionScope.user}`访问[^1]。 3. **重定向传参(Redirect)** 通过URL参数传递(需手动拼接): ```java response.sendRedirect("/result.jsp?status=success"); ``` #### 三、核心区别与选择 | 方式 | 数据范围 | 适用场景 | 性能影响 | |-------------|----------------|----------------------------|----------------| | 请求转发 | 单次请求 | 需要保留请求上下文的数据传递 | 低(服务端跳转)| | 会话对象 | 多次请求 | 用户登录状态等持久化数据 | 中(占用内存) | | URL参数 | 单次请求 | 简单数据传递(长度受限) | 高(暴露URL) | ```java // 示例:Servlet使用请求转发传递List集合 List<Product> products = productService.getAll(); request.setAttribute("productList", products); request.getRequestDispatcher("/product.jsp").forward(request, response); ``` ```jsp <!-- JSP遍历Servlet传递的集合 --> <c:forEach items="${productList}" var="product"> <p>${product.name} - ¥${product.price}</p> </c:forEach> ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值