Servlet第一篇

Servlet

java编写的,服务器端执行,用来扩展服务器功能,web组件

  1. Servlet继承关系
    Servlet接口:定义了servlet规范,定义了servlet的生命周期方法,实现Servlet接口的类都叫Servlet
    GenericServlet类:是Servlet接口的实现类,实现了Servlet接口中的大部分方法,只有service方法没有实现
    HttpServlet类:GenericServlet的子类,针对http协议的Servlet,重写了父类的service方法,针对http协议定义了特定的处理方法,根据客户端的请求,调用不同的处理方法doGet(),doPost()
  2. 状态码
    200--------ok
    400~499----------页面错误状态码
    500~599----------服务器内部错误
    404---------资源未找到
    405---------发送请求方式与处理方式不一致
    500---------代码错误
  3. 乱码
    get请求乱码
    String str = request.getParameter(“name”);
    new String(str.getBytes(“ISO-8859-1”),“UTF-8”);
    post请求乱码
    request.setCharacterEncoding(“utf-8”);
  4. 请求转发和重定向
    请求转发属于服务器端的行为,重定向属于客户端的行为
    请求转发url地址不变,重定向url地址改变
    请求转发可以通过request传递数据,重定向不能用request传递数据
    请求转发不能跨应用,重定向能跨应用
  5. servlet生命周期
    服务器管理servlet的生命周期
    如果没有配置loadOnStartup,则在服务器接收到客户端对该servlet的第一次请求时,创建servlet对象
    创建完servlet对象(构造方法)后,紧接着执行init()方法
    执行完init()方法后,执行service()方法,处理请求
    默认情况下,servlet在服务器关闭时销毁,当该servlet对象长时间没有被调用,也会被回收
    如果需要在servlet对象销毁前执行一些代码,则把这些代码写在destroy()方法中
    如果配置了loadOnStartup,则在服务器开启时创建该servlet对象,紧接着执行init()方法
    当接收到对该servlet的请求时,调用service()方法进行处理
@WebServlet(urlPatterns= {"/demo3"},loadOnStartup=0)
public class DemoServlet3 extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    
    public DemoServlet3() {
        System.out.println("创建对象DemoServlet3");
    }

	
	@Override
	public void init() throws ServletException {
		System.out.println("DemoServlet3-init");
	}

}
  1. ServletConfig对象
    作用:用来获取在web.xml中给每一个servlet局部配置的数据
    6.1 在web.xml中配置
//web.xml中
<servlet>
    <servlet-name>demo2</servlet-name>
    <servlet-class>com.java.servlet.DemoServlet2</servlet-class>
    <init-param>
      <param-name>fileName</param-name>
      <param-value>dbcp.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>demo2</servlet-name>
    <url-pattern>/demo2</url-pattern>
</servlet-mapping>

 public class DemoServlet2 extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private String fileName;
    
    @Override
    public void init() throws ServletException {
    	//1.获取ServletConfig对象
    	ServletConfig sc = this.getServletConfig();
    	//2.获取属性值方法
    	fileName = sc.getInitParameter("fileName");
    	
    }
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		response.getWriter().write(fileName);
	}
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}

6.2 在servlet注解中配置

@WebServlet(urlPatterns= {"/demo4"}, 
			initParams= {
						@WebInitParam(name="name1", value="zhou1"),
						@WebInitParam(name="name2", value="zhou2"),
			})
public class DemoServlet4 extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private String name1;
    private String name2;
    
	@Override
	public void init() throws ServletException {
		ServletConfig sc = this.getServletConfig();
		name1 = sc.getInitParameter("name1");
		name2 = sc.getInitParameter("name2");
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		response.getWriter().write(name1+","+name2);;
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
  1. ServletContext对象
    ServletContext表示web应用对象
    有且只有一个
    生命周期:web应用发布到服务器上,由服务器创建该对象;服务器关闭或者从服务器上移除web应用,对象销毁
    7.1 配置web应用的初始化参数,在整个web应用的组件都可以访问
//web.xml
<context-param>
    <param-name>name</param-name>
    <param-value>demo.txt</param-value>
</context-param>

@WebServlet("/demo5")
public class DemoServlet5 extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private String name;
    
    @Override
    public void init() throws ServletException {
    	//1.获取ServletContext对象
    	ServletContext sc = this.getServletContext();
    	//2.获取初始化参数
    	name = sc.getInitParameter("name");
    }
    
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {	
		response.getWriter().write(name);
	}

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

7.2 使用ServletContext对象完成数据共享
数据存储
sc.setAttribute(“str”, “ServletContext对象学习”);
获取数据
sc.getAttribute(“str”);
8. servlet工作模式
单例、多线程
当有多个用户同时请求同一个servlet时,只创建一个servlet对象,通过给每个用户创建一个线程,来调用各自的service方法运行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值