浅谈JSP与Servlet传值及对比(总结)

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。 JSP编译后是”类servlet”。

Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。

而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

本篇从以下四个方面探讨下JSP与Servlet的传值问题:

一、JSP传值给Servlet

JSP传值给Servlet有几种形式:Form表单传值,url传值,其他方式传值,以下使用中默认使用了EL表达式。

在使用的taocan.do,login.do需要在web.xml中进行配置,代码如下

<servlet>
<servlet-name>taocan</servlet-name>
<servlet-class>(对应包名+类名)TaocanServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>taocan</servlet-name>
<url-pattern>/taocan.do</url-pattern>
</servlet-mapping>

a、form表单传值:

JSP页面有:

<form action="login.do?number=${number}" method="post" >
<input type="text" placeholder="用户名" name="username">
<input type="password" placeholder="密码" name="password">
<input type="submit" value="submit">
</form>

Sevlet中,在程序中如下:

String username = request.getParameter("username");
String password = request.getParameter("password");

可获取jsp传的username,password

b、url传值

比如这里的 <a>标签的 href="login.do?number=${number}" rel="external nofollow" 与 <form>标签的 action="login.do?number=${number}",在servlet同样用 request.getParameter("number")获取;

c、Java代码传值

java片段代码,servlet只能接到 session.setAttribute("testSession","Hello session")的内容,而接不到 request的内容。在 servlet里用 request.getSession().getAttribute("testSession")获取 session内容。

但是实际中在页面部分一般不直接写java片段代码,而是在javascipt代码中来传递。

javascipt中传递的几种形式如下:

1、直接跳转,在页面的调用下面的方法实现跳转。

var username= "${user.userName }";
function subm(){
window.location.href="login.do?username=" rel="external nofollow" +username;
}

2、页面定义ID及方法动态传值:

此处用到了jquery的语法,使用前请导入相应的包(例如:jquery-3.1.1.js)

<td id="${cart.cartId}">${cart.cartPrice }</td>
<input type="button" onClick="add(${cart.cartPrice })"/>
jquery中接收:
var currentprice;
function add(id){
currentprice=$("#"+id).text();
}

另一种形态,当同一个循环体中需要调用不同的DOM对用ID对象,修改price名称即可

<td id="${cart.cartId}price">${cart.cartPrice }</td>

<input type="button" onClick="add(${cart.cartPrice })"/>
var currentprice;
function add(id){
currentprice=$("#"+id+"price").text();
}

二、Servlet传值给Jsp

具体实现如下:

Servlet中java代码:String username = req.getParameter("username");
req.setAttribute("num", num);
req.getSession().setAttribute("userphone", user.getUserPhone());
request.getRequestDispatcher( "网址/jsp页面 ").forward(request,response);

jsp页面:通常使用EL表达式接收

<%String s =(String)request.getAttribute( "num");%>
如${num},${sessionScope.userphone}等形式jsp页面就可以取出Servlet的值。

三、Servlet传值给Servlet

1、直接跳转(假设变量num已经定义)

resp.sendRedirect("taocan.do?username="+username);

2、通过Session传递,当然Application也可以,此处省略。

req.getSession().setAttribute("userphone", user.getUserPhone());
String username = (String)req.getSession().getAttribute("username");

总结下forward和sendRedirect区别:

1.request.getRequestDispatcher()是请求转发,前后页面共享一个request,是在服务器端运行 ;

Response.sendRedirect()是通过向客户浏览器发送命令来完成,跳转到另一个新的页面. 所以RequestDispatcher.forward()对于浏览器来说是“透明的”; 而HttpServletResponse.sendRedirect()则不是。

四、JSP传值给JSP

1、直接传递:

在第一个页面中设置属性:

<%
request.setAttribute("name","username");
request.setAttribute("date","new Date()");
%>
<jsp:forward page="demo2.jsp"/>

在第二个页面中获取:

<%
String username = (String)request.getAttribute("name");
Date date = (Date)request.getAttribute("date");
%>
<h2>姓名:<%=username%></h2>
<h2>日期:<%=date%></h2>

2、一般在页面中很少直接写指令代码,另一个方法为在JS中先传值到中间Servlet中,然后再传到另外一个页面用EL表达式直接获取。

小结:两者之间的联系和区别

【1】JSP第一次运行的时候会编译成Servlet,驻留在内存中以供调用。

【2】JSP是web开发技术,Servlet是服务器端运用的小程序,我们访问一个JSP页面时,服务器会将这个JSP页面转变成Servlet小程序运行得到结果后,反馈给用户端的浏览器。

【3】Servlet相当于一个控制层再去调用相应的JavaBean处理数据,最后把结果返回给JSP。

【4】Servlet主要用于转向,将请求转向到相应的JSP页面。

【5】JSP更多的是进行页面显示,Servlet更多的是处理业务,即JSP是页面,Servlet是实现JSP的方法。

【6】Servlet可以实现JSP的所有功能,但由于美工使用Servlet做界面非常困难,后来开发了JSP。

【7】JSP技术开发网站的两种模式:JSP + JavaBean;JSP + Servlet + JavaBean(一般在多层应用中, JSP主要用作表现层,而Servlet则用作控制层,因为在JSP中放太多的代码不利于维护,而把这留给Servlet来实现,而大量的重复代码写在JavaBean中)。

【8】二者之间的差别就是,开发界面是JSP直接可以编写。比如在JSP中写Table标记:<table>[数据]</table>;Servlet需要加入:out.println(“<table>[数据]</table>”)。JSP文件在被应用服务器(例如:Tomcat、Resin、Weblogic和Websphere),调用过之后,就被编译成为了Servlet文件。也就是说在网页上显示的其实是Servlet文件。Tomcat下面JSP文件编译之后生成的Servlet文件被放在了work文件夹下,JSP中的HTML代码在Servlet都被out出来,而JSP代码按照标签的不同会放在不同的位置。

【9】JSP中嵌入HTML代码,而Servlet中嵌入JAVA代码。

【10】在一个标准的MVC架构中,Servlet作为Controller接受用户请求并转发给相应的Action处理,JSP作为View主要用来产生动态页面,EJB作为Model实现你的业务代码。

以上这篇浅谈JSP与Servlet传值及对比(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Servlet与JSP间的两种传值情况

    Servlet与JSP 之间的传值有两种情况:JSP -> Servlet, Servlet -> JSP. 通过对象 request和 session (不考虑 application)完成传值. 一.JSP -> servlet JSP页面有3种方法向 servlet传值: form表单.URL 复制代码 代码如下: <!-- JSP page --> ... <%...... session.setAttribute("testSession"

  • 浅谈JSP与Servlet传值及对比(总结)

    JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达. JSP编译后是"类servlet". Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来. 而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件.JSP侧重于视图,Servlet主要用于控制逻辑. 本篇从以下四个方面探讨下JSP与Servlet的传值问题: 一.JSP传值给Servlet JSP传值给Se

  • 浅谈jsp的C标签一般使用方法以及js接收servlet中的对象及对象数组

    由于现流行的javaWeb框架提倡前后端分离,比如在SpringMvc中已经很少写servlet的一些东西:目前 前端jsp中大多是一些纯html和js,很少用到jstl的一堆东西,后端也仅仅处理一些前端的post.get请求或页面跳转,无须以往繁琐的xml路径映射和filter过滤. 不过有时也会用到servlet作用域中的一些东西,比如某个固定的值.上下文路径等等~,不过这些东西大多数也仅限于取值而不是设置值(或对象),所以sun给了一个非常简洁的取值方式:C标签! 下面将简述下C标签的一些

  • 浅谈JSP是如何编译成servlet并提供服务的

    目录 概述 源码分析 概述 服务端对外提供JSP请求服务的是JspServlet,继承自HttpServlet.核心服务入口在service方法,大体流程如下: 首先获取请求的jspUri,如果客户端发起请求:https://xxx.xx.com/jsp/test.jsp,那么获取到的jspUri为:/jsp/test.jsp 然后查看缓存(Map结构)中是否包含该jspUri的JspServletWrapper,如果没有就需要创建一个JspServletWrapper并且缓存起来,并调用Jsp

  • 浅谈JSP serverlet的区别与联系

    jsp是html包含java servlet是java包含html jsp请求到tomcat---tomcat封装了jsp到servlet实现. 所以jsp请求时候,会自动创建session 而不用在servlet中request.getSession(true) servlet是服务器端的程序,动态生成html页面发到客户端,但是这样 程序里有许多out.println(),java和html语言混在一起很乱.所以 后来推出了jsp.其实jsp就是servlet,每一个jsp在第一次运行时被

  • 浅谈jsp中的9个隐含对象

    在JSP中一共有9个隐含对象,这个9个对象我可以在JSP中直接使用. 因为在service方法已经对这个九个隐含对象进行声明及赋值,所以可以在JSP中直接使用. - pageContext 类型:PageContext 代表:当前页面的上下文 作用:可以获取到页面中的其他隐含对象,同时它还是一个域对象. - request 类型:HttpServletRequest 代表:请求 作用:可以获取用户发送的请求信息,它也是一个域对象. - session 类型:HttpSession 代表:当前会话

  • 浅谈jsp九大内置对象及四个作用域

    request           请求对象             类型 javax.servlet.ServletRequest        作用域 Request response          响应对象              类型 javax.servlet.SrvletResponse        作用域 Page pageContext       页面上下文对象        类型 javax.servlet.jsp.PageContext       作用域 Page

  • 浅谈jsp文件和HTML互相引入的乱码问题

    1.在jsp中用include指令引入HTML文件时遇到的问题: jsp.html都可以正确的显示,当jsp引入html时访问jsp页面HTML出现乱码,jsp原有的输出无乱码,解决方法: 在HTML第一行加入:<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> jsp的编码格式为:<%@ page language="java&qu

  • 浅谈MySQL和Lucene索引的对比分析

    MySQL和Lucene都可以对数据构建索引并通过索引查询数据,一个是关系型数据库,一个是构建搜索引擎(Solr.ElasticSearch)的核心类库.两者的索引(index)有什么区别呢?以前写过一篇<Solr与MySQL查询性能对比>,只是简单的对比了下查询性能,对于内部原理却没有解释,本文简单分析下两者的索引区别. MySQL索引实现 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,本文主要讨论MyISAM和InnoDB两个存储引擎的索引实现方式. M

  • 浅谈序列化之protobuf与avro对比(Java)

    最近在做socket通信中用到了关于序列化工具选型的问题,在调研过程中开始趋向于用protobuf,可以省去了编解码的过程.能够实现快速开发,且只需要维护一份协议文件即可. 但是调研过程中发现了protobuf的一些弊端,比如需要生成相应的文件类,和业务绑定太紧密,所以在看了AVRO之后发现它完美解决了这个问题. 下面记录下对这两种序列化工具的入门与测评. 一.protobuf基本操作 protobuf简介: Protocol Buffers (a.k.a., protobuf) are Goo

  • 浅谈vue中子组件传值的默认值情况

    当父组件中的content值没有传入时,子组件利用default属性设置默认值,此情况时,页面会显示default value. 当传入content的值时,default属性的默认值不生效,界面显示为: 补充知识:Vue父组件向子组件传值遇到的BUG 当子组件中含有props属性,使用ref对其中的prop属性赋值时报错 Avoid mutating a prop directly since the value will be overwritten whenever the parent

随机推荐