::::关于jsp页面和servlet之间传递参数

JSP与 servlet之间的传值有两种情况:JSP -> servlet, servlet -> JSP。

通过对象 request和 session (不考虑 application)完成传值。

一、JSP -> servlet

JSP页面有3种方法向 servlet传值: form表单、URL 、其他

<a href="JspServlet?action=toServlet">click me</a>

<form action="JspServlet?action=toServlet" method="post" name="form">

<input name="username" type="test" />

<input type="submit" value="submit">

</form>

1、对于该JSP页面 form表单的内容,如 <input>标签,在 servlet可用 request.getParameter("username");获取。

2、URL:比如这里的 <a>标签的 href属性与 <form>标签的 action属性的值 "JspServlet?action=toServlet",在servlet同样用 request.getParameter("action")获取;所要注意的是这里的 url 要和 servlet在web.xml里的 <url-pattern>标签的路径所对应。这部分后面会提到。

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

<%......

session.setAttribute("testSession","Hello session");

reqeust.setAttribute("testRequest","Hello request");

%>

二、Servlet

1、关于 servlet,首先要提到它在 web.xml里的注册内容,如

假如 project name 是 jsp2servlet,则该 project根目录的 Context是 /jsp2servlet,在地址栏里显示是http://localhost:8080/jsp2servlet/;

在 project 根目录下有 admin目录,对应的 Context是/admin/jsp2servlet,在地址栏里显示是http://localhost:8080/jsp2servlet/admin,

在这两个目录下的 jsp 都想转到 com.demo.JspServletDemo类做处理,这时的 url需要在 web.xml注册两次。

1)在 http://localhost:8080/jsp2servlet/ 目录下的 jsp 页面 JspServlet1,url应写为 "JspServlet"

2)在 http://localhost:8080/jsp2servlet/admin/ 目录下的 jsp 页面访问 JspServlet2,url应写为"admin/JspServlet"

2、在 servlet直接用 request对象,得到发送来的请求内容;用 request.getSession(),得到 session对象,从而得到会话内容。

这里的 request.getSession()的参数为 boolean 类型,该方法意思可理解为:

session可以认为是每一个IE进程对应一个会话(新开一个IE进程就可以对应两个会话的),getSession都是返回当前用户的会话对象,参数的区别在于:

参数为true (默认),则如果“当前用户的会话对象”为空(第一次访问时)则创建一个新的会话对象返回;

参数为false,则如果“当前用户的会话对象”为空,则返回 null (即不自动创建会话对象)。

利用这个方法可以判断 session是否过期,如下:

if(request.getSession(false)==null)

System.out.println("Session has been invalidated!");

else

System.out.println("Session is active!");

三、Servlet -> JSP

从 servlet转到 jsp不外乎两种方法,重定向 和 url转发

1、重定向 ( Redirect):是路径的跳转,内容和 url都改变。不允许带 request参数( session参数可以),即不允许在 servlet里给 request对象使用setAttribute方法传给下一页面。在 servlet里使用 response.sendRedirect(url) 方法。注意这里的 url前不带斜线 /,如 response.sendRedirect(”test.jsp“)

2、url转发 ( Forward):是页面的跳转,页面内容发生改变,url不变。可以带 request和 session参数。在 servlet里使用 getServletConfig().getServletContext().getRequestDispatcher(url).forward(request, response)。而这里的 url前需要带斜线 /,如getServletConfig().getServletContext().getRequestDispatcher(”/test.jsp“).forward(request, response)

servlet使用RequestDispatcher到jsp页面 
String url="/EShop.jsp"; 
ServletContext sc = getServletContext(); 
RequestDispatcher rd = sc.getRequestDispatcher(url); 
rd.forward(req, res);

servlet重定向jsp,并将数据发送到别一个JSP中: 
request.setAttubute("messages",aaa); 
RequestDispatcher requestDispatcher=request.getRequestDispatcher("/jsp/testbean.jsp"); 
requestDispatcher.forward(request,response);

3.7、Servlet跳转
 从JSP跳转到Servlet可以实现,通过表单提交或超链接可以做到,但是现在如果从一个Servlet跳转到JSP呢?
 • HttpServletResponse对象,此对象可以完成跳转:public void sendRedirect();
JumpServlet.java:
package org.lxh.demo ;
import javax.servlet.* ;
import javax.servlet.http.* ;
import java.io.* ;
public class JumpServlet extends HttpServlet{
 public void init() throws ServletException{
 }
 public void doGet(HttpServletRequest req,HttpServletResponse resp)
              throws ServletException,java.io.IOException{
  resp.sendRedirect("jump.jsp") ;
 }
 public void doPost(HttpServletRequest req,HttpServletResponse resp)
              throws ServletException,java.io.IOException{
  this.doGet(req,resp) ;
 }
 public void destroy(){
 }
};
web.xml:
 <servlet>
  <servlet-name>jump</servlet-name>
  <servlet-class>org.lxh.demo.JumpServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>jump</servlet-name>
  <url-pattern>/jump</url-pattern>
 </servlet-mapping>
 以上实现了跳转的功能,但是跳转之后,发现地址栏已经改变了,所以此跳转称为客户端跳转。如果此时假设一个Servlet要向JSP中传递属性,那么应该使用session范围。
JumpServlet.java:
 public void doGet(HttpServletRequest req,HttpServletResponse resp)
              throws ServletException,java.io.IOException{
  request.getSession().setAttribute("name","hello") ;
  resp.sendRedirect("jump.jsp") ;
 }
jump.jsp:
<h1><%=session.getAttribute("name")%></h1>
 此时,发现可以通过session属性范围传递内容,但是如果现在传递的内容很多,而程序中使用session范围的话则肯定会带来额外的性能降低,但是此时,这些值只使用一次显示,那肯定没有必要使用session对象,最好使用request范围。如果request属性范围也有一个限制,必须是服务器端跳转,在JSP中使用<jsp:forward>语句完成,但是在servlet中呢?就只能使用RequestDsipatcher接口完成,实际上<jsp:forward>语句也是使用包装了此种应用,既然RequestDispatcher是一个接口,所以必须通过其他方式实例化,通过request对象完成。
JumpServlet.java:
 public void doGet(HttpServletRequest req,HttpServletResponse resp)
              throws ServletException,java.io.IOException{
  req.setAttribute("name","hello") ;
  // 准备跳转到此页面
  RequestDispatcher rd = req.getRequestDispatcher("jump.jsp") ;
  // 把所有的请求向下继续传递
  rd.forward(req,resp) ;
 }
注意:
 当需要传递request属性范围的时候才使用服务器端跳转。如果不需要传递,则可以选择任意的跳转方式。
 但是一般情况下都使用RequestDispatcher进行跳转,而且一定要记住的时候,跳转之后页面地址不会有任何的变化。

forward和sendRedirect区别

1.request.getRequestDispatcher()是请求转发,前后页面共享一个request ; 
response.sendRedirect()是重新定向,前后页面不是一个request。

request.getRequestDispather();返回的是一个RequestDispatcher对象。

2.RequestDispatcher.forward()是在服务器端运行; 
HttpServletResponse.sendRedirect()是通过向客户浏览器发送命令来完成. 
所以RequestDispatcher.forward()对于浏览器来说是“透明的”; 
而HttpServletResponse.sendRedirect()则不是。

::::jsp中标签id和name的区别:

name原来是为了标识之用,但是现在根据规范,都建议用id来标识元素。

只能用name:
1. 表单(form)的控件名,提交的数据都用控件的name而不是id来控制。因为有许多name会同时对应多个控件,比如checkbox和radio, 而id必须是全文档中唯一的。此外浏览器会根据name来设定发送到服务器的request。因此如果用id,服务器是无法得到数据的。
2. frame和window的名字,用于在其他frame或window指定target。

两者可以通用,但是强烈建议用id不要用name:
1. 锚点,通常以前写作<a name="myname">,现在可以用任何的元素id来指定:<div id="myid">。

只能用id:
1. label与form控件的关联,
    <label for="MyInput">My Input</label>
     <input id="MyInput" type="text">
     for属性指定与label关联的元素的id,不可用name替代。
2. CSS的元素选择机制,以#MyId的方式指定应用样式的元素,不能用name替代。
3. 脚本中获得对象:
IE支持在脚本中直接以id(而不是name)引用该id标识的对象。例如上面的input,要在脚本中获得输入的内容,可以直接以MyInput.value来获得。
如果用DOM的话,则用document.getElementById("MyInput").value,如果要用name的话,通常先得到包含控件的form,例如document.forms[0],然后从form再引用name,注意这样得到的是经过计算后将发送给服务器的值。

name与id的还有区别是:

id要符合标识的要求,比如大小写敏感,最好不要包含下划线(因为不兼容CSS)。而name基本上没有什么要求,甚至可以用数字。

javaweb dev 入的更多相关文章

  1. linux 在 open 时复制设备

    管理存取控制的另一个技术是创建设备的不同的私有拷贝, 根据打开它的进程. 明显地, 这只当设备没有绑定到一个硬件实体时有可能; scull 是一个这样的"软件"设备 的例子. /d ...

  2. 详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统)、模糊查询

    详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统).模糊查询 1,创建数据库,我的用户名:root 密码:root,数据库名称:lianwei,表名:login 2,效果 ...

  3. javaweb 基于java Servlet登入 简单入门案例

    项目流程 第一步:创建一个java webproject第二步:创建三个界面,1,login.jsp 2 success.jsp 3 fail.jsp第三步:更改新建界面编码格式,utf-8 默然编码 ...

  4. Javaweb学习笔记——(十四)—————— 服务器端验证注册登入表单项目

    项目:https://download.csdn.net/download/qq_40223688/10463436 项目 功能: *注册 *登录--------------------------- ...

  5. 初入JavaWeb(半成品)

    2019-10-21 20:51:03 初次进行Javaweb的开发. 要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示 ...

  6. 新入职如何快速去了解一个Javaweb项目!

    1.从代码结构入手,搞清楚Java源码所在目录以及jsp代码所在目录. 2.从Web.xml入手,搞清楚首页,上下文及配置情况. 3.从lib目录里初步查看系统使用的框架和工具包. 4.从页面大体浏览 ...

  7. WPF使用DEV之TreeListControl---加入复选框

    1.绑定的Class中加入一个Bool类型的属性 2.   该属性无需初始赋值,你执行就可以看到如图: Bool类型数据自己主动变成了复选框 watermark/2/text/aHR0cDovL2Js ...

  8. javaweb笔记七

    过滤器:是一个web中间组件,用于拦截从客户端发送给服务器的请求和响应.当客户端向服务器发出请求时,服务器会查看是否有过滤器和该请求匹配,如果有,则交给过滤器执行,业务操作后,可以将请求继续向目标资源 ...

  9. JavaWeb——Listener

    一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...

随机推荐

  1. Spring 4.3.11.RELEASE文档阅读(一):overview

    一.宏观概述中的体会和发现 Spring是组件式的框架,它允许我们只使用其一小部分.Spring所做的工作,就是不断的简化我们的操作.比如它的IOC容器,当我们自己应用设计模式,比如说:建造者.工厂. ...

  2. Welcome-to-Swift-09类和结构体(Classes and Structures)

    类和结构体是人们构建代码所用的一种通用且灵活的构造体.为了在类和结构体中实现各种功能,我们必须要严格按照对于常量,变量以及函数所规定的语法规则来定义属性和添加方法. 与其他编程语言所不同的是,Swif ...

  3. 【Luogu】P1486郁闷的出纳员(Splay)

    题目链接 名副其实的调了一下午…… 每做一道题都是对我那不规范的Splay代码的刀刻斧凿一般的修正啊…… Splay.如果有一批员工不干了,那就找还能干的薪水最少的员工,把它splay到根,删除它的左 ...

  4. HDU——2609How many(字符串的最小表示法+substr)

    How many Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total S ...

  5. 【spring aop切面】基础使用教程

    package tpf.aspect; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFact ...

  6. 计算器(bzoj 2242)

    Description 你被要求设计一个计算器完成以下三项任务: 1.给定y,z,p,计算Y^Z Mod P 的值: 2.给定y,z,p,计算满足xy≡ Z ( mod P )的最小非负整数: 3.给 ...

  7. SharePoint 2013 App 开发—App开发概述

    基于安全性的考虑,SharePoint App 不能像其它两种方式一样,直接使用安全性更高的服务端代码的API.Javascript 扮演极为重要的角色,在SharePoint App中与ShareP ...

  8. TinyXML2使用教程(转)

    原文转自 http://blog.csdn.net/K346K346/article/details/48750417 1.TinyXML2概述 TinyXML2是simple.small.effic ...

  9. linux .so .a .o 文件

    linux下文件的类型是不依赖于其后缀名的,但一般来讲:.o,是目标文件,相当于windows中的.obj文件.so 为共享库,是shared object,用于动态连接的,和dll差不多.a为静态库 ...

  10. C#学习笔记---区分StringWriter(Reader)和StreamWriter(Reader),TextWriter(Reader),BinaryWriter(Reader)

    1.TextWriter(Reader)分别是对连续字符系列处理的编写器(读写器),来自System.IO 2.StringWriter(Reader)继承TextWriter(Reader),它主要 ...