JavaWeb之Servlet编程

记一下Servlet的重要知识点.

 1Servlet生命周期:构造方法-->init(有参)-->service()-->destroy()

构造方法: 创建servlet对象。默认情况下,第一次访问servlet对象时。只调用1次。

init方法(有参): 创建完servlet对象后调用。只调用1次。

注意: 会调用无参的init方法。

service方法: servlet提供服务的方法。每次发出请求调用。

注意: request对象 ,response对象

destroy方法: tomcat服务器停止或web应用重新部署,servlet对象销毁,destroy方法被调用。

demo如下:

package com.bighuan.day10_servlet;

import java.io.IOException;

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

public class ServletLifeCycle extends HttpServlet {

	public ServletLifeCycle() {
		System.out.println("1,创建了一个servlet对象");
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("2,init方法被调用");
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		System.out.println("3,service方法被调用");
	}

	@Override
	public void destroy() {
		System.out.println("destroy方法被调用");
	}
}


2ServletConfig对象

获取servlet的初始化参数:

getInitParameter("name ");

getInitParameterNames();

贴代码了:

package com.bighuan.day10_servlet;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintWriter;

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

public class ConfigDemo extends HttpServlet {

	//private ServletConfig config;
	
	/**ServletConfig的API:
	 *  java.lang.String getInitParameter(java.lang.String name)  
	 *  java.util.Enumeration getInitParameterNames()  
	 *  ServletContext getServletContext()  
	 *  java.lang.String getServletName()  
	 */
	
	/**
	 * tomcat服务器做的事情:这些参数会在加载web应用的时候,加载到ServletConfig对象中 
	 */
	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		//this.config=config;
	}
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//方式一:直接找到那个文件,不好维护
		//File file=new File("f:/test.txt");
		
		//方式二:通过ServletConfig加载初始化参数,在web.xml文件中配置即可
		
//		String path = config.getInitParameter("path");
		
		String path = getServletConfig().getInitParameter("path");
		System.out.println(path);
		
		BufferedReader br=new BufferedReader(new FileReader(path));
		String str=null;
		while( (str=br.readLine()) != null){
			System.out.println(str);
		}
		br.close();
	}

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

}


3ServletContext对象(ServletContext的作用范围在整个web应用程序内)

得到web应用路径:

context.getContextPath();

request.getContextPath();  等价于上面的代码

package com.bighuan.day10_context;

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

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * 得到web应用的路径
 * @author Administrator
 *
 */
public class ContextDemo1 extends HttpServlet {


	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		//ServletContext context = this.getServletConfig().getServletContext();
		//这个方法内部就是调用了上面那行代码,推荐使用第二种
		ServletContext context = this.getServletContext();
		
		/**
		 * 得到web应用路径:/bighuan_jsp
		 * web应用路径:部署到tomcat服务器上的web应用名称
		 */
		/*String contextPath = context.getContextPath();
		
		System.out.println(contextPath);
		
		//应用到请求重定向
		response.sendRedirect(contextPath+"/index.jsp");*/
		
		/*
		 * 获得web应用参数
		 * 注意:web应用参数在所有servlet中都能获取
		 * 	   servlet中的参数只能在当前servler内获取
		 */
		String aaaValue = context.getInitParameter("AAA");
		System.out.println(aaaValue);
		
		Enumeration<String> names = context.getInitParameterNames();
		while(names.hasMoreElements()){
			String name = names.nextElement();
			System.out.println(name+"="+ context.getInitParameter(name));
		}
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request,response);
	}

}

4)得到web应用参数:

context.getInitParameter("name");

context.getInitParameterNames();

5)域对象:

context.setAttribute("name",Object): 保存数据

context.getAttribute("name")   得到数据

context.removeAttribue("name")  清除数据

6)转发

context.getRequestDispatcher("路径").forward(request,response);

request.getRequestDispacher("路径").forward(request,response);  等价于上面的代码

/**
 * 转发和重定向的区别:
 * 转发:地址栏不会发生改变
 * 	       不能转发到当前应用以外的资源
 * 	      可以在转发过程中,把数据保存到request域对象中
 * 重定向:地址栏会变为重定向的地址,
 * 		可转到当前应用以外的资源,如百度等等,比转发强大
 * 		不能在重定向的过程中,把数据保存到request对象中
 */

7)得到web应用中的资源文件

context.getRealPath("路径")

context.getResourceAsStream("路径");

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值