JSP与Servlet传值及对比

 

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

Servlet和JSP最主要的不一样点在于,Servlet的应用逻辑是在Java文件中,而且彻底从表示层中的HTML里分离开来。
而JSP的状况是Java和HTML能够组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
jquery

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

1、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>session

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传值app

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

c、Java代码传值

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

可是实际中在页面部分通常不直接写java片断代码,而是在javascipt代码中来传递。

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

一、直接跳转,在页面的调用下面的方法实现跳转。
var username= "${user.userName }";
function subm(){
window.location.href="login.do?username="+username;
}

二、页面定义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();
}

2、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的值。

3、Servlet传值给Servlet
一、直接跳转(假设变量num已经定义)
resp.sendRedirect("taocan.do?username="+username);

二、经过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()则不是。

4、JSP传值给JSP
一、直接传递:
在第一个页面中设置属性:
<%
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>

二、另外一种比较直观的方式EL传递

第一个页面中的跳转

<a href="hotel.jsp?username=${user.username}&password=${user.password}">

另一个页面的接收

${param.username}

${param.password}

三、通常在页面中不多直接写指令代码,另外一个方法为在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实现你的业务代码。

相关文章
相关标签/搜索