您当前的位置: 首页 >  servlet

星夜孤帆

暂无认证

  • 1浏览

    0关注

    626博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Servlet学习笔记(三)

星夜孤帆 发布时间:2018-09-12 16:28:29 ,浏览量:1

一.重定向

二.访问路径 1.项目部署的过程

2.如何获取访问路径
  • 项目名:getContextPath()
  • Servlet访问路径:getServletPath()
  • URI:getRequestURI()
  • URL:getRequestURL()
3.URI和URL的区别 1)狭义的理解(Java WEB项目)
  • URI:绝对路径
  • URL:完整路径
2)广义的理解(任意WEB项目)
  • URI:资源的名字
  • URL:资源的真名

URI包含URL

4.如何配置Servlet访问路径? 1)精确匹配
  • /hello
  • 必须通过“/hello”才能访问此Servlet
  • 此Servlet只能处理“/hello"这一个请求
2)通配符
  • /*
  • 通过任何路径都能访问此Servlet
  • 此Servlet能处理一切请求
3)后缀
  • *.abc
  • 以.abc为后缀的请求都能访问此Servlet
  • 此Servlet能够处理多个请求
5.如何使用一个Servlet处理多个请求?

四.Servlet生命周期

五.ServletConfig和ServletContext 1.它们的作用
  • 都能够读取web.xml中为Servlet预置的参数

2.它们的区别
  • config和Servlet是1对1的关系
  • context和Servlet是1对多的关系
  • 若数据只给某个Servlet使用,则用config
  • 若数据给多个Servlet使用,则用context

它们的关系由服务器来保障

3.config使用场景
  • 假设要开发一个网页游戏,若超过人数上限则要排队
  • 开发登陆功能LoginServlet
  • 人数上限应该是一个可配置的参数maxOnline
  • 该参数由LoginServlet使用

由于该参数只是LoginServlet是哟个由config读取即可

4.context使用场景

  • 大部分的查询都具备分页功能
  • 分页需要一个参数,每页显示几条数据size
  • 该参数一般可配置,由于被众多查询功能复用,使用context读取

 5.context可以存取变量

六.Servlet线程安全问题

package web;

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 LoginServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//Tomcat创建Servlet的过程:
		//LoginServlet ls = new LoginServlet();
		//ServletConfig cfg = new ServletConfig();
		//ls.init(cfg);
		//ls.service();
		ServletConfig cfg = getServletConfig();
		String maxOnline = cfg.getInitParameter("maxOnline");
		System.out.println(maxOnline);
	}
	
}


  servlet4
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
  
  	demo
  	web.DemoServlet
  	
  	1
  
  
  	demo
  	/demo
  
  
  
  	login
  	web.LoginServlet
  	
  		maxOnline
  		3000
  	
  
  
  	login
  	/login
  
EmpManager
package dao;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import entity.Emp;

public class EmpDao implements Serializable {
	public List findAll(){
		//模拟查询所有的员工
		List list = new ArrayList();
		Emp e1 = new Emp();
		e1.setEmpno(1);
		e1.setEname("唐僧");
		e1.setJob("领导");
		e1.setSal(9000.0);
		list.add(e1);
		
		Emp e2 = new Emp();
		e2.setEmpno(2);
		e2.setEname("悟空");
		e2.setJob("职员");
		e2.setSal(5000.0);
		list.add(e2);
		
		Emp e3= new Emp();
		e3.setEmpno(3);
		e3.setEname("八戒");
		e3.setJob("职员");
		e3.setSal(6000.0);
		list.add(e3);
		
		return list;
	}
	public void save(Emp e){
		System.out.println("增加员工:"+e.getEname());
	}
}
package entity;

import java.io.Serializable;

public class Emp implements Serializable {
	private Integer empno;
	private String ename;
	private String job;
	private Double sal;
	public Integer getEmpno() {
		return empno;
	}
	public Double getSal() {
		return sal;
	}
	public void setSal(Double sal) {
		this.sal = sal;
	}
	public void setEmpno(Integer empno) {
		this.empno = empno;
	}
	public String getEname() {
		return ename;
	}
	public void setEname(String ename) {
		this.ename = ename;
	}
	public String getJob() {
		return job;
	}
	public void setJob(String job) {
		this.job = job;
	}
	
}
package web;

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

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

import dao.EmpDao;
import entity.Emp;
/**
 * 开发规范:
 * 查询员工:/find.emp
 * 增加员工:/add.emp
 * @author Administrator
 *
 */
public class EmpServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//判断访问路径并处理请求
		String path = req.getServletPath();
		if("/find.emp".equals(path)){
			findEmp(req,res);
		}else if("/add.emp".equals(path)){
			addEmp(req,res);
		}else{
			throw new RuntimeException("查无此页");
		}
	}
	protected void findEmp(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//1.接收参数
		//2.处理业务
		EmpDao dao = new EmpDao();
		List list = dao.findAll();
		//3.发送响应
		res.setContentType("text/html;charset=utf-8");
		PrintWriter w = res.getWriter();
		//当前:/EmpManager/findEmp
		//目标:/EmpManager/add_emp.html
		w.println("增加");
		w.println("");
		w.println(" ");
		w.println("		编号");
		w.println("		姓名");
		w.println("		职位");
		w.println("		薪资");
		w.println(" ");
		if(list!=null){
			for(Emp e:list){
				w.println("");
				w.println(" "+e.getEmpno()+"");
				w.println(" "+e.getEname()+"");
				w.println(" "+e.getJob()+"");
				w.println(" "+e.getSal()+"");
				w.println("");
			}
		}
		w.println("");
		w.close();
	}
	protected void addEmp(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//1.接受参数
		req.setCharacterEncoding("utf-8");
		String ename = req.getParameter("ename");
		String job = req.getParameter("job");
		String sal = req.getParameter("sal");
		//保存员工数据
		Emp e = new Emp();
		e.setEname(ename);
		e.setJob(job);
		e.setSal(Double.valueOf(sal));
		new EmpDao().save(e);
		//3.发送响应
//		res.setContentType("text/html);charset=utf-8");
//		PrintWriter w = res.getWriter();
//		w.println("

保存成功

"); // w.close(); //重定向到查询页面,即建议浏览器自己去访问查询页面。 //当前:/EmpManager/addEmp //目标:/EmpManager/findEmp res.sendRedirect("find.emp"); } }




增加员工


	
	
		

姓名:

职位:

薪资:



  EmpManager
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
 
  
  
  	emp
  	web.EmpServlet
  
  
  	emp
  	*.emp
  
  
Servlet1
package web;

import java.io.IOException;

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

public class HelloServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//获取访问路径
		System.out.println(req.getContextPath());
		System.out.println(req.getServletPath());
		System.out.println(req.getRequestURI());
		System.out.println(req.getRequestURL());
		/*
		 * 本案例主要演示获取访问路径的方式,就不向浏览器输出内容了。但服务器会自动的向
		 * 浏览器做出响应,只是内容为空而已,浏览器看到一片空白。
		 */
	}
	

}

 



  servlet3
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
  	hello
  	web.HelloServlet
  
  
  	hello
  	
  	
  	
  	
  	
  	*.abc
  
Servlet2
package web;

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 DemoServlet extends HttpServlet {
	public DemoServlet(){
		System.out.println("实例化DemoServlet");
	}

	@Override
	public void destroy() {
		super.destroy();
		System.out.println("销毁DemoServlet");
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		super.init(config);
		System.out.println("初始化DemoServlet");
	}

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		System.out.println("调用DemoServlet");
	}
	
	
}
package web;

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 LoginServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		//Tomcat创建Servlet的过程:
		//LoginServlet ls = new LoginServlet();
		//ServletConfig cfg = new ServletConfig();
		//ls.init(cfg);
		//ls.service();
		ServletConfig cfg = getServletConfig();
		String maxOnline = cfg.getInitParameter("maxOnline");
		System.out.println(maxOnline);
	}
	
}


  servlet4
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
  
  	demo
  	web.DemoServlet
  	
  	1
  
  
  	demo
  	/demo
  
  
  
  	login
  	web.LoginServlet
  	
  		maxOnline
  		3000
  	
  
  
  	login
  	/login
  

Sertlet3

package web;

import java.io.IOException;

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

public class FindDeptServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		ServletContext ctx = getServletContext();
		String size = ctx.getInitParameter("size");
		System.out.println(size);
		Integer count = (Integer)ctx.getAttribute("count");
		ctx.setAttribute("count", ++count);
		System.out.println(count);
	}
	
}
package web;

import java.io.IOException;

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

public class FindEmpServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		ServletContext ctx = getServletContext();
		String size = ctx.getInitParameter("size");
		System.out.println(size);
		//统计流量
		Integer count = (Integer)ctx.getAttribute("count");
		ctx.setAttribute("count", ++count);
		System.out.println(count);
	}
	
}
package web;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
/**
 * 此类仅仅是在服务器启动时初始化参数的,不负责处理任何具体的请求。
 * @author Administrator
 *
 */
public class InitServlet extends HttpServlet {

	@Override
	public void init() throws ServletException {
		super.init();
		ServletContext ctx = getServletContext();
		ctx.setAttribute("count", 0);
		
	}
	
}
package web;

import java.io.IOException;
import java.io.PrintWriter;

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

public class UpServlet extends HttpServlet {
	private Double salary = 2000.0;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
		
		synchronized(this){
			salary += 100.0;
		try{
			//模拟网络延迟
			Thread.sleep(8000);
		}catch(InterruptedException e){
			e.printStackTrace();
		}
		res.setContentType("text/html");
		PrintWriter w = res.getWriter();
		w.print(salary);
		w.close();
		}
		
	}	
	
			
}


  servlet4
  
    index.html
    index.htm
    index.jsp
    default.html
    default.htm
    default.jsp
  
  
  
  	demo
  	web.DemoServlet
  	
  	2
  
  
  	demo
  	/demo
  
  
  
  	login
  	web.LoginServlet
  	
  		maxOnline
  		3000
  	
  
  
  	login
  	/login
  
  
  
  	findDept
  	web.FindDeptServlet
  
  
  	findDept
  	/findDept
  
  
    
  	findEmp
  	web.FindEmpServlet
  
  
  	findEmp
  	/findEmp
  
  
  
  
  	size
  	10
  
  
  
  	init
  	web.InitServlet
  
  
   
  	up
  	web.UpServlet
  
  
  	up
  	/up
  
  

 

关注
打赏
1636984416
查看更多评论
立即登录/注册

微信扫码登录

0.0439s