JSP二:掌握JSP
在JSP中,request和response是非常重要的两个东西,请务必知道他们的常用方法。
request 常用方法:
1、String getParameter(String key) 获取客户端传来的参数。
示例: 我们获取id,name,age 多个参数是通过&符号分开
<%
String id = request.getParameter("id");
String name = request.getParameter("name");
String age = request.getParameter("age");
%>
id:<%=id%>,name:<%=name%>,age=<%=age%>
访问地址http://localhost:8080/new_javaweb_test_war_exploded/test2.jsp?id=985&name=xn2001&age=16
2、void setAttribute(String key,Object value) 通过键值对的形式保存数据。
3、Object getAttribute(String key) 通过 key 取出 value。
4、RequestDispatcher getRequestDispatcher(String path) 返回⼀个 RequestDispatcher 对象,该对象的 forward ⽅法⽤于请求转发。
我们对前四个方法做一个小案例,首先我们建立几个jsp页面,分别叫hello1,hello2,hello3
我们让hello1获取一个name参数,保存到key为name中,然后转发给hello2.jsp,hello2不做处理直接转发给hello3.jsp,相关代码如下
hello1.jsp
<body>
<h1>我是Hello1</h1>
<%
//获取name值
String name = request.getParameter("name");
request.setAttribute("name",name);
%>
<%
// 请求分发跳转
request.getRequestDispatcher("hello2.jsp").forward(request,response);
%>
</body>
hello2.jsp
<body>
<h1>我是Hello2</h1>
<%
request.getRequestDispatcher("hello3.jsp").forward(request,response);
%>
</body>
hello3.jsp
<body>
<h1>我是Hello3</h1>
<%=request.getAttribute("name")%>
</body>
我们启动项目,到浏览器中访问hello1.jsp,会发现其实访问的是hello3.jsp中的内容,但是地址栏不改变,name值也成功取出来。
5、String[] getParameterValues() 获取客户端传来的多个同名参数。
实例:
我在test2.jsp中加入该方法的使用,获取多个name,保存为数组。
<body>
<%
String id = request.getParameter("id");
String[] name = request.getParameterValues("name");
String age = request.getParameter("age");
%>
id:<%=id%>,name:<%=Arrays.toString(name)%>,age=<%=age%>
</body>
访问地址/test2.jsp?name=乐心湖&name=心湖博客&id=211&age=16
6、void setCharacterEncoding(String charset) 指定每个请求的编码。中文乱码时需要设置,不乱码一般用不到。
HTTP 请求状态码
200:正常
404:资源找不到
400:请求类型不匹配
500:Java 程序抛出异常
response 常用方法:
sendRedirect(String path):重定向,页面之间的跳转。
转发 getRequestDispatcher 和 重定向 sendRedirect 的区别:
- 转发是将同⼀个请求传给下⼀个页面
- 重定向是创建⼀个新的请求传给下⼀个页面,之前的请求将结束⽣命周期。
扩展
面试常问:
转发和重定向有什么区别
转发:同⼀个请求在服务器之间传递,地址栏不变,也叫服务器跳转。
重定向:由客户端发送⼀次新的请求来访问跳转后的⽬标资源,地址栏改变,也叫客户端跳转。
实例:
如果两个页面之间需要通过 request 来传值,则必须使用转发,不能使用重定向。
在用户登录功能里,如果⽤户名和密码正确,则跳转到首页(转发),并且展示用户名,否则重新回到登陆页面(重定向)。
我们去写一套完整的登录系统,
首先新建一个login.jsp,里面是一个表单,有用户名,密码,登录
<body>
<form action="check.jsp" method="post">
用户名:<input type="text" name="username"/><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>
</body>
我们点击登录会提交到check.jsp,所以我们需要去写这个jsp,我们在里面加入验证用户名密码的功能,如果正确就转发给welcome.jsp,因为转发才可以传递request。失败就重定向到login.jsp
<body>
<%
String username = request.getParameter("username");
String password = request.getParameter("password");
if (username.equals("admin")&&password.equals("123456")){
request.setAttribute("name",username);
request.getRequestDispatcher("welcome.jsp").forward(request,response);
}else{
response.sendRedirect("login.jsp");
}
%>
</body>
我们去写一个简单welcome.jsp
<body>
<%
String name = (String) request.getAttribute("name");
%>
你好<%=name%>,欢迎来到心湖演示。
</body>
启动项目,访问login.jsp,进行测试。效果如下图。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Hadoop2.7.6_07_HA高可用
- Hadoop2.7.6_08_Federation联邦机制 1.1. HDFS-federation图解2.1. 注意事项3.1. 部署3.2. 环境变量3.3. c
- ThinkPHP5 SQL注入漏洞 && PDO真/伪预处理分析
- Hive-1.2.1_01_安装部署
- Supervisord远程命令执行漏洞(CVE-2017-11610)
- Hive-1.2.1_02_简单操作与访问方式
- PHP-CGI远程代码执行漏洞(CVE-2012-1823)分析
- Hive-1.2.1_03_DDL操作 1.1. Create Database1.2. Drop Database1.3. Use Database2.1. Cre
- Hive-1.2.1_04_DML操作 5.1. Join8.1. 使用案例8.2. Transform实现
- Hive-1.2.1_05_案例操作
- Mysql字符编码利用技巧
- Hive-1.2.1_06_累计报表查询
- Flume-1.8.0_部署与常用案例
- GlassFish 目录穿越漏洞测试过程
- 安装CDH7.1.1