1.JSP九大内置对象
request、response、session、application、out、pageconText、config、page、exception
内置对象无法点出的解决方法:
点击选中工程,点击File,点击project Structure,点击libraries,点击加,点击java,选择tomcat的安装目录中的lib目录中的servlet.api.jar,点击ok即可
转载:IDEA提示JSP页面不能使用内置对象解决方法_xiaoyue-CSDN博客
2.request对象
2.1获取表单实现
文件一:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="demo02.jsp" method="post">//添加post就会加密,解决中文乱码
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确定"></td>
</tr>
</table>
</form>
</body>
</html>
文件二:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
用户名:
<%
request.setCharacterEncoding("UTF-8");//设置字符集
String username = request.getParameter("username");
%>
<%= username%>
</body>
</html>
2.2获取转发实现
文件一:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="demo02.jsp" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确定"></td>
</tr>
</table>
</form>
</body>
</html>
文件二:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
用户名:
<%
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
//转发
request.setAttribute("username",username);
request.getRequestDispatcher("demo03.jsp").forward(request,response);
%>
<%= username%>
</body>
</html>
文件三:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
demo03
<%
String username = (String) request.getAttribute("username");
%>
<%= username %>
</body>
</html>
实现转发功能,点击页面一的提交,出现的是demo03的页面,其中demo02的值经过了转发
另外,转发的url地址不变,还是demo02的url
转发和重定向
转发 | 重定向 | 转发 |
行为方式 | 客户端行为 | 服务器端行为 |
客户端发送请求次数 | 1次 | 2次 |
客户端地址栏是否改变 | 不变 | 变 |
3.重定向
文件一:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="demo02.jsp" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确定"></td>
</tr>
</table>
</form>
</body>
</html>
文件二:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
用户名:
<%
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
//重定向
response.sendRedirect("demo03.jsp");
%>
<%= username%>
</body>
</html>
文件三:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
demo03
<%
String username = (String) request.getAttribute("username");
%>
<%= username %>
</body>
</html>
重定向,直接这样,值为null
4.session
4.1解决重定向的缺陷
文件一:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="demo02.jsp" method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="确定"></td>
</tr>
</table>
</form>
</body>
</html>
文件二:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
用户名:
<%
request.setCharacterEncoding("UTF-8");
String username = request.getParameter("username");
//转发
// request.setAttribute("username",username);
// request.getRequestDispatcher("demo03.jsp").forward(request,response);
//重定向
// response.sendRedirect("demo03.jsp");
//session
session.setAttribute("username",username);
response.sendRedirect("demo03.jsp");
%>
<%= username%>
</body>
</html>
文件三:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
demo03
<%
// String username = (String) request.getAttribute("username");//重定向
String username = (String) session.getAttribute("username");
%>
<%= username %>
</body>
</html>
4.2保留数据时间
session.setAttribute("username",username);
session.setMaxInactiveInterval(3);//在重定向后保留时间
response.sendRedirect("demo03.jsp");
4.3request和session的区别
第一个文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
request.setAttribute("username1","杨幂");//重定向不可以
session.setAttribute("username2","迪丽热巴");//转发,重定向可以接收
response.sendRedirect("demo05.jsp");
%>
</body>
</html>
第二个文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
String username1 = (String)request.getAttribute("username1");//重定向不可以
String username2 = (String)session.getAttribute("username2");//转发,重定向可以接收
%>
<%= username1 %><br/>
<%= username2 %>
</body>
</html>
在重定向的时候,request不可以获取到,但是session可以,request请求的生命周期和session的区别
5.application
解决session的缺陷:此时换浏览器就重新计数
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Integer fangwen = (Integer)session.getAttribute("fangwen");
if (fangwen != null){
fangwen+=1;
}else{
fangwen=1;
}
session.setAttribute("fangwen",fangwen);
%>
网站访问人数:
<%= session.getAttribute("fangwen") %>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Integer fangwen = (Integer)application.getAttribute("fangwen");
if (fangwen != null){
fangwen+=1;
}else{
fangwen=1;
}
application.setAttribute("fangwen",fangwen);
%>
网站访问人数:
<%= application.getAttribute("fangwen") %>
</body>
</html>
换为application则全局共享,服务器不炸就没事
6.pageContext对象
页面一:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
pageContext.setAttribute("name", "啦啦啦");
%>
demo07页面:
<%= pageContext.getAttribute("name") %>
<% pageContext.include("demo08.jsp"); %>
</body>
</html>
页面二:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
demo08页面:
<%= pageContext.getAttribute("name") %>
</body>
</html>
显示两个页面的内容,url为原来的路径,但是设置的值只在本页面显示
7.cookies缓存
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<%
Cookie cookie1 = new Cookie("username","tom");
Cookie cookie2 = new Cookie("pwd","123456");
response.addCookie(cookie1);
response.addCookie(cookie2);
response.sendRedirect("demo002.jsp");
%>
<body>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%
Cookie[] cookies = request.getCookies();
String username = "";
String pwd = "";
for (int i = 0; i < cookies.length; i++){
if (cookies[i].getName().equals("username")){
username = cookies[i].getValue();
}
if (cookies[i].getName().equals("pwd")){
pwd = cookies[i].getValue();
}
}
out.print("用户名:"+username+",密码:"+pwd);
%>
</body>
</html>