J2EE3 servlet servlet 生命周期 JSP jsp九大内置对象 servlet跳转页面两种方式

15 篇文章 0 订阅
6 篇文章 0 订阅

servlet 生命周期(从生命开始到结束,人也有生命周期-生老病死)

init()-->service()[doGet / doPost] -->destroy()
触发时间:
init方法:第一次servlet被调用或servlet设置了<load-on-startup>1</load-on-startup>的时候则在启动的时候被启动(只执行一次)
service方法:每次接受到请求的时候被调用
destroy方法:servlet被销毁的时候被调用Tomcat被关闭的时候(只执行一次)

JSP概述

  • JSP是一个模版引擎框架
  • JSP全称Java Server Pages,是SUN公司定义的一种用于开发动态WEB资源的技术。它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头 %>结束。
  • jsp适合编写输出动态内容,但不适合编写java逻辑。
  • jsp的本质:JSP本质是Servlet,jsp页面先经过翻译阶段,把jsp文件翻译成Java文件(这个Java文件其实就是Servlet),再由系统编译成Java类文件(.class文件)。

jsp语法

  • 声明语法
    <%! 声明属性片段 %>
  • 代码语法
    <% 代码片段 %>
  • <%=“12465” >
  • 指令语法
    <%@ include … %> 包含其他文件
    <%@ page … %> 定义网页依赖属性,比如脚本语言、error页面、缓存需求等等
    <%@ taglib … %> 引入标签库的定义

jsp九大内置对象(不需要自己创建、不需要自己定义的)

  • Request(Javax.servlet.ServletRequest)它包含了有关浏览器请求的信息.通过该对象可以获得请求中的头信息、Cookie和请求参数。
  • Response(Javax.servlet.ServletResponse)作为JSP页面处理结果返回给用户的响应存储在该对象中。并提供了设置响应内容、响应头以及重定向的方法(如cookies,头信息等)
  • Out(Javax.servlet.jsp.JspWriter)用于将内容写入JSP页面实例的输出流中,提供了几个方法使你能用于向浏览器回送输出结果。
  • pageContext(Javax.servlet.jsp.PageContext)描述了当前JSP页面的运行环境。可以返回JSP页面的其他隐式对象及其属性的访问,另外,它还实现将控制权从当前页面传输至其他页面的方法。
  • Session(javax.servlet.http.HttpSession)会话对象存储有关此会话的信息,也可以将属性赋给一个会话,每个属性都有名称和值。会话对象主要用于存储和检索属性值。
  • Application(javax.servle.ServletContext)存储了运行JSP页面的servlet以及在同一应用程序中的任何Web组件的上下文信息。
  • Page(Java.lang.Object)表示当前JSP页面的servlet实例
  • Config(javax.servlet.ServletConfig)该对象用于存取servlet实例的初始化参数。
  • Exception(Javax.lang.Throwable)在某个页面抛出异常时,将转发至JSP错误页面,提供此对象是为了在JSP中处理错误。只有在错误页面中才可使用<%@page isErrorPage=“true”%>

servlet跳转页面两种方式

  • 转发 req.getRequestDispatcher(“xxx”).forwarzd(req, resp);
  • 重定向 resp.sendRedirect(“xxx”);
    区别
    在这里插入图片描述
  • 转发
    请求只有一次
    url地址不变
  • 重定向
    请求有两次
    url地址发生变更

test1:

package com.test.class3;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

public class Test1Servlet extends GenericServlet {

	@Override
	public void init() throws ServletException {

		// 第一次被调用的时候会执行一次init方法
		// 或者在load-on-startup。在启动tomcat 的时候就会执行,就不需要等到调用的时候才执行
		System.out.println("我是Test1Servlet的init方法,我被创建出来了");
	}

	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		System.out.println("我是Test1Servlet的service方法,为你提供服务");

	}

	@Override
	public void destroy() {
		System.out.println("我是Test1Servlet的destroy方法,我被销毁了");

	}
}

jsp1:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<!-- 这个文件就是html 页面的内容,可以在jsp中写(html/css/js/jq -->

	<!-- jsp的本质:就是servlet,jsp页面经过翻译阶段,吧jsp文件翻译成java文件
		这个java文件其实就是servlet -->


	声明语法
	<%!//全局变量:在java类型中声明属性
	int i;
	String str;%>

	<%
		System.out.println("执行Test2.jsp");
	%>

	输出到页面out.print()
	<%="123456787我是输出的内容; "%>

	<!-- include动态引用、静态引用 2个都叫做include,可是标签不一样 -->
	<%@ include file="Test3.jsp"%><!-- 静态引用 -->
	<jsp:include page="Test3.jsp"></jsp:include><!-- 动态引用 -->

</body>


</html>

jsp2:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
我是被引用的内容22333
</body>
</html>

jsp3:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	jsp九大内置对象 代码标签中,作用是什么,就是简化在jsp中编写java代码而已(现在一般不会在页面中写java代码)
	<%
	//request请求
	request.getLocalAddr();

	//response响应
	response.setCharacterEncoding("UTF-8");

	//session会话
	session.getAttribute("");

	//application全局
	application.getAttribute("");

	//out页面输出
	out.print("");

	//pageContext当前页面
	pageContext.getAttribute("");

	//page当前页面
	page.toString();
	//config配置
	config.getInitParameter("");
	//exception异常
%>
</body>


</html>

jsp4:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- servlet跳转页面的两种方式
	转发
	q.getRequestDispatcher("xxx").forwarzd(req,resp);
	重定向
	resp.senRedirect("xxx");
 -->
 
 	<!-- 登陆功能,使用账号密码登陆 -->
 	<form action="http://localhost:8080/day44-2/Test4Servlet" mothed="get">
 		账号:<input type="text" name="username"><br>
 		密码:<input type="text" name="pwd"><br>
 		
 		<input type="submit" value="提交">
 	</form>
 
</body>


</html>

test4Servlet:

package com.test.class4;

import java.io.IOException;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/Test4Servlet")
public class Test4Servlet extends GenericServlet {

	@Override
	public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
		// 登陆成功就跳转到登陆成功页面
		// 失败就跳转到失败页面
		// 我们现在没有链接数据库,就先写死一个账号密码

		String username = req.getParameter("username");
		String pwd = req.getParameter("pwd");

		if ("admin".equals(username) && "123456".equals(pwd)) {
			// 登陆成功,跳转到成功页面
			// 跳转的页面路径从WebContent文件夹开始算class4/Test5.jsp
			req.getRequestDispatcher("class4/Success.jsp").forward(req, res);
		} else {
			// 登陆失败,跳转到失败页面
			((HttpServletResponse) res).sendRedirect("class4/fail.jsp");// 重定向可以重新跳转请求和路径。
		}

	}

}

success.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
成功
</body>
</html>

fail.jsp:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
失败
</body>
</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值