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}"与 <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="+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、另一种比较直观的方式EL传递
第一个页面中的跳转
<a href="hotel.jsp?username=${user.username}&password=${user.password}">
另外一个页面的接收
${param.username}
${param.password}
3、一般在页面中很少直接写指令代码,另一个方法为在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传值及对比的更多相关文章
- ajax从jsp向servlet传值
function Delete(s){ xmlHttp=new XMLHttpRequest(); var url = "/emp/FindSpecial?selcol=" +s; ...
- 从jsp页面到servlet传值的不同方式
1.利用超链接<a></a>来传递参数 例如: <td><a href="/month811/Servlet?id=${student.id}&am ...
- Servlet与JSP之间相互传值问题
一.JSP向Servlet传值 JSP向Servlet传值的方式有三种:URL后面跟参数.form表单提交.在JSP内置对象Session设置值. URL后面跟参数 JSP文件:<a href= ...
- js、JSP、servlet之间的传递小结
@ JS 与 JSP :JSP无法直接获取JS的值,只能通过隐藏表单或者dom节点设置. JSP中设置隐藏表单input,或者设置任意一个隐藏或者不隐藏的节点比如div, 而JS就通过document ...
- java web基础 js、JSP、servlet之间的传递
@ JS 与 JSP :JSP无法直接获取JS的值,只能通过隐藏表单或者dom节点设置. JSP中设置隐藏表单input,或者设置任意一个隐藏或者不隐藏的节点比如div, 而JS就通过document ...
- JSP与Servlet之间传值
Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp:使用request.response对象完成传值,具体实现如下: 1.JSP传值给Servl ...
- Servlet与jsp间的传值问题
Servlet与JSP 之间的传值有两种情况:JSP -> Servlet, Servlet -> JSP.通过对象 request和 session (不考虑 application)完 ...
- JSP与Servlet之间传值的一般方法,适合新手做练习
#JSP与Servlet之间传值 Jsp与Servlet之间的传值有两种,一种是Jsp传值给Sevlet,另一种是Servlet传值给Jsp:使用request.response对象完成传值,具体实现 ...
- 【jsp】Servlet与jsp之间的传值
Servlet与JSP 之间的传值有两种情况:JSP -> Servlet, Servlet -> JSP. 通过对象 request和 session (不考虑 application) ...
随机推荐
- 动态规划:双重DP
之前做过的传纸条那道题就是双重动态规划的典型应用,题意就不描述了,直接贴一下以前写过的,经典代码 #include<iostream> using namespace std; ,maxm ...
- 庞老师集群.ziw
2017年2月17日, 星期五 庞老师集群 链接:http://pan.baidu.com/s/1mhSw2TE 密码:hzz4 更改子网IP,及网关: null
- cropper.js 跨域问题
this.$clone = $clone = $('<img>'); $clone.one('load', $.proxy(function () { var naturalWidth = ...
- 【BZOJ】1711: [Usaco2007 Open]Dining吃饭
[算法]最大流 [题解] S连向食物连向牛连向牛‘连向饮料连向T. 经典的一个元素依赖于两个元素的建图方式. #include<cstdio> #include<algorithm& ...
- 【BZOJ】4756: [Usaco2017 Jan]Promotion Counting
[题意]带点权树,统计每个结点子树内点权比它大的结点数. [算法]线段树合并 [题解]对每个点建权值线段树(动态开点),DFS中将自身和儿子线段树合并后统计. 注意三个量tot,cnt,tots,细心 ...
- A .Gaby And Addition (Gym - 101466A + 字典树)
题目链接:http://codeforces.com/gym/101466/problem/A 题目: 题意: 给你n个数,重定义两个数之间的加法不进位,求这些数中两个数相加的最大值和最小值. 思路: ...
- python初步学习-异常
异常 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行. 一般情况下,在python无法正常处理程序时就会发生一个异常. 异常是python对象,表示一个错误. 当python脚本 ...
- php 7.3.3安装问题记录
1.checking for libzip... not foundconfigure: error: Please reinstall the libzip distribution 参考:http ...
- 在Ubuntu上安装搜狗输入法
1.进入搜狗输入法官网 2.下载Linux版本,选择64bit 下载 3.等待下载的同时,进行系统配置 进入系统设置->语言支持->进行更新(需要输入登录密码)->在键盘输入法系统选 ...
- 访问公网WebService服务
接下来,我们演示如何访问公网webservice服务. 我们以访问 http://www.webxml.com.cn/zh_cn/index.aspx 为例,主要演示手机号码归属地查询服务(使用说明书 ...