重定向特点
1、浏览器地址栏会发生变化
2、两次请求
3、不共享Request域中的数据
4、不能访问WEB-INF下的资源
5、可以访问工程外的资源
JSP中setAttribute()和getAttribute()
setAttribute这个方法,在JSP对象中的session和request都有这个方法,这个方法作用就是保存数据,然后还可以用getAttribute方法来获取出来。
例如:有个User对象,User users=new User(“hong”,“男”);
1、 request.setAttribute(“users”,users)这个方法是将users这个对象保存在
request作用域中,然后在转发进入的页面就可以获取到你的值
2、session.setAttribute(“users”,users)。这个方法和上面唯一的区别就是作用域,就是在你整个程序启动的时候,如果在session中保存了数据,那么在你这个无论你在哪个页面,在什么时候都可以获取到这个值,全局的,只要你的这个程序是启动的。session默认的过期时间是30分钟,过期无效,可以去修改这个值。
3、request.getSession().setAttribute(“绑定名”,绑定值); 这段代码的意思就是:获取session对象,然后把要绑定对象/值 帮定到session对象上 用户的一次会话共享一个session对象。
${表达式}EL表达式知识点
EL表达式中对象名.属性名不找属性的值,而是找名字对应的getXxx方法,没有此方法会报错
且属性原来大写的首字母要改成小写(规则:属性如果有两个或两个以上字母大写,则第二个大写字母不能小写,其余都可小写),
如getTotalCount()方法,
想要查询它的属性方法:sessionScope.cart.totalCount
EL表达式输出Java类的属性
创建Person类
public class Person {
//输出Person类中普通属性,数组属性,list集合属性和map集合属性
private String name;
private String[] phones;
private List<String> cities;
private Map<String, Object> map;
//注意:没有声明age属性
public int getAge() {
return 18;
}
//以及全参、空参构造器,各属性的getter/setter方法
}
测试:
<body>
<%
Person person = new Person();
person.setName("JayChou");
person.setPhones(new String[]{"123","456","789"});
//给cities属性赋值
List<String> cities = new ArrayList<String>();
cities.add("北京");
cities.add("上海");
cities.add("深圳");
person.setCities(cities);
//给map属性赋值
Map<String,Object> map = new HashMap<>();
map.put("key1","value1");
map.put("key2","value2");
map.put("key3","value3");
person.setMap(map);
pageContext.setAttribute("p", person);
%>
<%--EL表达式中对象名.属性名不找属性的值,而是找名字对应的getXxx方法,没有此方法会报错--%>
输出Person:${ p }<br/>
输出Person的name属性:${p.name} <br>
输出Person的phones数组地址值:${p.phones} <br>
输出Person的phones数组属性值:${p.phones[2]} <br>
输出Person的cities集合中的元素值:${p.cities} <br>
输出Person的List集合中个别元素值:${p.cities[2]} <br>
输出Person的Map集合: ${p.map} <br>
输出Person的Map集合中某个key的值: ${p.map.key1} <br>
<%-- 注意,即使没有age属性,但因为有getAge方法,也可得出结果 --%>
输出Person的age值:${p.age} <br>
</body>
JQuery语法中的attr()和prop()方法
attr()方法:可以设置和获取属性的值,不推荐操作checked、selected、disabled、readOnly,还可 以操作自定义属性。
prop()方法:可以设置和获取属性的值,只推荐操作checked、selected、disabled、readOnly
示例:
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function () {
//attr获取的使用:括号中的双引号中放属性名
alert($(":checkbox:first").attr("name")); //checkbox
//attr赋值的使用:第一个双引号中放属性名,第二个双引号中放指定的值
$(":checkbox:first").attr("name","abc"); //name属性值修改为abc
$(":checkbox").prop("checked",false); //两个都未被选中
//对自定义属性进行操作
$(":checkbox:first").attr("abc","abcValue");
//按F12可出现,临时存放一些数据
})
</script>
</head>
<body>
<input type="checkbox" name="checkbox" value="checkbox1" checked="checked"/>checkbox1
<input type="checkbox" name="checkbox" value="checkbox2"/>checkbox2
<div>1234</div>
<div>1234</div>
</body>
request.getParameter()方法介绍与request.getParameterValues()的区别
区别
request.getParameterValues(String name)是获得如checkbox类(名字相同,但值有多个)的数据。
可以用于接收数组变量 ,如checkobx类型
request.getParameter(String name)是获得相应名的数据,如果有重复的名,则返回第一个的值 .
一般用于接收一般变量 ,如text类型
使用方式
例1:对于text类型的input标签
<input type="text" name="name" value="1" />
<input type="text" name="name" value="2" />
<input type="text" name="name" value="3" />
request.getParameterValues(“name”) ----------------- [1, 2, 3]
request.getParameter(“name”) ------------------ 1
例2:对于checkbox的input标签
<input type="checkbox" name="habit" value="read">看书
<input type="checkbox" name="habit" value="movie">电影
<input type="checkbox" name="habit" value="game">游戏
request.getParameterValues(“habit”) ----------------- [read, movie, game]
request.getParameter(“name”) ------------------ read
tips
对于getParameter()方法获取的中文字符乱码的情况,尝试添加一句
request.setCharacterEncoding(“utf-8”);
Jsp四大域对象
"/"的不同情况下的不同含义
“/”若被浏览器解析,得到的地址是:http://ip:port/
(1) 斜杠
“/”若被服务器解析,得到的地址是:http://ip:port/工程路径
(1) /servlet1
(2) servletContext.getRealPath(“/”);
(3) request.getRequestDispatcher(“/”);
重定向:特殊情况:response.sendRedirect(“/”); 把斜杠发送到浏览器解析,得到http://ip:port/
HttpServletRequest类语法
setAttribute(key, value)将信息保存到域中
getAttribute(key):获取域数据
请求转发getRequestDispatcher()参数规范
参数以"/"开头,对应IDEA代码中的web目录
getRequestDispatcher():获取请求转发对象
//参数必须以斜杠打头,斜杠代表http://localhost:8080/工程名/,
RequestDispatcher requestDispatcher = request.getRequestDispatcher("/Servlet2");
表单标签
(1) form标签代表表单标签
1.action属性设置提交的服务器地址
2. method属性设置提交的方式:get(默认)或post
添加Library流程
base 标签
base标签可以设置当前页面中所有相对路径跳转时参照指定的路径来进行跳转,在href属性中设置指定路径
base 标签一般放在< title >标签之后
实例:
<head>
<meta charset="UTF-8">
<title>Title</title>
<!--base标签写在<title>标签之后-->
<base href="http://localhost:8080/MyTest/a/b/">
</head>
<body>
这是a下的b下的c.html<br/>
<a href="../../index.html">跳到web下的index.html</a>
</body>
Session会话
打开浏览器访问服务器,直到关闭浏览器,会话结束。
EL表达式和JSTL标签
EL表达式主要替代JSP的表达式脚本
JSTL主要替代JSP的代码脚本
怎么利用别的设备访问自己写的网站
使用到的方法
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%-- 先通过pageContext对象获取request、session对象,再获取以下内容 --%>
<%--
获取请求的协议:request.getScheme()
获取请求的服务器ip或域名:request.getServerName()
获取请求的服务器端口号:request.getServerPort()
获取当前工程路径:request.getContextPath()
获取请求的方式:request.getMethod()
获取客户端的ip地址:request.getRemoteHost()
获取会话的唯一标识:session.getId()
--%>
1.协议: ${ pageContext.request.scheme }<br>
2.服务器ip:${ pageContext.request.serverName }<br>
3.服务器端口:${ pageContext.request.serverPort }<br>
4.获取工程路径:${ pageContext.request.contextPath }<br>
5.获取请求方法:${ pageContext.request.method }<br>
6.获取客户端ip地址:${ pageContext.request.remoteHost }<br>
7.获取会话的id编号:${ pageContext.session.id}<br>
</body>
</html>