ServletConfig,ServletContext,Servlet作用域,多方法请求,请求转发与重定向,Servlet3.0特性

40 篇文章 0 订阅
23 篇文章 0 订阅

index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<a href="demo01">ServletConfig配置</a><br/>
	<a href="demo02">ServletConext上下文</a><br/>
	<a href="demo03">作用域</a><br/>
	<a href="demo04">重定向</a><br/>
	<a href="demo05">请求转发</a><br/>
</body>
</html>

web.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>day13</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>
   <!--全局的参数   spring的全局配置-->
  <context-param>
    <param-name>contextLocation</param-name>
    <param-value>class:applicationContext.xml</param-value>
  </context-param>
  <servlet>
    <description></description>
    <display-name>Demo01Servlet</display-name>
    <servlet-name>Demo01Servlet</servlet-name>
    <servlet-class>com.ujiuye.web.servlet.Demo01Servlet</servlet-class>
    <!--参数信息-->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>GBK</param-value>
    </init-param>
    <init-param>
      <param-name>aaa</param-name>
      <param-value>bbb</param-value>
    </init-param>
    <init-param>
      <param-name>ccc</param-name>
      <param-value>ddd</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>Demo01Servlet</servlet-name>
    <url-pattern>/demo01</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>Demo02Servlet</servlet-name>
    <servlet-class>text.web.servlet.Demo02Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Demo02Servlet</servlet-name>
    <url-pattern>/demo02</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>Demo03Servlet</servlet-name>
    <servlet-class>text.web.servlet.Demo03Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Demo03Servlet</servlet-name>
    <url-pattern>/demo03</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>BookServlet</servlet-name>
    <servlet-class>text.web.servlet.BookServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>BookServlet</servlet-name>
    <url-pattern>/book</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>Demo04Servlet</servlet-name>
    <servlet-class>text.web.servlet.Demo04Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Demo04Servlet</servlet-name>
    <url-pattern>/demo04</url-pattern>
  </servlet-mapping>
  <servlet>
    <servlet-name>Demo05Servlet</servlet-name>
    <servlet-class>text.web.servlet.Demo05Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Demo05Servlet</servlet-name>
    <url-pattern>/demo05</url-pattern>
  </servlet-mapping>
</web-app>
ServletConfig
       是一个servlet的配置类 ,专门配置本类(自己的servlet)的参数配置的相关的工作。
      作用:获取一些servlet一些配置信息。
      范围:只适用于自己的 servlet 
      

Demo01Servlet.java

package text.web.servlet;

import java.io.IOException;
import java.util.Enumeration;

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

public class Demo01Servlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//配置对象
		ServletConfig config = getServletConfig();
		//获取信息
		String encoding = config.getInitParameter("encoding");
		System.out.println(encoding);
		//GBK
		//获取servlet的名称
		String name = config.getServletName();
		System.out.println(name);
		//Demo01Servlet
		Enumeration<String> names = config.getInitParameterNames();
		while(names.hasMoreElements()) {
			String key = names.nextElement();
			String value = config.getInitParameter(key);
			System.out.println(key+"...."+value);	
		}
		//aaa...bbb
		//ccc...ddd
		//encoding...GBK
		
		//上下文
		//config.getServletContext();
		//day02Servlet有设置
	    String val = (String)getServletContext().getAttribute("username");
	    System.out.println(val);
	    //zhangsan
	    //day03Servlet有设置
	    String str = (String)request.getAttribute("aa");
	    System.out.println(str);
	    //null
	    //day05Servlet有设置
	    String user = (String)request.getAttribute("user");
	    System.out.println(user);
		//jack
	}

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

}
ServletContext  
   context: 环境   上下文   整个项目都生效   项目的引用
        这个类是整个项目全局的servlet类,可以获取每一个servlet的信息,比ServletConfig大
        ServletContext:管理项目  全局信息   全局属性
        this.getServletContext()
        config.getServletContext()
        context.getXXX
        setAttribute(,)
        getAttribute()

Demo02Servlet.java

package text.web.servlet;

import java.io.IOException;
import java.util.Enumeration;

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


public class Demo02Servlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//全局上下文对象
		ServletContext context = getServletContext();
		String initParameter = context.getInitParameter("contextLocation");
		System.out.println(initParameter);
		//class:applicationContext.xml
		
		Enumeration<String> keys = context.getInitParameterNames();
		while(keys.hasMoreElements()) {
			String key = keys.nextElement();
			System.out.println(key);
		}
		//contextLocation
		String contextPath = context.getContextPath();
		System.out.println(contextPath);
		//  /day13
		//服务器信息
		String serverInfo = context.getServerInfo();
		System.out.println(serverInfo);
		//Apache Tomcat/9.0.17  (服务器)
		context.setAttribute("username", "zhangsan");
		//设置属性
		//获取属性  全局  作用整个项目
		String val = (String)context.getAttribute("username");
		System.out.println(val);
		//zhangsan
		//day03Servlet有设置
		Object attribute = request.getSession().getAttribute("cc");
		System.out.println(attribute);
		//dd
	}

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

}

作用域
    指作用的范围,  在servlet作用域是可以存储值和数据。
    解决值传递的问题  cookie session
    request:单次请求   请求转发
    session:整个会话   活化   钝化
    context:整个项目

Demo03Servlet.java

package text.web.servlet;

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;


public class Demo03Servlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//作用域   请求转发
		request.setAttribute("aa", "bb");
		
		String val = (String)request.getAttribute("aa");
		System.out.println(val);
		//bb
		//session会话
		request.getSession().setAttribute("cc", "dd");
		
		Object attribute = request.getSession().getAttribute("cc");
		System.out.println(attribute);
		//dd
		
	}

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

}

多方法请求:CRUD放在同一个Servlet
<form action=" ">
        <input   type="hidden"   name="mark"    value="save"/>
</form>
getParamater("mark")
判断

BookServlet.java

package text.web.servlet;

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;


public class BookServlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String mark = request.getParameter("mark");
		if("save".equals(mark)) {
			save(request,response);
		}else if("delete".equals(mark)) {
			delete(request,response);
		}else if("update".equals(mark)) {
			update(request,response);
		}else if("query".equals(mark)) {
			query(request,response);
		}
		
	}
	/*
	 * 查询功能
	 * */
	private void query(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("查询");
		
	}
	/*
	 * 更新功能
	 * */
	private void update(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("更新");
		
	}
	/*
	 * 删除功能
	 * */
	private void delete(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("删除");
		
	}
	/*
	 * 添加功能
	 * */
	private void save(HttpServletRequest request, HttpServletResponse response) {
		System.out.println("添加");
		
	}

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

}
请求转发与重定向*****
    forward: 转发   request
    redirect:重定向
     请求一次资源的两种处理结果。1.再次去访问另一个资源  2.内部协调,给浏览器一个响应
   转发:使用请求对象,当请求到达服务器不终止而是去请求别的资源。
  重定向:使用请求对象,当访问一个资源的时候返回再次请求的路径。

request.getRequestDispatcher(路径).forward(request,response);
url不发生变化,但是内部资源调转。
response.sendRirdect(路径)   
url会发生变化,可以请求站外资源。

重定向
Demo04Servlet.java

package text.web.servlet;

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;


public class Demo04Servlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//request.getHeader("Reference");  防盗链		
		System.out.println("接收到请求了...");
		//重定向  定位到站内资源  项目内资源  同时还可以定位到别的项目的资源
		response.sendRedirect("https://baijiahao.baidu.com/s?id=1641796916171128791&wfr=spider&for=pc");
	}

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

}

请求转发
Demo05Servlet.java

package text.web.servlet;

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;


public class Demo05Servlet extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//重定向  response
		//请求转发  只能请求本站的资源没有问题  html
		request.setAttribute("user", "jack");
		request.getRequestDispatcher("/demo01").forward(request, response);
		
	}

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

}

Servlet3.0特性   注解模式   配置    注解
   	注解方式访问
   	jdk1.5  支持注解
   	servlet3.* 支持注解  	
   	@WebServlet("/demo06")  写在类上面
   	替代
   	<servlet>
    <servlet-name>Demo05Servlet</servlet-name>
    <servlet-class>com.ujiuye.web.servlet.Demo05Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Demo05Servlet</servlet-name>
    <url-pattern>/demo05</url-pattern>
  </servlet-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值