JavaWeb练习3--Servlet进阶

七、 获取初始化参数

1.获得servlet初始化参数

web3.0–初始化参数

在这里插入图片描述
在这里插入图片描述

package com.JavaWeb.Week4;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class GetInitParamServlet
 */
@WebServlet(
		urlPatterns="/GetInitParamServlet",
		initParams= {@WebInitParam(name = "baseNum", value="初始化参数")}
	)
public class GetInitParamServlet extends HttpServlet {
	String ServletInitParam = null;
	public void init(ServletConfig config) throws ServletException {
		//获取servlet初始化参数
		this.ServletInitParam = config.getInitParameter("baseNum");
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("Servlet初始化参数:"+ServletInitParam);
		out.close();
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

web2.0–初始化参数+上下文

在这里插入图片描述
在这里插入图片描述
xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>test1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <context-param>
	<param-name>appName</param-name>
	<param-value>Servlet Context InitParam</param-value>
  </context-param>
  <servlet>
    <servlet-name>GetInitParamServlet</servlet-name>
    <servlet-class>com.JavaWeb.week4.GetInitParamServlet</servlet-class>
    <init-param>
    	<param-name>baseName</param-name>
    	<param-value>Servlet InitParam</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>GetInitParamServlet</servlet-name>
    <url-pattern>/GetInitParamServlet</url-pattern>
  </servlet-mapping>
</web-app>

servlet:

package com.JavaWeb.week4;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetInitParamServlet extends HttpServlet {
	String basename = null;
	String appname =null;
	public void init(ServletConfig config)throws ServletException{
		//初始化
		this.basename = config.getInitParameter("baseName");
		//上下文
		ServletContext context = config.getServletContext();
		this.appname = context.getInitParameter("appName");
		//this.appname = config.getServletContext().getInitParameter("appName");
	}
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("Servlet InitParam(初始化参数):"+basename+"<br>");
		out.println("Servlet Context InitParam(上下文初始化参数):"+appname);
		out.close();
	}
}

八、跟踪会话

1. cookie

1.1 临时cookie、持久cookie

临时cookie:

在这里插入图片描述
在这里插入图片描述
关闭浏览器重新访问http://localhost:8080/Demo/CookieClientServlet
在这里插入图片描述

持久cookie:

在这里插入图片描述
在这里插入图片描述
关闭浏览器重新访问http://localhost:8080/Demo/CookieClientServlet
在这里插入图片描述

代码:
在这里插入图片描述
在这里插入图片描述

CookieServerServlet:

package com.JavaWeb.Week4;

import java.io.*;
import java.util.UUID;
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;

/**
 * Servlet implementation class CookieServerServlet
 */
@WebServlet("/CookieServerServlet")
public class CookieServerServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String ID = UUID.randomUUID().toString();//生成128位随机数,转为字符串
		
		Cookie cookie = new Cookie("id",ID);//键名-键值
		//cookie.setMaxAge(60*60);//设置cookie有效期,单位:秒。默认值为-1
		response.addCookie(cookie);//发送cookie
		
		//response.getWriter().print("已经给你发送了ID");
		PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("send ID ,success!");
		out.println("<a href='CookieClientServlet'>show cookie</a>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

CookieClientServlet:

package com.JavaWeb.Week4;

import java.io.IOException;
import java.io.PrintWriter;
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;
/**
 * Servlet implementation class CookieClientServlet
 */
@WebServlet("/CookieClientServlet")
public class CookieClientServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		
		Cookie[] cs = request.getCookies() ;//获取cookie对象。用cookie数组装(可以接收不止一个cookie)
		if(cs != null) {
			for(Cookie c:cs) {//循环
				if(c.getName().equals("id")) {
					out.println("You cookie ID is "+c.getValue());
				}else {
					out.println("Fail! name:"+c.getName()+"   value:"+c.getValue());
				}
			}
		}else {
			out.println("Fail! NULL");
		}
		out.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

1.2 创建三个不同生命周期的Cookie对象。

在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述
60s内重开新打浏览器
在这里插入图片描述
60s后重开新打浏览器
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
CookieAServlet:

package com.JavaWeb.Week4;
import java.io.IOException;
import java.io.PrintWriter;
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;
/**
 * Servlet implementation class CookieAServlet
 */
@WebServlet("/CookieAServlet")
public class CookieAServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        Cookie cookie = new Cookie("name", "liaoshui");
        response.addCookie(cookie);        
        cookie = new Cookie("type", "cookie");
        cookie.setMaxAge(60);
        response.addCookie(cookie);
        cookie = new Cookie("age", "20");
        cookie.setMaxAge(3600);
        response.addCookie(cookie);
        
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("send ID ,success!");
		out.println("<a href='CookieBServlet'>show cookie</a>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

CookieBServlet:

package com.JavaWeb.Week4;
import java.io.IOException;
import java.io.PrintWriter;
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;
/**
* Servlet implementation class CookieBServlet
*/
@WebServlet("/CookieBServlet")
public class CookieBServlet extends HttpServlet {
   protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   	Cookie cs[]= request.getCookies();//获取cookie对象		
   	PrintWriter out = response.getWriter();
   	out.println("<html>");
   	out.println("<body>");
   	
   	if(cs != null) {
   		out.println("send cookie ,success!");
   		for(Cookie c:cs) {
   			out.println("<br>cookie name:"+c.getName()+"       cookie value:"+c.getValue());
   		}
   	}else {
   		out.println("Fail!!");
   	}
   	out.println("</body>");
   	out.println("</html>");
   	out.close();
   }
   protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   	doGet(request, response);
   }
}

1.3 使用Cookie记录用户访问次数,当用户第5次访问时告诉他获得一份礼物。

在这里插入图片描述
在这里插入图片描述

测试结果:
在这里插入图片描述
在这里插入图片描述
源码:

package com.JavaWeb.Week4;
import java.io.IOException;
import java.io.PrintWriter;
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;
/**
 * Servlet implementation class CookieGiftServlet
 * 使用Cookie记录用户访问次数,当用户第5次访问时告诉他获得一份礼物。
 */
@WebServlet("/CookieGiftServlet")
public class CookieGiftServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
	//取到cookie访问次数
		Cookie cs[] = request.getCookies();
		Cookie mycookie = null;//中间值,做更改用
		boolean k = false;//状态标识
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		//取到cookie中的登陆参数
		if (cs != null) {
			for (Cookie c : cs) {// 循环
				if (c.getName().equals("loginCount")) {
					mycookie = c;
					k = true;
				} 
			}
		} else {//第一个次访问会出现
			//out.println("Cookie Is NULL! Get Cookies Fail!");
		}
		
	//更改登陆参数
		int temp= 0;//记录登陆次数
		if(k) {	//登陆过
			temp = Integer.parseInt(mycookie.getValue());
			temp++;
			mycookie.setValue(String.valueOf(temp));
			if(temp==5)out.println("Congratulations!!!!!!!!!!! A gift is awaiting you.<br>");
		}else { //未登陆过,没有名为loginCount的cookie
			temp = 1;
			mycookie = new Cookie("loginCount",String.valueOf(temp));
		}
		mycookie.setMaxAge(60*60*24*30);
		out.println("欢迎你,你是第" + String.valueOf(temp) + "次访问本站点");
		
	//将改变的值传回
		response.addCookie(mycookie);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

1.4 正确登陆后将用户名的信息以Cookie形式写给客户端

修改之前的登录程序,当用用户名、密码正确登录成功时,将用户名的信息以Cookie的形式写给客户端,设置有效期是1个月,编写ShowServet查看这个Cookie的信息。

2. session

刷新不变。重开浏览器、服务器会变。
在这里插入图片描述
在这里插入图片描述

代码:
在这里插入图片描述
在这里插入图片描述

九、servlet跳转

1. 客户端跳转–重定向

在这里插入图片描述

2. 服务器端跳转–请求转发

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

十、servlet间数据共享

1.不同用户的页面的数据共享、同一个用户不同页面的数据共享

在这里插入图片描述
在这里插入图片描述
session数据不能被其他用户使用:
在这里插入图片描述

servlet1:

package com.JavaWeb.Week4;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * Servlet implementation class servlet1
 */
@WebServlet("/servlet1")
public class servlet1 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().println("<html><body>");
		
	//1.同一个用户不同页面的数据共享	
		//获取session
		HttpSession session = request.getSession();
		//充值
		session.setAttribute("account", 1000);
		response.getWriter().write("servlet1: your account is "+session.getAttribute("account").toString()+"<br>");
	
	//2.不同用户的页面的数据共享
		getServletContext().setAttribute("wash", 2000);
		response.getWriter().write("servlet1: wash is "+getServletContext().getAttribute("wash").toString()+"<br>");
	
		response.getWriter().println("</body></html>");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

servlet2:

package com.JavaWeb.Week4;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * Servlet implementation class servlet2
 */
@WebServlet("/servlet2")
public class servlet2 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.getWriter().println("<html><body>");
		
	//1.同一个用户不同页面的数据共享		
		HttpSession session = request.getSession();
		if(session.getAttribute("account") != null) {
			response.getWriter().write("servlet2: your account is "+session.getAttribute("account").toString()+"<br>");
		}else {
			response.getWriter().write("servlet2, account null!");
		}
		
	//2.不同用户的页面的数据共享
		if(getServletContext().getAttribute("wash") != null) {
			response.getWriter().write("servlet2: wash is "+getServletContext().getAttribute("wash").toString()+"<br>");
		}else {
			response.getWriter().write("servlet2, wash null!");
		}

		response.getWriter().println("</body></html>");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

servlet3:

package com.JavaWeb.Week4;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * Servlet implementation class servlet3
 */
@WebServlet("/servlet3")
public class servlet3 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		response.getWriter().println("<html><body>");
		
	// 1.同一个用户不同页面的数据共享
		HttpSession session = request.getSession();
		if (session.getAttribute("account") != null) {
			response.getWriter().write("servlet3: your account is" + session.getAttribute("account").toString()+"<br>");
		} else {
			response.getWriter().write("servlet3, null!");
		}

	// 2.不同用户的页面的数据共享
		if (getServletContext().getAttribute("wash") != null) {
			response.getWriter().write("servlet3: wash is " + getServletContext().getAttribute("wash").toString() + "<br>");
		} else {
			response.getWriter().write("servlet3, wash null!");
		}

		response.getWriter().println("</body></html>");
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

2.服务器端跳转下的数据共享

在这里插入图片描述
servlet1:

package com.JavaWeb.Week4;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class servlet11
 */
@WebServlet("/servlet11")
public class servlet11 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
	// 3.服务器端跳转下的数据共享
		request.setAttribute("info", "3");
		request.getRequestDispatcher("servlet22").forward(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

servlet2:

package com.JavaWeb.Week4;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class servlet22
 */
@WebServlet("/servlet22")
public class servlet22 extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {		
	//3.服务器端跳转下的数据共享
		String info =null;
		if(request.getAttribute("info") != null) {
			info = request.getAttribute("info").toString();
			response.getWriter().write("servlet22: info is "+request.getAttribute("info").toString());
		}else {
			response.getWriter().write("servlet22, info null!");
		}
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

十一、web3.0上传下载

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
upload.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>	
	<form name="uploadform" method="post" action="../fileuploadServlet" enctype="multipart/form-data">
		<h4>文件上传:<input type="file" name="uploadfile" value="" /></h4>
		<input type="submit" value="提交" class="button" />
	</form>
</body>
</html> 

fileuploadServlet:

package com.JavaWeb.Week4Project;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
/**
 * Servlet implementation class fileupload
 */
@WebServlet("/fileuploadServlet")
@MultipartConfig // 支持文件上传
public class fileuploadServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
	// 上传
		// 创建文件保存目录
		File path = new File("F:\\JavawebFile");
		if (!path.exists()) {
			path.mkdir();
		}

		// 获取part对象
		Part part = request.getPart("uploadfile");
		// 获取文件名称1
		// String filename = part.getSubmittedFileName();//无法获取文件名
		// 获取文件名称2:获取请求头信息,从头信息中获取filename
		String header = part.getHeader("content-disposition");
		String filename = getFileName(header);

		// 构建物理路径,将文件写入指定路径中
		String filePath = path.getPath() + "\\" + filename;
		part.write(filePath);

	// 输出下载查看的链接
		// 对文件名进行URL编码,因为放在了get方式的地址中:中文必须进行编码
		String urlname = URLEncoder.encode(filename, "UTF-8");
		response.getWriter().write("<h2>文件上传成功,请点击如下链接下载查看</h2>");
		response.getWriter().write("<a href='DownloadfileServlet?file=" + urlname + "'>" + filename + "</a>");
	}
	private String getFileName(String header) {
		/**
		 * String[] tempArr1 = header.split(";");
		  *  代码执行完之后,在不同的浏览器下,tempArr1数组里面的内容稍有区别
		 *  
		  *  火狐或者google浏览器下:tempArr1={form-data,name="file",filename="snmp4j--api.zip"}
		 * IE浏览器下:tempArr1={form-data,name="file",filename="E:\snmp4j--api.zip"}
		 */
		String[] tempArr1 = header.split(";");		
		/**
		  * 火狐或者google浏览器下:tempArr2={filename,"snmp4j--api.zip"}
         * IE浏览器下:tempArr2={filename,"E:\snmp4j--api.zip"}
         */
		String[] tempArr2 = tempArr1[2].split("=");
				
		//获取文件名,兼容各种浏览器的写法
		String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\\") + 1).replaceAll("\"", "");
        return fileName;
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
}

DownloadfileServlet::

package com.JavaWeb.Week4Project;
import java.io.FileInputStream;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class DownloadfileServlet
 */
@WebServlet("/DownloadfileServlet")
public class DownloadfileServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//获取文件名--get方式:http://localhost:8080/Demo/DownloadfileServlet?file=xxx
		String file = request.getParameter("file");//获取file		
		//获取文件路径
		String filepath = "F:\\JavawebFile\\"+file;
		//根据文件名称获取文件MIME类型,用于指定ContentType(文件类型)。告诉浏览器发送什么类型的数据。
		String mimetype = getServletContext().getMimeType(file);
		response.setContentType(mimetype);
		// 设定Content-disposition属性值:文件下载浏览器后以什么方式打开。inline表示在浏览器内部直接打开文件,其他可以网上了解
        response.setHeader("Content-disposition", "inline");
 
        FileInputStream fis = new FileInputStream(filepath);
        byte[] in = new byte[2048];
        while (fis.read(in, 0, in.length) != -1) {
            response.getOutputStream().write(in);
        }
        response.getOutputStream().flush();
        fis.close();		
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

十二、实战–session登陆、注销功能(登陆后才能访问欢迎界面)

在这里插入图片描述

代码:
在这里插入图片描述
在这里插入图片描述
login.html

<body>
	<form action="../SessionLoginServlet" method="post">
	用户名<input type="text" name="username" /><br>
	密码<input type="password" name="password" /><br>
	<input type="submit" value="提交" />
	</form>
</body>

loginservlet:

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		request.setCharacterEncoding("UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html><body>");
		
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		HttpSession session = request.getSession();
		
		if(username == null || username.equals("") || password == null || password.equals("")) {
			out.println("用户名或密码为空,请 <a href='html/4sessionlogin.html'>重新输入</a>");
		}
		else if( !username.equals("admin") || !password.equals("123")) {
			out.println("用户名或密码错误,请 <a href='html/4sessionlogin.html'>重新输入</a>");
		}
		else {
			session.setAttribute("username", username);
			response.setHeader("refresh","2;URL=SessionWelcomeServlet");//定时跳转
			out.println("登陆成功,2秒后跳转到欢迎页面!");
			out.println("<br>如果跳转失败,<a href='SessionWelcomeServlet'>请点击</a>");
		}
		
        out.println("<html><body>");
        out.close();
	}

welcomeservlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html><body>");
		
		HttpSession session = request.getSession();
		if(session.getAttribute("username") == null) {
			request.getRequestDispatcher("html/4sessionlogin.html").forward(request,response);//服务器端跳转
		}
		else {
			out.println("欢迎到来,"+ session.getAttribute("username").toString() +"!<br>");
			out.println("<a href='SessionLogoutServlet'>注销</a>");
		}
		out.println("<html><body>");
        out.close();
	}

logoutservlet:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		out.println("<html><body>");
		
		HttpSession session = request.getSession();
		session.invalidate();//session失效
		
		//请求转发
		//request.getRequestDispatcher("html/4sessionlogout.html").forward(request, response);//乱码,why?
		
		//跳转
		response.setHeader("refresh","2;URL=html/4sessionlogout.html");//定时跳转
		out.println("注销成功,2秒后显示注销提示!");
		out.println("<br>如果跳转失败,<a href='html/4sessionlogout.html'>请点击</a>");
		
		out.println("<html><body>");
        out.close();
	}

logout.html

<body>
	<h1>欢迎再次访问</h1>
	thank you !
</body>

作业:

1. servletcontext统计网站总的访问量

2. 修改Javaweb2实战-登录程序,使用Cookie保存用户名

3. 一人投一票程序实现

4. 实现session注销程序,与javaweb2作业中注册整合。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值