您的位置:首页 > 编程语言 > Java开发

JavaWeb之Servlet编程

2017-03-26 21:46 176 查看
记一下Servlet的重要知识点.

 1)Servlet生命周期:构造方法-->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方法被调用");
}
}


2)ServletConfig对象

获取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);
}

}


3)ServletContext对象(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.ge
4000
tRequestDispacher("路径").forward(request,response);  等价于上面的代码

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


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

context.getRealPath("路径")

context.getResourceAsStream("路径");

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java web Java jsp