欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-02-19 14:14:22
jsp是servlet技术的扩展,本质上是servlet的简易方式,更强调应用的外表表达。 jsp编译后是”类servlet”。 servlet和jsp最主要的不同点在于...

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传值及对比(总结)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。