zoukankan      html  css  js  c++  java
  • 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实现你的业务代码。

  • 相关阅读:
    关于Java 下 Snappy压缩存文件
    英文分词和中文分词
    vuex requires a Promise polyfill in this browser
    Vue 中 export default 和 module.exports
    Linux 进程以及多线程的支持
    mysqldump
    linux磁 盘分区 挂载
    ubuntu16.04挂载windows NTFS磁盘方法
    Linux服务管理 systemctl命令详解
    nextcloud 安装
  • 原文地址:https://www.cnblogs.com/lq147760524/p/6869384.html
Copyright © 2011-2022 走看看