Javaweb——IDEA案例之Request对象API
第五次上机:
Request对象API:
1、服务器向浏览器发送一个响应码404
2、服务器通知浏览器跳转到百度网站
3、服务器通知浏览器跳转到网站内部面页success.html
3、服务器向浏览器响应“欢迎来到servlet世界”
4、获取浏览器请求的方式
5、获取web请求的url
6、获取web请求的uri
7、获取web请求的查询字符串:username=tom&userpwd=123
8、获取web应用的根目录
9、获取服务器的ip地址
10、获取web请求的远程地址及端口号即浏览器所在主机的IP和PORT
请求转发:
1、新建一个登录面页,要求至少包含用户名称和用户密码
2、新建一个Servlet处理登录请求("/login"),当用户名称和密码分别为’admin’和’1234’时,表示登录成功,并将用户称保存到请求域中,然后将此请求转发到另一个Servlet中("/servlet02"),当登录失败时重定向到error.html面页 并点一个链接跳转到登录页面
3、在第二个Servlet中读取用户的登录名称并将其打印到浏览器
CookieServlet01
package xyc.sjxy.sesrvlet;
//代码齐全
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/c01")//映射路径
public class CookieServlet01 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
//创建一个cookie
Cookie userName=new Cookie("username","tom");
Cookie uesrpwd=new Cookie("uesrpwd","123");
//cookie=javax,servlet.http.Cookie@6ae292a1
//Object类的toString方法
//System.out.println("cookie = " + cookie);
//将cookie信息发送到浏览器端 以响应头的形式:Set-Cookie:username=tom
resp.addCookie(userName);//默认服务器发送给浏览器的cookie信息是存放在浏览器的进程中(内存中)所以只能临时保存 一旦关闭cookie就没有了
resp.addCookie(uesrpwd);//如果要永久保存cookie的话,必须要把cookie存入到浏览器端的硬盘中 要实现这个功能 cookie要设置一个属性MaxAge
//这个属性的默认值是-1 (代表存放在内存里) 用户只需设置一个正数即可 如果设置为0 代表删除cookie
//当浏览器以后继续请求这个servlet时 它将前面保存的cookie信息以请求头的形式回送给服务器:Cookie:username=tom;userpwd=123;
//获取cookie信息
Cookie[] cookies=req.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
String name=cookie.getName();//key
String value=cookie.getValue();//value
System.out.println(name+" = " + name);
resp.getWriter().println(name+"="+value);
}
}
else{
resp.getWriter().println("没有cookie信息");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
CookieServlet02
package xyc.sjxy.sesrvlet;
//代码齐全
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/c02")//映射路径
public class CookieServlet02 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
//创建一个cookie
Cookie userName=new Cookie("username","tom");
Cookie uesrpwd=new Cookie("uesrpwd","123");
//cookie=javax,servlet.http.Cookie@6ae292a1
//Object类的toString方法
//System.out.println("cookie = " + cookie);
//将cookie信息发送到浏览器端 以响应头的形式:Set-Cookie:username=tom
userName.setMaxAge(60);//这个值是以秒为单位
resp.addCookie(userName);//默认服务器发送给浏览器的cookie信息是存放在浏览器的进程中(内存中)所以只能临时保存 一旦关闭cookie就没有了
resp.addCookie(uesrpwd);//如果要永久保存cookie的话,必须要把cookie存入到浏览器端的硬盘中 要实现这个功能 cookie要设置一个属性MaxAge
//这个属性的默认值是-1 (代表存放在内存里) 用户只需设置一个正数即可 如果设置为0 代表删除cookie
//当浏览器以后继续请求这个servlet时 它将前面保存的cookie信息以请求头的形式回送给服务器:Cookie:username=tom;userpwd=123;
//获取cookie信息
Cookie[] cookies=req.getCookies();
if(cookies!=null){
for(Cookie cookie:cookies){
String name=cookie.getName();//key
String value=cookie.getValue();//value
System.out.println(name+" = " + name);
resp.getWriter().println(name+"="+value);
}
}
else{
resp.getWriter().println("没有cookie信息");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
CookieAccess
package xyc.sjxy.sesrvlet;
//代码全了
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Date;
@WebServlet("/d")
public class CookieAccess extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.setContentType("text/html;charset=utf-8");
PrintWriter out=resp.getWriter();
//显示用户上次访问本网站的日期
//读取cookie信息
Cookie[] cookies=req.getCookies();
boolean isFirst=true;
Cookie accessTime=null;
if(cookies!=null){
for(Cookie cookie:cookies){
if(cookie.getName().contains("access")){
isFirst=false; //这不是第一次访问
accessTime=cookie;
break;
}
}
}else{
isFirst=true;
//这是第一次访问本网站 将当前的访问时间记录到cookie里 且永久保存在硬盘里
}
if(isFirst){
//第一次访问
Date date = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format=sd.format(date);//格式化以后的时间
format=URLEncoder.encode(format,String.valueOf(StandardCharsets.UTF_8));
// //由于cookie中不能包含特殊字符 如空格等 所以要编码
Cookie access = new Cookie("access", format);
access.setMaxAge(3*60);// 保存三分钟
resp.addCookie(access);// 将访问存到浏览器
out.println("你是第一次来到本网站");
}else{
//不是第一次访问
//说明用户以前访问过
//读取cookie并显示在页面上
String value =accessTime.getValue();
//由于cookie编码过了 这次要解码
value= URLDecoder.decode(value,String.valueOf(StandardCharsets.UTF_8));
out.println("上次访问时间为:"+value);
//更新cookie 将当前的访问时间写回cookie
Date date = new Date();
SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String format=sd.format(date);//格式化以后的时间
format=URLEncoder.encode(format,String.valueOf(StandardCharsets.UTF_8));
accessTime.setValue(format);//更新cookie的值
//重新发给浏览器
accessTime.setMaxAge(3*60);
resp.addCookie(accessTime);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
遇到的严重问题
在运行时出现
“已与服务器断开连接”
原因
tomcat的两个jar包没配置进去
解决方案
添加jar包即可