javaweb dev 入
::::关于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 入的更多相关文章
- linux 在 open 时复制设备
管理存取控制的另一个技术是创建设备的不同的私有拷贝, 根据打开它的进程. 明显地, 这只当设备没有绑定到一个硬件实体时有可能; scull 是一个这样的"软件"设备 的例子. /d ...
- 详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统)、模糊查询
详细介绍idea实现javaweb项目登入注册(华东交通大学教务处信息管理系统).模糊查询 1,创建数据库,我的用户名:root 密码:root,数据库名称:lianwei,表名:login 2,效果 ...
- javaweb 基于java Servlet登入 简单入门案例
项目流程 第一步:创建一个java webproject第二步:创建三个界面,1,login.jsp 2 success.jsp 3 fail.jsp第三步:更改新建界面编码格式,utf-8 默然编码 ...
- Javaweb学习笔记——(十四)—————— 服务器端验证注册登入表单项目
项目:https://download.csdn.net/download/qq_40223688/10463436 项目 功能: *注册 *登录--------------------------- ...
- 初入JavaWeb(半成品)
2019-10-21 20:51:03 初次进行Javaweb的开发. 要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示 ...
- 新入职如何快速去了解一个Javaweb项目!
1.从代码结构入手,搞清楚Java源码所在目录以及jsp代码所在目录. 2.从Web.xml入手,搞清楚首页,上下文及配置情况. 3.从lib目录里初步查看系统使用的框架和工具包. 4.从页面大体浏览 ...
- WPF使用DEV之TreeListControl---加入复选框
1.绑定的Class中加入一个Bool类型的属性 2. 该属性无需初始赋值,你执行就可以看到如图: Bool类型数据自己主动变成了复选框 watermark/2/text/aHR0cDovL2Js ...
- javaweb笔记七
过滤器:是一个web中间组件,用于拦截从客户端发送给服务器的请求和响应.当客户端向服务器发出请求时,服务器会查看是否有过滤器和该请求匹配,如果有,则交给过滤器执行,业务操作后,可以将请求继续向目标资源 ...
- JavaWeb——Listener
一.基本概念 JavaWeb里面的listener是通过观察者设计模式进行实现的.对于观察者模式,这里不做过多介绍,大概讲一下什么意思. 观察者模式又叫发布订阅模式或者监听器模式.在该模式中有两个角色 ...
随机推荐
- lambda遍历的精简
本文转自 http://it.deepinmind.com/java%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B/2014/03/15/Java%E5%8 ...
- Spring整合Junit进行单元测试
I. 加入依赖包 Spring Test (如spring-test-2.5.4.jar) JUnit 4 Spring 其他相关包 II.新建Junit Test Case III.读取配置文件 @ ...
- hdu6103[尺取法] 2017多校6
/*hdu6103[尺取法] 2017多校6*/ #include <bits/stdc++.h> using namespace std; int T, m; ]; void solve ...
- Welcome-to-Swift-22泛型(Generics)
泛型代码可以确保你写出灵活的,可重用的函数和定义出任何你所确定好的需求的类型.你可以写出避免重复的代码,并且用一种清晰的,抽象的方式表达出来. 泛型是Swift许多强大特征中的其中一个,许多Swift ...
- Codeforces834D - The Bakery
Portal Description 给出一个\(n(n\leq35000)\)个数的数列\(\{a_i\}\)和\(m(m\leq50)\).将原数列划分成\(m\)个连续的部分,每个部分的权值等于 ...
- ESXi 给虚拟机添加网络串口
之前的有点儿小问题,我再更新下: Notice: 要看配没配对,能不能通,得先把虚拟机开开,在关机状态下,这种telnet方式一直是连不通的. 1. 先将ESXi的SSH开启(不知道不开行不行): 2 ...
- P2134 百日旅行 (斜率优化,DP)
题目链接 Solution 斜率优化\(DP\). 今天下午才打的第一道题 QwQ... \(90\) 分很简单,一个简单的递推. 令 \(f[i]\) 为最后一天旅游的花费, \(g[i]\) 为最 ...
- dubbo面试题之dubbo-client 和dubbo-server同时配置超时时间,是以哪个为准;
根据官网表示: 以 timeout 为例,下图显示了配置的查找顺序,其它 retries, loadbalance, actives 等类似: 方法级优先,接口级次之,全局配置再次之. 如果级别一样, ...
- ajax提交数据服务端返回报错
报错如下: if response.get('X-Frame-Options') is not None:AttributeError: 'str' object has no attribute ' ...
- Repeated Substrings(UVAlive 6869)
题意:求出现过两次以上的不同子串有多少种. /* 用后缀数组求出height[]数组,然后扫一遍, 发现height[i]-height[i-1]>=0,就ans+=height[i]-heig ...