Servlet学习--练习示例总结

醉了醉了。。本来想测试下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;

public class LifeServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;
	StringBuffer str;
	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		str.append("处理Servlet请求-1");
		doPost(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		str.append("处理Servlet请求-2");

		response.setCharacterEncoding("utf-8");
		PrintWriter out;
		out = response.getWriter();
		out.println("<html>");
		out.println("<head><title>fuck you</title></head>");
		out.println(str);
		out.println("</html>");
		out.close();
	}

	@Override
	public void destroy() {
		str.append("销毁Servlet");
	}

	@Override
	public void init() {
		str.append("初始化Servlet");
	}

}

我只是想不在控制台打印出来而已,要不要这样啊

另外测试了下客户端跳转request请求是不行的,服务端跳转都可以

贴上客户端跳转 request,session,application三种请求代码示例

import java.io.IOException;

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

public class RedirectServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

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

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setAttribute("requestKey", "request?");
		HttpSession session=request.getSession();
		session.setAttribute("sessionKey", "session?");
		ServletContext application=this.getServletContext();
		application.setAttribute("applicationKey", "application?");
		response.sendRedirect("target.jsp");
	}
}

另外目标地址(target.jsp)的文件:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>目标地址</h1>
request值:<%=request.getAttribute("requestKey") %><br/>
session值:<%=session.getAttribute("sessionKey") %><br/>
application值:<%=application.getAttribute("applicationKey") %><br/>
</body>
</html>

OK,下面贴上服务器跳转对应三种请求的代码示例:

import java.io.IOException;

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

public class ForwardServlet extends HttpServlet{

	private static final long serialVersionUID = 1L;

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

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setAttribute("requestKey", "request?");
		HttpSession session=request.getSession();
		session.setAttribute("sessionKey", "session?");
		ServletContext application=this.getServletContext();
		application.setAttribute("applicationKey", "application?");
		RequestDispatcher rd=request.getRequestDispatcher("target.jsp");
		rd.forward(request, response);
	}
}

可以看出服务器端跳转只是

	RequestDispatcher rd=request.getRequestDispatcher("target.jsp");
		rd.forward(request, response); 

和客户端的不同,所以个人理解也就是客户端跳转应该是服务器通过response返回给客户端,然后客户端对应跳转url

另外:

贴个比较好的理解

1.forward跳转:

a.服务器端跳转,地址栏不改变;

b.执行到跳转语句后马上无条件跳转,之后的代码不再执行(跳转之前一定要释放全部资源);

c.request设置的属性在跳转后的页面仍可以使用;

d.使用<jsp:param name="参数名" value="参数值" />传递参数。

2.response跳转:

a.客户端跳转,地址栏改变;

b.所有代码执行完毕后跳转;

c.跳转后的页面不能使用上一个页面的request属性;

d.使用地址重写传递参数(response.sendRedirect("URL?参数名=参数值"))。

说实话里面的细节我也不懂,知道有这么回事就行了

版权声明:转载请注明出处

时间: 2024-08-24 17:42:45

Servlet学习--练习示例总结的相关文章

Servlet学习(三)Servlet编程实例-网站登录(修改版-增加数据库-附源码)

我们为刚才的那个示例Servlet学习(二)Servlet编程实例-网站登录添加上数据库,组成一个较为完整的登录功能. 在开始之前我们得首先了解下一些常用的java术语: PO(persistant object) 持久对象 在o/r 映射的时候出现的概念,如果没有o/r映射,就没有这个概念存在了. 通常对应数据模型(数据库),本身还有部分业务逻辑的处理. 可以看成是与数据库中的表相映射的java对象. 最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合. PO中应该不包含

activiti学习2:示例工程activiti-explorer.war的使用

目录 activiti学习2:示例工程activiti-explorer.war的使用 一.搭建开发环境 二.运行示例工程 三.示例工程功能演示 1. 创建流程图 2. 部署流程图 3. 启动流程 4. 完成任务 5. 用户管理 四.数据持久化 五.总结 activiti学习2:示例工程activiti-explorer.war的使用 工作流主要解决的主要问题是:为了实现某个业务目标,利用计算机在多个参与者之间按某种预定规则自动传递文档.信息或者任务. activiti官方提供了一个示例工程ac

测试servlet学习笔记

操作方法: 1.新建工程: File-->new-->Java Project-->TestServlet(工程名称)-->Finish. 2.加载servlet-api.jar类包: TestServlet(右键)-->Build Path-->Configure Build Path-->Library -->Add External JAR Selection-->(浏览在tomcat的lib目录下找到servlet-api.jar选中后点击打开

SERVLET 学习笔记

SERVLET 学习笔记 一.Servlet基本定义 Servlet是服务器端上面运行的一段小的java程序,一个servlet就是一个简答的java类.通常servlet都是通过请求和返回的模式来被访问的,客户端通过resuest请求,servlet则通过response来返回需要的内容. 二.Tomcat容器等级 Tomcat容器等级分为四个等级,由内向外分别是:context容器àSERVLET容器àHOST(主机)容器àENGINE(引擎)容器.其中,CONTEXT容器,一个CONTEX

Servlet学习笔记(八)—— 自定义过滤器的编写改进:自定义实现FilterChain

笔记六中实现了三种过滤器:字符编码过滤.登录权限过滤.敏感词过滤,但是有个缺陷就是,限定了过滤顺序,而不能实现先进行request过滤,最后response过滤,并且中间几项过滤的顺序不能动态改变.所以这里做个改进,实现一个过滤顺序的FilterChain. 多个Filter的执行顺序在这篇博文中得到很仔细的讲解,总结一点,多个过滤器的执行顺序是根据web.xml中不同<filter-mapping>的顺序来先后执行的,比如: <?xml version="1.0"

学习pyqt 示例观赏 1

学习pyqt 示例观赏 1 哪里找到示例 windows下,个人采用安装包直接安装,(顺便推荐个网址,pythoner一定会喜欢 http://www.lfd.uci.edu/~gohlke/pythonlibs(最近上不去,不知道咋回事) ,这里有各种编译好了的python第三方库.比较方便).然后可以在D:\Python27\Lib\site-packages\PyQt4\examples\demos\qtdemo (反正就类似这个目录结构)这个目录下找到 qtdemo.pyw.运行就可以看

JavaWeb 后端 &lt;二&gt; 之 Servlet 学习笔记

JavaWeb 后端 <二> 之 Servlet 学习笔记 一.Servlet概述 1.什么是Servlet Servlet是一个运行在服务器端的Java小程序,通过HTTP协议用于接收来自客户端请求,并发出响应. 2.Servlet中的方法 public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException ServletRequest req:代表着请

servlet学习(1)

1.Servlet是sun公司提供的一门用于开发动态web资源的技术. 2.Servlet在web应用的位置: 3.创建Servlet的三种方式: (1)实现servlet的接口 (2)继承GenericServlet,覆写service方法 (3)继承HttpServle,覆写doGet()或者doPost()等方法 注意: 1>GenericServlet实现了 Servlet 和ServletConfig接口. GenericServlet可以直接被一个servlet扩充,尽管它更为一般的

Servlet学习(2)

1.Servlet的生命的周   (1)当浏览器第一次访问Servlet时,服务器会根据浏览器访问的路径,在web.xml文件中找到该Servlet的全路径,然后利用反射去调用方法. (2)调用init()为Servlet作初始化工作 (3)调用doXxxxx()为浏览器响应 (4)如果浏览器再次访问相同的Servlet,直实现从服务端维护的Servlet实例集合中取得对应的实现,为浏览器响应 (5)同一个Servlet实例,在服务端只有一个 (6)服务器在决定销毁Servlet实例之前,调用d