09-javaWeb-servlet

目录

一、http:要求:掌握一些头信息

1-1 请求:(request)

1-1-1 组成部分

1-1-2 请求行:请求信息的第一行

1-1-3 请求头:请求信息的第二行到空行结束

1-1-4 请求体:空行以下的内容

1- 2 响应:(response)

1- 2-1 组成部分

1- 2-2 响应行:响应信息的第一行

1- 2-3 响应头:从响应信息的第二行到空行结束

1- 2-4 响应体:空行以下的内容

二、案例1-完成登录案例

2-1 表单

2-2 servlet

2-2-1 编写一个servlet步骤

2-2-2 接受参数:  格式:key=value

2-2-3 回写内容

2-3 案例步骤分析

2-3-1 先有数据库和表

2-3-2 创建工程

2-3-3 复制页面

2-3-4 导入jar包

2-3-5 导入工具类和配置文件

2-3-6 创建servlet(LoginServlet: 路径 /login)

2-3-7 UserService

2-3-8 dao

2-3-9 流程图       

三、serlvet总结

3-1 servlet的体系结构:(了解)java_ee_api

3-1-1 servlet常用方法

3-1-2 GenericServlet常用方法

3-1-3 HttpServlet常用方法

3-2 servlet生命周期 ★★★

3-2-1 void init(ServletConfig config):初始化

3-2-2 void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑

3-2-3 void destroy():销毁

3-2-4 serlvet是单实例多线程

3-3 url-pattern的配置:★

3-3-1 方式

3-3-2 优先级

3-3-3 练习

3-3-4 问题

3-4 在servlet标签有一个子标签 load-on-startup

3-5 当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml

3-6 路径的写法

3-6-1 相对路径

3-6-2 绝对路径:(我们使用)

四、案例2-当我们登录失败,提示"用户名密码不匹配",3秒以后跳转到登录页面

4-1 常见的响应头-refresh

4-1-1 响应头格式

4-1-2 设置响应头

4-1-3 设置定时刷新

4-2 步骤分析

 五、案例3-统计登录成功的总人次

5-1 ServletContext:全局管理者,域对象

5-2 获取全局管理者

5-3 步骤分析

5-4 ServletConfig:(了解)

5-4-1 作用

5-4-2 方法

5-5 ServletContext:理解

5-5-1 作用

5-5-2 获取servletcontext

5-5-3 常用方法

六、域对象:★★★

6-1 常用方法

6-2 servletcontext创建和销毁

6-3 存放

6-4 获取文件的路径

总结


一、http:要求:掌握一些头信息

        超文本传输协议:
                规定数据的格式
        浏览器往服务器发送 ---- 请求
        服务器往浏览器回写 ---- 响应

  • 1-1 请求:(request)

  • 1-1-1 组成部分

        请求 请求请求

  • 1-1-2 请求行:请求信息的第一行

        格式:请求方式        访问的资源 协议/版本
        例如:GET /day0801/1.html HTTP/1.1

        请求方式:get和post

                get会把参数放在url的后面 post不会
                get参数大小有限制,post请求却没有限制
                get请求没有请求体;post请求有请求体 请求参数放在请求体中

  • 1-1-3 请求头:请求信息的第二行到空行结束

        格式:key/value (value可以是多个值)

        常见的请求头:

                Accept: text/html,image/bmp                --支持数据类型    text/html text/css text/javascript 大类型/小类型 mime类型
                Accept-Charset: ISO-8859-1                --字符集
                Accept-Encoding: gzip                         --支持压缩
                Accept-Language:zh-cn                       --语言环境
                Host: www.itcast.cn:80                         --访问主机
                If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT          --缓存文件的最后修改时间
                Referer: http://www.itcast.com/index.jsp                           --来自哪个页面、防盗链
                User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
                Cookie
                Connection:Keep-Alive                        --链接状态   

        掌握的头信息:

                Referer User-Agent Cookie If-Modified-Since

  • 1-1-4 请求体:空行以下的内容

        只有post才有请求体  get请求参数 http://xxxx?username=tom&password=123

        格式:username=tom&password=123

  • 1- 2 响应:(response)

  • 1- 2-1 组成部分

        响应 响应 响应

  • 1- 2-2 响应行:响应信息的第一行

        格式:协议/版本 状态码 状态码说明

        例如:HTTP/1.1 200 OK

        状态码:
                200 正常响应成功
                302 定向
                304 读缓存
                404 用户操作资源不存在
                500 服务器内部异常

  • 1- 2-3 响应头:从响应信息的第二行到空行结束

        格式:key/value(value可以是多个值)
        常见的头
                Location: http://www.it315.org/index.jsp         --跳转方向 和302一起使用的
                Server:apache tomcat                                     --服务器型号
                Content-Encoding: gzip                                  --数据压缩
                Content-Length: 80                                         --数据长度
                Content-Language: zh-cn                               --语言环境
                Content-Type: text/html; charset=GB2312                --数据类型
                Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT        --最后修改时间
                Refresh: 1;url=http://www.it315.org                --定时刷新
                Content-Disposition: attachment; filename=aaa.zip  --下载
                Set-Cookie:SS=Q0=5Lb_nQ; path=/search
                Expires: -1                                        --缓存
                Cache-Control: no-cache                 --缓存
                Pragma: no-cache                            --缓存
                Connection: Keep-Alive                    --连接

        掌握的头信息

                Content-Type Location  Last-Modified Refresh Content-Disposition Set-Cookie

  • 1- 2-4 响应体:空行以下的内容

        页面上展示的内容

  • 二、案例1-完成登录案例

  • 需求:

        在页面上输入用户名和密码,提交到服务器上,服务器拿着用户名和密码去数据库中查找有无此用户
                若有用户,则提示登录成功
                若无此用户,则提示用户名密码不匹配

  • 技术分析:

        表单
        servlet
        请求(request)
        响应(response)

  • 2-1 表单

        收集用户数据
        所有的字段要想提交到服务器必须 有name属性
        提交的地址 action
        请求方式:post

  • 2-2 servlet

        动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序
        处理业务逻辑,生成动态web内容

  • 2-2-1 编写一个servlet步骤

        1.编写一个类

                a.继承HttpServlet——需要在library中导入runtime中的Tomcat,即设置 target runtime
                b.重写doGet或者doPost方法

public class HelloServlet  extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("请求已收到............");
	}
}

        2.编写配置文件(web-inf/web.xml)

                a.注册servlet
                b.绑定路径

  <!--注册servlet 使用servlet标签
        servlet-name:给servlet起一个名字,全局唯一
        servlet-class:存servlet的全限定名,复制
  -->
  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.itheima.a_hello.HelloServlet</servlet-class>
  </servlet>

  <!--绑定路径 使用servlet-mapping标签
      servlet-name:使用上面已经起好的名字,建议复制
      servlet-class:访问路径,要求:目前必须以“/”开头,唯一
  -->
  <servlet-mapping>
    <servlet-name>HelloServlet</servlet-name>
    <url-pattern>/hello</url-pattern>
  </servlet-mapping>

        3.访问

                http://主机:端口号/项目名/路径——(绑定的路径

                http://localhost:8080/day09/hello

  • 2-2-2 接受参数:  格式:key=value

        request中带有请求参数——从request中接收参数

        Sting value=request.getParameter("key")

        例如: http://localhost/day09/hello?username=tom

                request.getParameter("username")就可以获取tom值

public class RequestServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//接受参数
		String value = req.getParameter("username");
	}
}

配置文件

  <servlet>
    <servlet-name>RequestServlet</servlet-name>
    <servlet-class>com.itheima.b_request.RequestServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>RequestServlet</servlet-name>
    <url-pattern>/request</url-pattern>
  </servlet-mapping>
  • 2-2-3 回写内容

        response
        response.getWriter().print("success");
        处理响应数据中文乱码:
                resp.setContentType("text/html;charset=utf-8"); //建议大家放在方法中的第一行

public class RequestServlet extends HttpServlet {
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		//接受参数
		String value = req.getParameter("username");
		
		//往浏览器回写数据

		//防止乱码,需要设置数据集
		resp.setContentType("text/html;charset=utf-8");
		resp.getWriter().print("数据:"+value);
		
		System.out.println(value);
	}
}
  • 2-3 案例步骤分析

  • 2-3-1 先有数据库和表

        create database day09;
        use day09;
        create table user(
                id int primary key auto_increment,
                username varchar(20),
                password varchar(20),
                email varchar(20),
                name varchar(20),
                sex varchar(10),
                birthday date,
                hobby varchar(50)
        );
        insert into user values (null,'tom','123','tom@126.com','tom','1','1988-01-01',null);

  • 2-3-2 创建工程

  • 2-3-3 复制页面

        修改login.html
                给用户名和密码添加name属性
                修改表单的action属性
                        action="http://localhost/day0901/login"
                添加method属性
                        method="post"

<form class="form-horizontal" action="http://localhost:80/day0901/login" method="post">
 <div class="form-group">
    <label for="username" class="col-sm-2 control-label">用户名</label>
    <div class="col-sm-6">
      <input type="text" class="form-control" id="username" placeholder="请输入用户名" name="username">
    </div>
  </div>
   <div class="form-group">
    <label for="inputPassword3" class="col-sm-2 control-label">密码</label>
    <div class="col-sm-6">
      <input type="password" class="form-control" id="inputPassword3" placeholder="请输入密码" name="password">
    </div>
  </div>
  • 2-3-4 导入jar包

        驱动 dbutils c3p0——直接导入到WEB-INF中的lib中

  • 2-3-5 导入工具类和配置文件

        datasourceUtils——见 07 的DataSource
        c3p0-config.xml(注意修改 数据库 名称)

  • 2-3-6 创建servlet(LoginServlet: 路径 /login)

        接受用户名和密码
        调用service层(UserService)完成登录操作
        提示信息

       

public class LoginServlet extends HttpServlet {
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.设置编码
		response.setContentType("text/html;charset=utf-8");
		
		//1.接受用户名和密码
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		
		//2.调用userservice 里的login(username,password) 返回值:User user
		User user = null;
		try {
			user = new UserService().login(username,password);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("网络异常,请稍后再试!");
		}
		
		//3.判断user是否为空
		if(user==null){
			//3.1若为空 写"用户名和密码不匹配"
			response.getWriter().print("用户名和密码不匹配,3秒之后跳转");
			//案例2-定时跳转
			response.setHeader("refresh", "3;url=/day0901/login.htm");
			
		}else{
			//3.2若不为空 写"xxx:欢迎回来"
			response.getWriter().print(user.getUsername()+":欢迎回来");
			
		}
	}
}

        配置

	<servlet>
		<servlet-name>LoginServlet</servlet-name>
		<servlet-class>com.itheima.web.servlet.LoginServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>LoginServlet</servlet-name>
		<url-pattern>/login</url-pattern>
	</servlet-mapping>
  • 2-3-7 UserService

        login(username,password)
                调用dao

public class UserService {

	/**
	 * 用户登录
	 * @param username 用户名
	 * @param password 密码
	 * @return User 用户
	 * @throws SQLException 
	 */
	public User login(String username, String password) throws SQLException {
		//调用dao
		UserDao dao=new UserDao();
		
		return dao.getUserByUsernameAndPwd(username,password);
	}
}
  • 2-3-8 dao

        通过用户名和密码查询数据库

        //执行sql
        User user =
qr.query(sql, new BeanHandler<>(User.class), username,password);

public class UserDao {

	/**
	 * 登录
	 * @param username 用户名
	 * @param password 密码
	 * @return 用户
	 * @throws SQLException 
	 */
	public User getUserByUsernameAndPwd(String username, String password) throws SQLException {
		//创建queryrunner
		QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
		
		//编写sql
		String sql="select * from user where username = ? and password = ?";
		
		//执行sql
		User user = qr.query(sql, new BeanHandler<>(User.class), username,password);
		return user;
	}
}
  • 2-3-9 流程图       

        

  • 三、serlvet总结

  • 3-1 servlet的体系结构:(了解)java_ee_api

        Servlet:接口
                |
        GenericServlet:抽象类
                |
        HttpServlet:抽象类
                |
        自定义servlet
        

  • 3-1-1 servlet常用方法

  •                 void init(ServletConfig config):初始化
  •                 void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
  •                 void destroy():销毁 

 

  •                 ServletConfig getServletConfig() :获取当前servlet的配置对象
  • 3-1-2 GenericServlet常用方法

                除了service方法没有实现,其他都实现了

                空参的Init() 若我们自己想对servlet进行初始化操作,重写这个init()方法即可

                (control+o)所有方法打开

  • 3-1-3 HttpServlet常用方法

                service做了实现,把参数强转,转为Http的request和response,调用了重载的service方法

                        重载的 service 方法获取请求的方式,根据请求方式的不同调用相应doXxx()方法

                doGet和doPost方法

  • 3-2 servlet生命周期 ★★★

  • 配置
  <servlet>
    <servlet-name>LifeServlet</servlet-name>
    <servlet-class>com.itheima.c_life.LifeServlet</servlet-class>
    <load-on-startup>3</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>LifeServlet</servlet-name>
    <url-pattern>/life</url-pattern>
  </servlet-mapping>
  • 3-2-1 void init(ServletConfig config):初始化

         * 初始化方法
         * 执行者:服务器
         * 执行次数:一次
         * 执行时机:默认第一次访问的时候

  • 3-2-2 void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑

         * 服务
         * 执行者:服务器
         * 执行次数:请求一次执行一次(eg: 刷新一次执行一次)
         * 执行时机:请求来的时候

  • 3-2-3 void destroy():销毁

         * 销毁
         * 执行者:服务器
         * 执行次数:只执行一次
         * 执行时机:

                 当servlet被移除的时候——如 重新部署项目时

                 者服务器正常关闭的时候
         

  • 3-2-4 serlvet是单实例多线程

         默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法

         每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑

         当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.

  • 3-3 url-pattern的配置:★

  • 3-3-1 方式

        方式1:完全匹配  必须以"/"开始 例如: /hello /a/b/c

        方式2:目录匹配  必须"/"开始  以"*"结束   例如: /a/*  /*

        方式3:后缀名匹配 以"*"开始 以字符结尾 例如: *.jsp  *.do  *.action

  • 3-3-2 优先级

        完全匹配>目录匹配>后缀名匹配

  • 3-3-3 练习

        有如下的一些映射关系:

                Servlet1 映射到 /abc/* 

                Servlet2 映射到 /*

                Servlet3 映射到 /abc 

                Servlet4 映射到 *.do 

  • 3-3-4 问题

        当请求URL为“/abc/a.html”,“/abc/*”和“/*”都匹配,哪个servlet响应

                Servlet引擎将调用Servlet1。

        当请求URL为“/abc”时,“/*”和“/abc”都匹配,哪个servlet响应

                Servlet引擎将调用Servlet3。

        当请求URL为“/abc/a.do”时,“/abc/*”和“*.do”都匹配,哪个servlet响应

                Servlet引擎将调用Servlet1。

        当请求URL为“/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应

                Servlet引擎将调用Servlet2.

        当请求URL为“/xxx/yyy/a.do”时,“/*”和“*.do”都匹配,哪个servlet响应

                Servlet引擎将调用Servlet2。

  • 3-4 在servlet标签有一个子标签 load-on-startup

        作用:用来修改servlet的初始化时机

        取值:正整数  值越优先级越

  • 3-5 当我们的配置文件里面没有指定配置的话,会查找tomcat的web.xml

        若请求我们自己的项目处理不了,tomcat的默认的servlet会帮我们处理信息,即,项目中的web.xml类似于继承了Tomcat中的              web.xml

  • 3-6 路径的写法

  • 3-6-1 相对路径

        当前路径    ./ 或者 什么都不写
        上一级路径 ../

  • 3-6-2 绝对路径:(我们使用)

        带主机和协议的绝对路径(访问站外资源)

                http://www.itheima.com/xxxx
                http://localhost:80/day09/hello

        不带主机和协议的绝对路径

                /day09/hello(开发经常使用)

  • 四、案例2-当我们登录失败,提示"用户名密码不匹配",3秒以后跳转到登录页面

  • 技术分析

        定时刷新

  • 4-1 常见的响应头-refresh

  • 4-1-1 响应头格式

        refresh:秒数;url=跳转的路径

  • 4-1-2 设置响应头

        response.setHeader(String key,String value);设置字符串形式的响应头

        response.addHeader(String key,String value);追加响应头, 若之前设置设置过这个头,则追加;若没有设置过,则设置

  • 4-1-3 设置定时刷新

        response.setHeader("refresh","3;url=/day0901/login.htm");

  • 4-2 步骤分析

        登录失败之后,修改业务逻辑
                打印之后添加一个头信息即可

​
public class LoginServlet extends HttpServlet {
	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.设置编码
		response.setContentType("text/html;charset=utf-8");
		
		//1.接受用户名和密码
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		
		//2.调用userservice 里的login(username,password) 返回值:User user
		User user = null;
		try {
			user = new UserService().login(username,password);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("网络异常,请稍后再试!");
		}
		
		//3.判断user是否为空
		if(user==null){
			//3.1若为空 写"用户名和密码不匹配"
			response.getWriter().print("用户名和密码不匹配,3秒之后跳转");
			//案例2-定时跳转
			response.setHeader("refresh", "3;url=/day0901/login.htm");
			
		}else{
			//3.2若不为空 写"xxx:欢迎回来"
			response.getWriter().print(user.getUsername()+":欢迎回来");
			
		}
	}
}

​

 五、案例3-统计登录成功的总人次

  • 需求:

        在一个用户登录成功之后,获取之前登录成功总人次,将次数+1.在访问另一个servlet的时候,显示登录成功的总人次

        单实例多线程,计数器不能记录

  • 技术分析:

        ServletContext

  • 5-1 ServletContext:全局管理者,域对象

        上下文(全局管理者)

        常用的方法:

                setAttribute(String key,Object value);//设置值

                Object getAttribute(String key);//获取值

                removeAttribute(String key)://移除值

  • 5-2 获取全局管理者

        getServletContext()

  • 5-3 步骤分析

        1.在项目启动的时候,初始化登录次数

                在loginservlet的init()方法中获取全局管理者,将值初始化为0,放入servletcontext

	@Override
	//初始化登录次数
	public void init() throws ServletException {
		//获取全局管理者——省略 this
		ServletContext context=getServletContext();
		
		//初始化次数
		context.setAttribute("count", 0);
		
		System.out.println("初始化次数成功");
	}

        2.登录成功之后,在loginservlet中获取全局管理者,获取登录成功的总次数

        3.然后将次数+1,让后将值设置回去

            //4.获取全局管理者
            ServletContext context = this.getServletContext();
            
            //5.获取总次数
            Integer cishu = (Integer) context.getAttribute("count");
            
            //6.将次数+1
            cishu++;
            
            //7.将次数再次放入域对象中
            context.setAttribute("count", cishu);

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.设置编码
		response.setContentType("text/html;charset=utf-8");
		
		//1.接受用户名和密码
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		
		//2.调用userservice 里的login(username,password) 返回值:User user
		User user = null;
		try {
			user = new UserService().login(username,password);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("网络异常,请稍后再试!");
		}
		
		//3.判断user是否为空
		if(user==null){
			//3.1若为空 写"用户名和密码不匹配"
			response.getWriter().print("用户名和密码不匹配,3秒之后跳转");
			//案例2-定时跳转
			response.setHeader("refresh", "3;url=/day0902/login.htm");
			
		}else{
			//3.2若不为空 写"xxx:欢迎回来"
			response.getWriter().print(user.getUsername()+":欢迎回来");
			
			//4.获取全局管理者
			ServletContext context = this.getServletContext();
			
			//5.获取总次数
			Integer cishu = (Integer) context.getAttribute("count");
			
			//6.将次数+1
			cishu++;
			
			//7.将次数再次放入域对象中
			context.setAttribute("count", cishu);
		}
	}

        4.当访问showServlet的时候,获取全局管理者,获取登录成功的总次数,然后在页面上打印出来即可

/**
 * 展示登录人数的总次数
 */
public class ShowServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.设置编码
		response.setContentType("text/html;charset=utf-8");
		
		//1.获取全局管理者
		ServletContext context = this.getServletContext();
		
		//2.获取登录的次数
		Integer cishu=(Integer) context.getAttribute("count");
		
		//3.在页面上打印总次数
		response.getWriter().print("登录成功的总次数为:"+cishu);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
  • 5-4 ServletConfig:(了解)

        servlet配置对象

  • 5-4-1 作用

        1.获取当前servlet的名称

        2.获取当前servlet的初始化参数

        3.获取全局管理者

  • 5-4-2 方法

  •         String getServletName():获取当前servlet的名称(web.xml配置的servlet-name
  •         String  getInitParameter(String key):通过名称获取指定的参数值
  •         Enumeration getInitParameterNames() :获取所有的参数名称

                初始化参数是放在 web.xml文件 
                        servlet标签下子标签 init-param        

                Enumeration<String> names = config.getInitParameterNames();
                while(names.
hasMoreElements()){
                               String name = names.nextElement();
                               System.out.println("参数名称:"+name);
                  }

  •         ★getServletContext():获取全局管理者

        

  •         servletconfig是由服务器创建的

        在创建servlet的同时也创建了它,通过servlet的init(ServletConfig config)将config对象

        传递给servlet,由servlet的getServletConfig方法获取

配置文件

  <servlet>
    <description></description>
    <display-name>SConfigServlet</display-name>

    <servlet-name>SConfigServlet</servlet-name>
    <servlet-class>com.itheima.d_config.SConfigServlet</servlet-class>

    <init-param>
      <param-name>user</param-name>
      <param-value>root</param-value>
    </init-param>

    <init-param>
      <param-name>password</param-name>
      <param-value>1234</param-value>
    </init-param>

  </servlet>

servletconfig 对象的常用方法

/**
 * servletconfig 对象的常用方法
 */
public class SConfigServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.获取servletconfig
		ServletConfig config = this.getServletConfig();
		
		//获取当前servlet的名称
		String servletName=config.getServletName();
		System.out.println("名称:"+servletName);
		
		//获取初始化参数
		String user=config.getInitParameter("user");
		System.out.println("获取单一的值user:"+user);
		
		
		System.out.println("===================");
		
		Enumeration<String> names = config.getInitParameterNames();
		while(names.hasMoreElements()){
			String name = names.nextElement();
			System.out.println("参数名称:"+name);
		}
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
  • 5-5 ServletContext:理解

        上下文(全局管理者)

        一个项目的引用.代表了当前项目.

        当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.

        当项目被移除的时候或者服务器关闭的时候servletcontext销毁

  • 5-5-1 作用

        1.获取全局的初始化参数

        2.共享资源(xxxAttribute)——servlet之间通信

        3.获取文件资源

        4.其他操作

  • 5-5-2 获取servletcontext

  •         方式1:了解 

                getServletConfig().getServletContext()

  •         方式2:

                getServletContext()

  • 5-5-3 常用方法

  • 1.了解

                String  getInitParameter(String key):通过名称获取指定的参数值

                Enumeration getInitParameterNames() :获取所有的参数名称        

                 在根标签下有一个 context-param子标签 用来存放初始化参数
                        <context-param>
                                <param-name>encoding</param-name>
                                <param-value>utf-8</param-value>
                        </context-param>

  •  2.xxxAttribute

                setAttribute(String key,Object value);//设置值

                Object getAttribute(String key);//获取值

                removeAttribute(String key)://移除值

  • 3.getRealPath

                String getRealPath(String path):获取文件部署到tomcat上的真实路径(带tomcat路径)

                        如:getRealPath("/") : D:\javaTools\apache-tomcat-7.0.52\webapps\day09\

                InputStream getResourceAsStream(String path):以流的形式返回一个文件

  • 4.获取文件的mime类型  大类型/小类型

                String getMimeType(String 文件名称)
                

  • 5.servletcontext 的常用方法
/**
 * servletcontext 的常用方法
 */
public class ScontextServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//1.获取全局管理者
		ServletContext context = this.getServletContext();
		
		//获取初始化参数
		String encoding=context.getInitParameter("encoding");
		System.out.println("初始化参数:"+encoding);
		
		//获取文件的真实路径
		//String path = context.getRealPath("/");//项目目录下
		String path = context.getRealPath("/1.txt");//项目目录下
		System.out.println(path);
		
		//以流的形式返回一个文件
		InputStream is = context.getResourceAsStream("/1.txt");
		System.out.println(is);
		
		//获取文件的mime类型
		System.out.println("----------------");
		String mimeType = context.getMimeType("1.jpg");
		System.out.println(mimeType);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
}
  • 六、域对象:★★★

        servletcontext
        当成map集合

  • 6-1 常用方法

        xxxAttribute()

  • 6-2 servletcontext创建和销毁

        当项目启动的时候,服务器为每一个web项目创建一个servletcontext对象.

        当项目被移除的时候或者服务器关闭的时候servletcontext销毁

  • 6-3 存放

        共享的数据——所有servlet都可以访问

  • 6-4 获取文件的路径

        通过类加载器获取文件:2.txt 放在classes目录下——部署前放置 src 目录下 无论是java项目还是web项目都可以

                类.class.getClassLoader().getResource("2.txt").getPath()

  • 总结

  • http:超文本传输协议

        请求:
        响应:

  • servlet:★

        本质上就是一个类,运行在服务器端的一个java小程序,生成动态web内容处理业务逻辑.

  • 编写servlet

        1.编写一个类 继承了HttpServlet 重写了doGet()或者doPost()
        2.编写配置文件 
                注册servlet  
                        <servlet>
                                <servlet-name>给servlet起个名字 名字唯一</servlet-name>
                                <servlet-class>servlet的全限定名</servlet-class>
                        </servlet>
                绑定路径
                        <serlvet-mapping>
                                <servlet-name>给servlet起个名字 名字唯一</servlet-name>
                                <url-pattern>访问路径 目前都是以"/"开始</url-pattern>
                        </serlvet-mapping>
        3.访问路径:
                http://主机:端口号/项目名/路径

  • servlet的体系结构

        所有的servlet应该继承HttpServlet 间接的实现了Servlet接口

  • httpServlet中的方法

        service(ServletRequest request,ServletResponse response):在这个方法中 将两个参数强转,调用了重载service方法
                service(HttpServletRequest request,HttpServletResponse response):获取请求的方式,根据请求方式的不同调用相应doXxx方法
        doGet和doPost方法:用来处理我们自己业务逻辑

  • servlet的生命周期 ★★★
  • url-pattern的配置

        完全匹配>目录匹配>后缀名匹配
        

  • load-on-startup:修改servlet的初始化时机
  • 若我们自己的项目处理不了请求,服务器上有一个默认的servlet会帮我们处理
  • servletConfig

        servlet的配置对象:
        获取servlet名称 初始化参数
        获取全局管理者★ getServletContext()

  • servletContext

        上下文
        作用:
                1.获取全局的初始化参数        
                        getInitParameter("key")
                2.共享资源(域对象)
                        xxxAttribute()
                3.获取资源
                        getRealPath("/1.txt"):获取项目发布到服务器上位置的根目录
                        getResourceAsStream("/1.txt"):以流的形式返回一个文件
                4.获取文件mime类型
                        getMimeType(文件名称)

  • 域对象

        servletcontext
        创建:
        销毁:

                        
                
        

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值