java之Servlet

Servlet

1. 什么是javaweb程序?
答:运行在服务器上java程序就是javaweb程序,通过浏览器访问,例如我常说的网站就是典型的web程序。Web程序属于B/S架构的程序。

2. B/S架构的程序?B/S架构的程序与C/S架构的程序比较?
答:B–浏览器 S–服务器 (通过浏览器访问服务器上的程序、在线的)
与B/S架构相对的就是C/S架构的程序
C–客户端 S–服务器 (通过客户端访问服务器上的程序、下载的/安装的)
在这里插入图片描述

3. Web程序发展过程?
答:早期Web程序只能通过浏览器访问静态页面【HTML】
在这里插入图片描述
随着需求的变化,后来Web程序可以通过浏览器访问动态资源【动态网页】。
静态页面—任何请求访问的页面都是一模一样的,不后有任何变化【标配】
动态网页—随着请求的变化打开不同的页面【不同的用户/不同是时间】【定制】
现在随着用户需求得到变化,我们需要提供不同的资源,以满足所有的用户需求,那么这时我们就要掌握动态网页技术。

4. 常见的动态网页技术?
答:
1.cgi[通用网关接口] (1、运行慢 2.基于进程的数据交互麻烦)。
2.Servlet/jsp-----java
3.asp--------------C#
4.php-------------php语法
有java基础所以选择Servlet/jsp

5. 什么是Servlet?
答:运行在服务器上用来处理用户的请求,做出响应的java程序就是Servlet。

6. 常见的web服务器
答:WEB服务器也称为WWW服务器、HTTP服务器,其主要功能是提供网上信息浏览服务。Unix和Linux平台下常用的服务器有Apache、Nginx、Tomcat、IBM WebSphere、WebLogic等,其中应用最广泛的是Apache。而Window NT/2000/2003平台下最常用的服务器是微软公司的IIS。我们学习Servlet选择使用ApacheTomcat服务器,因为ApacheTomcat服务器开源免费,它对Servlet/jsp具有完美的支持。

7. ApacheTomcat服务器下载?安装?启动?测试?关闭?
答:http://tomcat.apache.org
在这里插入图片描述
下载好的压缩包
在这里插入图片描述
安装ApacheTomcat服务器【apache-tomcat-7.0.96-windows-x64.zip】,在指定目录下解压缩。
在这里插入图片描述
启动运行ApacheTomcat服务器,在安装目录中打开bin目录,运行在这里插入图片描述
批处理文件,即可运行ApacheTomcat服务器
在这里插入图片描述
测试ApacheTomcat服务器,打开浏览器输入http://127.0.0.1:8080
在这里插入图片描述
关闭ApacheTomcat服务器,在安装目录中打开bin目录,运行 在这里插入图片描述
批处理文件,即可关闭ApacheTomcat服务器
ApacheTomcat服务器http请求的默认访问端口是8080,这个端口是可以改变的,下面我们就来改变http请求的访问端口。
在安装目录中打开conf目录/server.xml

 <Connector port="9090" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

保存重新启动,就改变http请求的访问端口。

8. 开发一个简单的Servlet程序部署到服务器上运行
答:基于Eclipse开发一个简单的servlet程序部署并运行
1.创建一个Dynamic Web Project工程
在这里插入图片描述
选择运行目标
在这里插入图片描述
选择具体的服务器安装目录和jre
在这里插入图片描述
一路next,到最后一步选择自动创建web.xml文件
在这里插入图片描述
Finish完成
Web工程结构
在这里插入图片描述
在src下创建一个包,在这个包中创建一个“TestServlet”类,继承HttpServlet

package com.click369.servlet;
import javax.servlet.http.HttpServlet;
public class TestServlet extends HttpServlet{

}
//重写doGet/doPost方法

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doGet(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		super.doPost(req, resp);
	}
//在doGet方法中调用doPost
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req,resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		
	}
//将需要由servlet处理的请求的具体动作写入doPost方法中
@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		PrintWriter out=resp.getWriter();
		out.println("<html>");
		out.println("<head><title>one servlet</title></head>");
		out.println("<body>");
		out.println("<center>");
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		String showtime=sdf.format(new Date());
		out.println("<font size='10px' color='red'>"+showtime+"</font>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
//打开WebContent/WEB-INF/web.xml,配置我们编写好的servlet
 <servlet>
  	<servlet-name>oneservlet</servlet-name>
  	<servlet-class>com.click369.servlet.TestServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>oneservlet</servlet-name>
  	<url-pattern>/one</url-pattern>
  </servlet-mapping>

部署Servlet程序到服务器
Window—show view—Servers—点击”…click this link to create a new server”
在这里插入图片描述
部署servlet程序(选中需要部署的工程—Add—从左边移动到右边)
在这里插入图片描述
Finish–部署程序成功
在这里插入图片描述
运行程序(选择自己配置部署好的服务器–右键—start)
在这里插入图片描述
访问(http://127.0.0.1:8080/OneServlet/one)
在这里插入图片描述

9. Servlet的生命周期?
答:Servlet在运行的时候是由Servlet容器(服务器)来管理和维护Servlet的运行。不是程序开发者自己去实例化Servlet对象,然后调用方法执行,处理用户请求的。
在这里插入图片描述

10. Servlet中常用的接口,类,方法
答:
1.Servlet接口javax.servlet.Servlet

init(ServletConfig)--初始化方法
ServletConfig  getServletConfig()--得到Servlet配置对象(web.xml对应的java对象)
void  service(javax.servlet.ServletRequest arg0, javax.servlet.ServletResponse arg1)--请求处理
String  getServletInfo()--servlet信息(不常用)
void  destroy()---销毁servlet对象

2.ServletConfig接口javax.servlet.ServletConfig----Servlet配置对象(web.xml对应的java对象)
Strign getServletName()–得到web.xml中配置servletname
例如:

ServletConfig conf=this.getServletConfig();
String servletname=conf.getServletName();
String  getInitParameter(String)---得到在web.xml文件中配置的初始化参数值

例如:
1.需要在web.xml文件中配置一个/多个初始化参数

<servlet>
  	<servlet-name>test</servlet-name>
  	<servlet-class>com.click369.servlet.TestServlet</servlet-class>
  	<init-param>
  	   <param-name>myname</param-name>
  	   <param-value>zhangsan</param-value>
  	</init-param>
  	<init-param>
  	   <param-name>myaddress</param-name>
  	   <param-value>西安</param-value>
  	</init-param>
  </servlet>

2.通过String getInitParameter(String)—得到在web.xml文件中配置的初始化参数值
//得到ServletConfig对象

ServletConfig conf=this.getServletConfig();
String name=conf.getInitParameter("myname");
String address=conf.getInitParameter("myaddress");
System.out.println(name+"  "+address);

ServletContext getServletContext()—得到servlet上下文对象【运行环境】
可以获取当前服务器所支持的Servlet版本号
例如:

ServletConfig conf=this.getServletConfig();
	ServletContext  context=conf.getServletContext();
	int majorVersion=context.getMajorVersion();//主版本号
	int MinorVersion=context.getMinorVersion();//次版本号
	System.out.println(majorVersion+"."+MinorVersion);

3.HttpServletRequest接口javax.servlet.http.HttpServletRequest【表示一个http请求对象】
HttpServletRequest继承了javax.servlet.ServletRequest

void  setCharacterEncoding(String)--设置请求对象的字符编码
String  getCharacterEncoding()----得到请求对象的字符编码
String  getParameter(String)--得到指定请求参数的值
(RequestDispatcher  getRequestDispatcher(String)---设置跳转)
void  setAttribute(String, Object)--向请求对象中添加保存数据
void  removeAttribute(String)---从请求对象中移除指定的数据。
Object  getAttribute(String)--从请求对象中获取指定的数据。
PrintWriter  getWriter()---得到一个字符打印流
package com.click369.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 绘制登陆界面Servlet
 * @author Administrator
 *
 */
public class LoginUIServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		PrintWriter out=resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head><meta charset='utf-8'><title>用户登陆</title></head>");
		out.println("<body>");
		out.println("<center>");
		Object errorObject=req.getAttribute("error");
		if(errorObject!=null){
			String error=(String)errorObject;
			out.println("<font color='red'>"+error+"</font>");	
		}
		out.println("<form  action='cheack' method='post'>");
		out.println("<table>");
		out.println("<tr algin='center'><td colspan='2'>用户登陆</td></tr>");
		out.println("<tr algin='center'><td>用户名:</td><td><input type='text' name='username' /></td></tr>");
		out.println("<tr algin='center'><td>密码:</td><td><input type='password' name='password' /></td></tr>");
		out.println("<tr algin='center'><td colspan='2'><input type='submit' value='登陆' /></td></tr>");
		out.println("</table>");
		out.println("</form>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}

package com.click369.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 检查用户名和密码Servlet
 * @author Administrator
 *
 */
public class CkeackServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		String username=req.getParameter("username");
		String password=req.getParameter("password");
		if("zhangsan".equals(username) && "123456".equals(password)){
			req.setAttribute("name", username);
			req.getRequestDispatcher("/success").forward(req, resp);
		}else{
			req.setAttribute("error", "用户名密码错误!");
			req.getRequestDispatcher("/login").forward(req, resp);
		}
	}
}

package com.click369.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


/**
 * 登陆成功Servlet
 * @author Administrator
 *
 */
public class SuccessServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		PrintWriter out=resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head><meta charset='utf-8'><title>用户首页</title></head>");
		out.println("<body>");
		out.println("<center>");
		Object errorObject=req.getAttribute("name");
		if(errorObject==null){
			req.getRequestDispatcher("/login").forward(req, resp);
		}else{
			String name=(String)errorObject;
			out.println("<font size='10px' color='red'>"+name+",登陆成功!</font>");	
		}
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}

Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>LoginProject</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>
  <!-- LoginUIServlet -->
  <servlet>
  	<servlet-name>loginui</servlet-name>
  	<servlet-class>com.click369.servlet.LoginUIServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>loginui</servlet-name>
  	<url-pattern>/login</url-pattern>
  </servlet-mapping>
  <!-- CkeackServlet -->
    <servlet>
  	<servlet-name>cheack</servlet-name>
  	<servlet-class>com.click369.servlet.CkeackServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>cheack</servlet-name>
  	<url-pattern>/cheack</url-pattern>
  </servlet-mapping>
   <!-- SuccessServlet -->
    <servlet>
  	<servlet-name>success</servlet-name>
  	<servlet-class>com.click369.servlet.SuccessServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>success</servlet-name>
  	<url-pattern>/success</url-pattern>
  </servlet-mapping>
</web-app>

4.HttpServletResponse接口 javax.servlet.http.HttpServletResponse(表示一个http响应对象)
HttpServletResponse接口继承了 javax.servlet.ServletResponse
sendRedirect(String)----设置跳转
setCharacterEncoding(String)—设置响应对象的字符编码

11. forward与Redirect[resp.sendRedirect(String)]跳转的区别?
答:
forward是指通过RequestDispatcher对象调用forward方法完成跳转
通过HttpServletRequest对象调getRequestDispatcher方法就可以得到RequestDispatcher对象。所谓的forward跳转实际上是请求的一次转发,所以forward有时被认为是请求转发,最显著的特征是浏览器地址栏中的地址不会发生变化,因为跳转的时候使用的是同一个请求对象。
跳转的时候可以去掉跳转路径前面的“/”
req.getRequestDispatcher("/tow").forward(req,resp);
req.getRequestDispatcher(“tow”).forward(req, resp);
在这里插入图片描述
Redirect指的是通过HttpServletResponse对象调用sendRedirect(String)方法完成跳转
HttpServletResponse对象.sendRedirect(String)
所谓的Redirect跳转实际上是请求的一次重定向,所以Redirect有时被认为是请求重定向,最显著的特征是浏览器地址栏中的地址会发生变化,因为跳转的时候使用的是不在是同一个请求对象。
跳转的时候必须去掉跳转路径前面的“/”
//resp.sendRedirect("/tow"); //错误的
resp.sendRedirect(“tow”);
在这里插入图片描述
在这里插入图片描述

12. 为什么需要会话跟踪?什么是会话跟踪?四种会话跟踪技术?
答: 浏览器与服务器之间的通信是通过HTTP协议进行通信的,而HTTP协议是”无状态”的协议,它不能保存客户的信息,即一次响应完成之后连接就断开了,下一次的请求需要重新连接,这样就需要判断是否是同一个用户,所以才应会话跟踪技术来实现这种要求。
客户端打开与服务器的连接发出请求到服务器响应客户端请求的全过程称之为会话。
对同一个用户对服务器的连续的请求和接受响应的监视称之为会话跟踪。

四种会话跟踪技术:
URL重写:URL地址重写的原理是将该用户Session的id信息重写到URL地址中,以便在服务器端进行识别不同的用户。URL重写能够在客户端停用cookies或者不支持cookies的时候仍然能够发挥作用。

隐藏表单域:将用户Session的id信息添加到HTML表单元素中提交到服务器,此表单元素并不在客户端显示,浏览时看不到,源代码中有。

Cookie:Cookie是Web服务器发送给客户端的一小段信息,客户端请求时可以读取该信息发送到服务器端,进而进行用户的识别。对于客户端的每次请求,服务器都会将Cookie发送到客户端,在客户端可以进行保存,以便下次使用。服务器创建保存于浏览器端,不可跨域名性,大小及数量有限。客户端可以采用两种方式来保存这个Cookie对象,一种方式是 保存在 客户端内存中,称为临时Cookie,浏览器关闭后 这个Cookie对象将消失。另外一种方式是保存在客户机的磁盘上,称为永久Cookie。以后客户端只要访问该网站,就会将这个Cookie再次发送到服务器上,前提是 这个Cookie在有效期内。 这样就实现了对客户的跟踪。Cookie是可以被禁止的。

Session:每一个用户都有一个不同的session,各个用户之间是不能共享的,是每个用户所独享的,在session中可以存放信息。保存在服务器端。需要解决多台服务器间共享问题。如果Session内容过于复杂,当大量客户访问服务器时可能会导致内存溢出。因此,Session里的信息应该尽量精简。在服务器端会创建一个session对象,产生一个sessionID来标识这个session对象,然后将这个sessionID放入到Cookie中发送到客户端,下一次访问时,sessionID会发送到服务器,在服务器端进行识别不同的用户。
Session是依赖Cookie的,如果Cookie被禁用,那么session也将失效。
在这里插入图片描述

13. Session和Cookie区别?
答:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

14. HttpSession的常用方法?
答:
Object getAttribute(String name) 获取session对象中名为参数name所指明的属性的值
void setAttribute(String name,Object value) 向session中存储数据
void removeAttribute(String name ) 从session中删除名为参数name所指明的属性
void invalidate() 使session失效

package com.click369.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 用户登陆的Servlet
 * @author Administrator
 *
 */
public class LoginServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		//得到HttpSession对象
		HttpSession session=req.getSession();
		PrintWriter out=resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head><meta charset='utf-8'><title>用户登陆</title></head>");
		out.println("<body>");
		out.println("<center>");
		Object  errorObject=session.getAttribute("error");
		if(errorObject!=null){
			out.println("<font  size='10px' color='red'>"+(String)errorObject+"</font>");
		}
		out.println("<form  action='cheack' method='post'>");
		out.println("<table border='1px'>");
		out.println("<tr align='center'><td colspan='2'>用户登陆</td></tr>");
		out.println("<tr align='center'><td>用户名:</td><td><input type='text' name='username' /></td></tr>");
		out.println("<tr align='center'><td>密码:</td><td><input type='password' name='password' /></td></tr>");
		out.println("<tr align='center'><td colspan='2'><input type='submit' value='登陆' /></td></tr>");
		//显示session的基本信息
		MyUtil.getSessionInfo(out,session);
		out.println("</table>");
		out.println("</form>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}

package com.click369.servlet;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.http.HttpSession;

/**
 * 帮助类
 * @author Administrator
 *
 */
public class MyUtil {
    /**
     * 显示session的基本信息
     * @param out
     * @param session
     */
	public static void getSessionInfo(PrintWriter out, HttpSession session) {
		//得到sessionID
		String sessionID=session.getId();
		//得到session对象的创建时间[毫秒]
		long time=session.getCreationTime();
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String strtime=sdf.format(new Date(time));
		//得到session的最后访问时间[毫秒]	
		long lasttime=session.getLastAccessedTime();
		String strlasttime=sdf.format(new Date(lasttime));
		//得到session的最大不活动时间[秒]
		int maxInactivetime=session.getMaxInactiveInterval();
		//设置session的最大不活动时间[秒]
		//session.setMaxInactiveInterval(arg0);
		//是否是一个新的session对象
		boolean isNew=session.isNew();
		out.println("<tr align='center'><td>sessionID:</td><td>"+sessionID+"</td></tr>");
		out.println("<tr align='center'><td>session的创建时间:</td><td>"+strtime+"</td></tr>");
		out.println("<tr align='center'><td>session的最后访问时间:</td><td>"+strlasttime+"</td></tr>");
		out.println("<tr align='center'><td>session的最大不活动时间:</td><td>"+maxInactivetime+"秒</td></tr>");
		out.println("<tr align='center'><td>是否是一个新的session对象:</td><td>"+isNew+"</td></tr>");
	}
}

package com.click369.servlet;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
 * 验证用户名/密码的Servlet
 * @author Administrator
 *
 */
public class CheackServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		//得到登陆的用户名和密码
		String name=req.getParameter("username");
		String pass=req.getParameter("password");
		//判断
		if("zhangsan".equals(name) && "123456".equals(pass)){
			req.getSession().setAttribute("name", name);
			resp.sendRedirect("success");
		}else{
			req.getSession().setAttribute("error", "用户名密码错误");
			resp.sendRedirect("login");
		}
	}
}

package com.click369.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 登陆成功Servlet
 * @author Administrator
 *
 */
public class SuccessServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		//得到HttpSession对象
		HttpSession session=req.getSession();
		Object  nameObject=session.getAttribute("name");
		if(nameObject==null){
			resp.sendRedirect("login");
		}
		PrintWriter out=resp.getWriter();
		out.println("<!DOCTYPE html>");
		out.println("<html>");
		out.println("<head><meta charset='utf-8'><title>用户首页</title></head>");
		out.println("<body>");
		out.println("<center>");
		out.println("<table border='1px'>");
		out.println("<tr align='center'><td colspan='2'>"+(String)nameObject+",登陆成功!!</td></tr>");
		out.println("<tr align='center'><td><a href='login'>返回登陆</a></td><td><a href='loginout'>注销退出</a></td></tr>");
		//显示session的基本信息
		MyUtil.getSessionInfo(out,session);
		out.println("</table>");
		out.println("</center>");
		out.println("</body>");
		out.println("</html>");
		out.close();
	}
}

package com.click369.servlet;

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

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 注销退出的Servlet
 * @author Administrator
 *
 */
public class LoginOutServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		doPost(req, resp);
	}
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setCharacterEncoding("utf-8");
		resp.setCharacterEncoding("utf-8");
		//销毁session
		req.getSession().invalidate();
	    resp.sendRedirect("login");
	}
}

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>SessionDemo</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>
  <!-- LoginServlet -->
  <servlet>
  	<servlet-name>login</servlet-name>
  	<servlet-class>com.click369.servlet.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>login</servlet-name>
  	<url-pattern>/login</url-pattern>
  </servlet-mapping>
  
    <!-- CheackServlet -->
  <servlet>
  	<servlet-name>cheack</servlet-name>
  	<servlet-class>com.click369.servlet.CheackServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>cheack</servlet-name>
  	<url-pattern>/cheack</url-pattern>
  </servlet-mapping>
  
   <!-- SuccessServlet -->
  <servlet>
  	<servlet-name>success</servlet-name>
  	<servlet-class>com.click369.servlet.SuccessServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>success</servlet-name>
  	<url-pattern>/success</url-pattern>
  </servlet-mapping>
  
  <!-- SuccessServlet -->
  <servlet>
  	<servlet-name>loginout</servlet-name>
  	<servlet-class>com.click369.servlet.LoginOutServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>loginout</servlet-name>
  	<url-pattern>/loginout</url-pattern>
  </servlet-mapping>
</web-app>

15. Get与Post的区别?
答:
1.get是从服务器上获取数据,post是向服务器传送数据。
2.get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3.对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4.get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5.get安全性非常低,post安全性较高。

©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页