JAVAEE学习笔记

http的协议的作用是:
规范服务器和浏览器的数据交互
特点:
简单快速,使用键值对进行发送数据
比较灵活,没有数据类型进行规定
无连接,一次连接只处理一个请求
http1.1之后支持可持续连接
无状态,对数据没有记忆功能

http协议的请求格式:
请求头,请求方式,请求地址和http协议版本
请求行,消息报头,一般用来说明客户端要使用的一些附加信息
空行,位于请求行和请求数据之间,空行是必须的
请求数据,非必须

get请求方式没有数据主体
post请求方式有数据主体

http的请求方式:
1.0:get,post,head
1.1:options,put,delete,trace,connect
get和post请求方式的区别:
一:
get:请求数据是空的,用问号隔开将请求数据放在了请求头里
post:具有请求数据
二:
get:传的是少量的信息
post:可以传大量的信息
三:
get:不安全
post:安全(在请求头里不可以看到具体的数据)

服务器响应的格式:
响应行:http的版本,状态码,状态消息
响应头:消息报头,客户端使用的附加信息
空行:
响应的实体:

http常见响应状态码含义:
http状态码由是三个十进制数字组成,第一个十进制数字定义了状态码的类型,后面的
两个数字没有分类的作用
200 ok 表示客户端请求成功
400 Bad Request 客户端请求语法错误,不能被服务器理解
401 Unauthorized 请求没有被授权
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 not found 请求资源不存在
500 internal service error 服务器发生不可预期的错误
503 service unavailable 服务器当前不能处理客户端的请求,一段时间恢复正常

tomcat服务器:
服务器是代码写的容器,用来自动运行代码
服务器找的是servlet接口类来识别代码的,和java虚拟机调用main方法相似
使用:
1.创建普通的java类,并且继承httpservlet
2.覆写service方法
3.在service方法中书写逻辑代码即可
4.在webcontent下的web-inf文件夹下的web.xml文件中配置servlet

servlet‘的生命周期:
1.从第一次调用到服务器关闭
2.如果在web.xml配置了load-on-start属性,生命周期从服务器打开到服务器关闭
注意:
init()方法是对servlet从初始化的方法,会在servlet第一次加载进行储存是被调用
destory()方法是对servlet进行销毁,在servlet被销毁的时候调用,服务器关闭的时候调用

文件发生更改才能重新编译
类什么时候被加载到内存?
第一次调用的时候进入内存
类什么时候被销毁?
服务器关闭的时候被销毁

http的交互流程:
第一步,客户端和服务器建立连接
第二步,客户端发送请求数据到服务器端
第三步,服务器接收到请求后进行处理将响应的结果返回给客户端
第四步,关闭客户对岸设服务器的连接(http1.1之后不会立刻关闭)

以上过程称为消息

servlet服务的运行流程:
url的组成:
服务器地址端口号/webapps下的文件夹的名称/要执行的servlet的url-pattern

web.xml配置的是servlet服务类的别名,具有安全性(class属性)

service方法和doget方法和dopost方法:
service方法:可以通过get和post请求
doget方法:只可以通过get请求
dopost方法:只可以通过post请求

如果在service方法中书写了super():
如果service和doget和dopost方都存在,优先调用service方法,
再父类的service方法,调用doget和dopost其中一个方法
如果不书写:
只调用本类的service方法,不再调用父类的service
因此一般情况下我们不书写super()方法,避免出现错误

404错误:资源未找到
原因一:在请求地址中servlet的别名书写错误
原因二;虚拟项目名称拼写错误

500错误:
原因一;类的路径错误
解决办法:
在web.xml文件中进行校验
原因二:类的具体方法逻辑或者语法错误
解决办法:
对类中的方法代码进行改错

405错误;请求方式不支持
原因:请求方式和servlet中的方法不匹配所造成的
解决方法:尽量使用service方法进行处理,并且不要再service方法
中调用父类的service方法

request对象:
服务器接收请求对象,创建request对象将实参传入servlet方法
作用:
封存了当前请求的所有信息
使用:
获取请求头数据
获取请求行数据
获取用户数据
注意:
request对象的创建由tomcat服务器创建,并作为实参传入到servlet的service方法中

package com.wang;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**

  • Servlet implementation class re
    */
    public class re extends HttpServlet {
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    //获取请求方式
    String str=arg0.getMethod();
    System.out.println(str);
    //获取请求url
    StringBuffer str1=arg0.getRequestURL();
    System.out.println(str1);
    //获取uri
    String str3=arg0.getRequestURI();
    System.out.println(str3);
    //获取协议

    }

}

无论是get还是post请求,获取数据都是通过request方法来获取键值
用get和post请求的区别就是请求数据的可见性问题,安全性问题

//获取请求方式
String str=arg0.getMethod();
System.out.println(str);
//获取请求url
StringBuffer str1=arg0.getRequestURL();
System.out.println(str1);
//获取uri
String str3=arg0.getRequestURI();
System.out.println(str3);
//获取协议
String str4=arg0.getScheme();
System.out.println(str4);
//获取请求头的数据
//获取指定的请求行的信息
String value=arg0.getHeader(“aaa”);
System.out.println(value);
//获取所有的请求行的键的枚举
Enumeration e=arg0.getHeaderNames();
while(e.hasMoreElements()) {
String str5=(String)e.nextElement();
String str6=arg0.getHeader(str5);
System.out.println(str5+":"+str6);
}

			//获取请求数据
		String name=arg0.getParameter("uname");
		String password=arg0.getParameter("pwd");
		System.out.println("******************");
		System.out.println(name);
		System.out.println(password);

package com.wang;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**

  • response
  • 作用:
  • 用来响应数据到浏览器的一个对象
  • 使用:
  • 设置响应头
  •  setHeader//在响应头中添加信息,但是同键会覆盖
    
  •  addHeader//在响应头中添加信息,但是同键不会覆盖
    
  •  senderror//设置错误
    
  • 设置响应实体
    */
    public class response extends HttpServlet {
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    //设置响应编码格式
    arg1.setContentType(“text/html;charset=utf-8”);
    //获取请求信息
    //处理请求
    //响应处理结果
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    arg1.getWriter().write(“用户名:
    ”);
    arg1.getWriter().write(“密码:
    ”);
    arg1.getWriter().write("
    ");
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    arg1.getWriter().write("");
}

}

乱码问题解决:
1.对string进行重新编码
name=new String(name.getBytes(“iso8859-1”),“utf-8”);
2.使用公共的配置
get方式:
1)在获得请求数据之前设置请求编码格式
arg1.setcontentype(“utf-8”);
2)在tomcat的目录下的conf目录中修改server.xml文件,在connector
标签中增加属性usebodyencodingforuri=“true”
usebodyencodingforuri=“true”

post方式:
在获得请求数据之前设置请求编码格式
arg1.setcontentype(“utf-8”);

1.浏览器发起请求到服务器
2.服务器接收浏览器的请求,进行解析,创建request对象储存请求数据
3.服务器调用对应的servlet进行请求处理,并将request对象作为实参传递给servlet的方法
4.servlet的方法执行请求处理(重点)
1)设置请求编码
2)设置响应编码格式
3)获取请求数据
4)处理请求信息
创建业务层对象
调用业务层对象的方法
5)响应处理结果

浏览器------->服务器------->数据库
浏览器<-------服务器<-------数据库

请求转发:
作用:实现多个servlet联动操作处理请求,这样避免了代码累赘,让servlet的职责更加明确。

    使用:

//让服务器多次次调用servlet
arg0.getRequestDispatcher(“response”).forward(arg0, arg1);

   特点:

一次请求,浏览器地址栏地址不变
请求转发转发后直接return结束即可,不需要再处理

request的作用域:一次请求的完成
使用request实现不同的servlet的数据流转
arg0.setAttribute("", “”);
arg0.getAttribute("","");
作用:
解决了一次请求不同servlet的数据共享问题
注意:
使用request对象进行数据流转,数据只在一次请求内有效
特点:
服务器创建
生命周期一次请求
每次请求都会创建

重定向学习
问题:
1)如果使用请求转发造成表单数据重复提交怎么办
2)如果servlet无法处理请求怎们办

解决:
解决了表单重复提交的问题,servlet无法处理的问题
使用:
arg1.sendRedirect("/wangsiwei-servlet4/main");

特点:
两次请求,两个request对象(数据流转是一次请求)
地址栏的信息是改变的,

使用的时机:
如果请求中有表单按数据,而数据又比较重要,不能重复提交,建议使
用重定向

package com.wang;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**

  • cookie学习:

  • 作用:解决了发送不同请求之间的数据共享

  • 使用:

  • //创建cookie对象(可选)

  • //设置有效期

  •   c2.setMaxAge(3*24*3600);
    
  • //设置有效路径

  •  c2.setpath("/04-servlet/abc");
    
  •     Cookie c=new Cookie("mouse","thinkpad");
    
  • //响应cookie信息给客户端

  •     arg1.addCookie(c);
    
  • //cookie的获取

  •   Cookie [] cks=arg0.getCookies();
       for(Cookie c:cks) {
     	String name=c.getName();
     	String value=c.getValue();
     	System.out.println(name+":"+value);
     }
    
  • 注意:

  • 一个cookie对象储存一条数据,多条数据可以多创建几个cookie对象进储存

  • 特点:

  • 浏览器端的数据储存技术

  • 储存的数据声明在服务器端

  • 临时储存,储存在浏览器的运行内存里,浏览器关闭就消失

  • 定时储存,设置了cookie的有效期,储存在客户端的硬盘中,在有效期内符合路径的请求都会附带该信息
    */
    public class cookieservlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    //设置请求编码格式
    arg0.setCharacterEncoding(“utf-8”);
    //设置响应编码格式
    arg1.setContentType(“text/html;charset=utf-8”);
    //获取请求信息
    //处理请求信息
    //响应处理请求

     //使用cookie进行浏览器端的数据储存
        //创建cookie对象
        Cookie c=new Cookie("mouse","thinkpad");
        Cookie c2=new Cookie("key","bjsxt");
        //设置有效期
        c2.setMaxAge(3*24*3600);
        c2.setPath("/04-servlet-cookie/gggg");
        //响应cookie信息
        arg1.addCookie(c);
        arg1.addCookie(c2);
     arg1.getWriter().write("cookie学习");
    

    }
    }

package com.wang;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**

  • cookie学习:

  • 作用:解决了发送不同请求之间的数据共享

  • 使用:

  • //创建cookie对象(可选)

  • //设置有效期

  •   c2.setMaxAge(3*24*3600);
    
  • //设置有效路径

  •  c2.setpath("/04-servlet/abc");
    
  •     Cookie c=new Cookie("mouse","thinkpad");
    
  • //响应cookie信息给客户端

  •     arg1.addCookie(c);
    
  • 注意:

  • 一个cookie对象储存一条数据,多条数据可以多创建几个cookie对象进储存

  • 特点:

  • 浏览器端的数据储存技术

  • 储存的数据声明在服务器端

  • 临时储存,储存在浏览器的运行内存里,浏览器关闭就消失

  • 定时储存,设置了cookie的有效期,储存在客户端的硬盘中,在有效期内符合路径的请求都会附带该信息
    */
    public class cookieservlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    //设置请求编码格式
    arg0.setCharacterEncoding(“utf-8”);
    //设置响应编码格式
    arg1.setContentType(“text/html;charset=utf-8”);
    //获取请求信息
    //处理请求信息
    //响应处理请求

     //使用cookie进行浏览器端的数据储存
        //创建cookie对象
        Cookie c=new Cookie("mouse","thinkpad");
        Cookie c2=new Cookie("key","bjsxt");
        //设置有效期
        //c2.setMaxAge(3*24*3600);
        c2.setPath("/04-servlet-cookie/gggg");
        //响应cookie信息
        arg1.addCookie(c);
        arg1.addCookie(c2);
     arg1.getWriter().write("cookie学习");
    

    }
    }

两个servlet之间的数据共享实现
用到的两个方法;
存储: hs.setAttribute(“name”, name);
获取: hs.getAttribute(“name”);

package com.wang;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.si.loginservice;
import com.si.wei.loginimpl;
import com.wei.User;

/**
*
*/
public class login extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

//设置响应编码格式
	arg1.setContentType("text/html;charset=utf-8");
//获取请求信息
	String name=arg0.getParameter("uname");
	//乱码问题的解决
	name=new String(name.getBytes("iso8859-1"),"utf-8");
	String password=arg0.getParameter("pwd");
	System.out.println(name+":"+password);
//处理请求信息
	//创建session对象
	  HttpSession hs=arg0.getSession();
	  hs.setAttribute("name", name);
	//获取业务层对象
	loginservice ls=new loginimpl();
	User u=ls.checklogin(name, password);
	System.out.println(u);
	
	if(u!=null) {
		//创建cookie信息实现三天免登陆
		Cookie c=new Cookie("uid",u.getUid());
	
		//设置cookie的有效期
		c.setMaxAge(3*24*3600);
		c.setPath("/wangsiwei-servlet4/cookie");
		arg1.addCookie(c);
	
		//使用重定向
		arg1.sendRedirect("/wangsiwei-servlet4/main");
		
	}else {
		arg0.getRequestDispatcher("response").forward(arg0, arg1);
	   arg0.setAttribute("", "");
	}
//响应处理信息
	
	
	
	
	
}

}

package com.wang;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**

  • Servlet implementation class main
    */
    public class main extends HttpServlet {
    @Override
    protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
    //设置请求编码
    arg0.setCharacterEncoding(“utf-8”);
    //设置响应编码
    arg1.setContentType(“text/html;charset=utf-8”);
    //获取请求数据
    //创建session对象
    HttpSession hs=arg0.getSession();
    //获取session对象的数据
    String name=(String)hs.getAttribute(“name”);
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    arg1.getWriter().write(“

    欢迎”+name+“访问王思伟的管理系统

    ”);
    arg1.getWriter().write("
    ");
    arg1.getWriter().write("");
    arg1.getWriter().write("");
    }

}

package com.wang;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**

  • 问题:
  • 一个用户的不同请求处理的数据共享怎么办
  • 解决:
  • 使用session技术
  • 原理:
  • 用户第一次访问服务器,服务器
  • 会创建一个session对象给此用户
  • 并将session对象JSESSIONID使用cookie技术储存到浏览器中
  • 保证用户的其他请求能够获取到同一个session对象,耶额能够保证不同的请求获取
  • 到共享的对象
  • 特点:
  • 储存在服务器端
  • 服务器进行创建
  • 依赖于cookie技术
  • 一次会话
  • 默认储存时间是半小时
  • 作用:
  • 一个用户不同请求处理的数据共享问题
  • 使用:
  • 创建/获取session对象
  • HttpSession hs=arg0.getSession();//即是创建也是获取
  • 如果请求中拥有session的标识符JSESSIONID,则返回对应的sessionID
  • 如果请求中没有session的标识符JSESSIONID,则创建新的session对象,
  • 并将JSESSIONID作为cookie储存在浏览器端
  • 如果session对象失效了,也会重新创建一个session对象, 并将JSESSIONID
  • 作为cookie储存在浏览器端
  • 设置储存时间:
  •     hs.setMaxInactiveInterval(3*24*3600);
    
  • 注意:
    
  •    在指定时间内session对象没有被使用则销毁,如果使用了则重新计时
    
  • 设置session强制失效:
    
  •    hs.invalidate();
    
  • 存储和获取数据:
    
  •   存储:  hs.setAttribute("name", name);
    
  •   获取:  hs.getAttribute("name");返回的数据类型为object,需要类型转化
    
  •   注意:
    
  •      储存的动作和去除的动作可以发生在不同的请求中,但是存储必须先于取出执行
    
  • 使用时机:
    
  •   一般用户在登陆web项目时会将用户的个人信息存储到session中,供该用户的其他请求使用
    
  • 总结:
    
  •   session解决了一个用户的不同请求的数据共享问题,只要在JSESSIONID不失效和session
    
  •   对象不失效的情况下
    
  •   用户在任意请求中都能获得同一个session的对象
    
  • 作用域:
    
  •   一次会话
    
  •   在JSESSIONID不失效和session对象不失效的情况下为整个项目内
    
  • session失效处理:
    
  •   将用户请求中的JSESSONIOID和后台获取到的 对象JSESSONIOID进行对比,如果一致
    
  •   则session没有失效,如果不一致则证明失效了,重定向到登陆页面,让用户重新登陆
    
  • 解决主页面用户名显示为null的问题:
    原因:
    因为在用户登陆成功后使用重定向显示主页面,两次请求,而用户的信息
    在第一次请求中,第二次请求中没有用户数据,所以显示为null
    解决:
    使用session
  • 注意:
  • JSESSIONID储存在了cookie的临时储存空间中,浏览器关闭就消失

*/
public class sessionservlet extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
//设置请求编码格式
arg0.setCharacterEncoding(“utf-8”);
//设置响应编码格式
arg1.setContentType(“text/html;charset=utf-8”);
//获取请求信息
String name=“王思伟”;
//处理请求信息
//创建session对象
HttpSession hs=arg0.getSession();//即是创建也是获取
System.out.println(hs.getId());
//储存数据
hs.setAttribute(“name”, name);
//响应处理结果
//直接响应
arg1.getWriter().write(“session 学习”);

}

}

package com.wang;

import java.io.IOException;
import java.io.InputStream;

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

/**

  • servletcontext对象的学习:

  • 问题:

  • 不同的用户使用相同的数据

  • 解决:

  • servletcontext对象

  • 特点:

  • 服务器创建
    
  • 用户共享
    
  • 作用域:

  • 整个项目
    
  • 生命周期:

  •  服务器的启动到关闭
    
  • 使用:

  • 获取servletcontext的对象

  • 使用servletcontext对象完成数据共享

  •  //获取servletcontext对象
        //第一种方式
        ServletContext sc=this.getServletContext();
        //第二种方式
       ServletContext sc2=this.getServletConfig().getServletContext();
       //第三种方式
       ServletContext sc3=arg0.getSession().getServletContext();
    //使用servletcontext完成数据共享
       //数据存储
       sc.setAttribute("str", "servletcontext学习");
       //数据获取
       sc.getAttribute("str");
       注意:
         不同的用户可以给servletcontext对象进行数据的存取
         获取的数据不存在返回null
    

    获取项目中web.xml文件中的全局配置数据
    sc.getInitParameter(“name”);根据键的名字返回所对应的值,string类型
    sc.getInitParameterNames(); 返回键名的枚举
    配置方式

    wangsiwei
    751612751612

    注意:标签只能存储一组键值对数据,多组可以声明多个
    进行存储
    作用:
    将静态数据和代码进行解耦
    获取项目webcontent下的资源绝对路径
    String path=sc.getRealPath( String path);
    System.out.println(path);
    获取的路径为项目根目录,path参数为项目根目录的路径
    获取webcontent下的资源的流对象
    InputStream is=sc.getResourceAsStream("/doc/1.txt");
    注意:
    此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要类加载器
    path参数为项目根目录的路径

*/
public class servletcontext extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

	//获取servletcontext对象
	   //第一种方式
	   ServletContext sc=this.getServletContext();
	   //第二种方式
	  ServletContext sc2=this.getServletConfig().getServletContext();
	  //第三种方式
	  ServletContext sc3=arg0.getSession().getServletContext();
   //使用servletcontext完成数据共享
	  //数据存储
	  sc.setAttribute("str", "servletcontext学习");
  //获取项目的web.xml的全局配置文件
	  String name=sc.getInitParameter("wangsiwei");
	  System.out.println("全局配置参数"+name);
	  arg1.getWriter().write(name);
 //获取项目根目录下的资源的绝对路径
	  String path=sc.getRealPath("/doc/1.txt");
	  System.out.println(path);
 //获取项目根目录下的资源的流对象
	  InputStream is=sc.getResourceAsStream("/doc/1.txt");
	  
	  
	   
	 
}

}

package com.wang;

import java.io.IOException;
import java.io.InputStream;

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

/**

  • servletcontext对象的学习:

  • 问题:

  • 不同的用户使用相同的数据

  • 解决:

  • servletcontext对象

  • 特点:

  • 服务器创建
    
  • 用户共享
    
  • 作用域:

  • 整个项目
    
  • 生命周期:

  •  服务器的启动到关闭
    
  • 使用:

  • 获取servletcontext的对象

  • 使用servletcontext对象完成数据共享

  •  //获取servletcontext对象
        //第一种方式
        ServletContext sc=this.getServletContext();
        //第二种方式
       ServletContext sc2=this.getServletConfig().getServletContext();
       //第三种方式
       ServletContext sc3=arg0.getSession().getServletContext();
    //使用servletcontext完成数据共享
       //数据存储
       sc.setAttribute("str", "servletcontext学习");
       //数据获取
       sc.getAttribute("str");
       注意:
         不同的用户可以给servletcontext对象进行数据的存取
         获取的数据不存在返回null
    

    获取项目中web.xml文件中的全局配置数据
    sc.getInitParameter(“name”);根据键的名字返回所对应的值,string类型
    sc.getInitParameterNames(); 返回键名的枚举
    配置方式

    wangsiwei
    751612751612

    注意:标签只能存储一组键值对数据,多组可以声明多个
    进行存储
    作用:
    将静态数据和代码进行解耦
    获取项目webcontent下的资源绝对路径
    String path=sc.getRealPath( String path);
    System.out.println(path);
    获取的路径为项目根目录,path参数为项目根目录的路径
    获取webcontent下的资源的流对象
    InputStream is=sc.getResourceAsStream("/doc/1.txt");
    注意:
    此种方式只能获取项目根目录下的资源流对象,class文件的流对象需要类加载器
    path参数为项目根目录的路径

*/
public class servletcontext extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

	//获取servletcontext对象
	   //第一种方式
	   ServletContext sc=this.getServletContext();
	   //第二种方式
	  ServletContext sc2=this.getServletConfig().getServletContext();
	  //第三种方式
	  ServletContext sc3=arg0.getSession().getServletContext();
   //使用servletcontext完成数据共享
	  //数据存储
	  sc.setAttribute("str", "servletcontext学习");
  //获取项目的web.xml的全局配置文件
	  String name=sc.getInitParameter("wangsiwei");
	  System.out.println("全局配置参数"+name);
	  arg1.getWriter().write(name);
 //获取项目根目录下的资源的绝对路径
	  String path=sc.getRealPath("/doc/1.txt");
	  System.out.println(path);
 //获取项目根目录下的资源的流对象
	  InputStream is=sc.getResourceAsStream("/doc/1.txt");
	  
	  
	   
	 
}

}

package com.wang;

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;

/**

  • servletconfig对象的学习
  • 问题:
    
  •    如何获取在web.xml中给每个servlet单独配置数据4
    
  • 解决:
    
  •    使用servletconfig对象
    
  • 使用:
    
  •    获取servletconfig对象
    
  •    获取web.xml中的配置数据
    

*/
public class servletconfig extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {

	//获取servletconfig对象
	ServletConfig sc=this.getServletConfig();
	//获取web.xml中的配置数据
	String str=sc.getInitParameter("config");
	System.out.println(str);
	
	
	
	
	
	
}

}

在web项目中和tomcat服务器下都有web.xml文件
区别:
web项目下的web.xml文件为局部配置,针对本项目的位置
tomcat下的web.xml文件为全局配置,配置公共信息

如果自己的项目和服务器都配了的配置,有限使用自己的

内容:
全局上下文配置(全局参数)
servlet配置
过滤器配置
监听器配置
注意:
他们的配置没有先后顺序,加载有先后顺序
加载顺序:
web容器会按servletcontext–>context-param–>listener–>filter–>
servelt这个顺序加载组件
加载时期:
都是服务器启动的时候

热部署和冷部署:
热部署
修改项目的内容不需要重启服务器,也不需要将项目部署放在tomcat的webroot下
将这句话放在
server.xml的host里
冷部署
每一次修改需要重启服务器

JSP的学习:
问题:
使用servle响应请求的时候,将响应的代码打印出来比较麻烦
工作量太大,使用html的话数据一般是静态的,servlet响应的
网页为动态网页
解决:
使用JSP技术(保留servlet优点的同时可以像写html代码那样方便)
概念:
一种动态网页技术
特点:
本质还是servlet
跨平台,一次编写处处运行
组件跨平台
健壮性和安全性
原理:
将普通的html的文本进行转义,让servlet可以识别运行

JSP的语法和指令:
JSPD的三种注释:
前端语言注释:
会被转义,也会被发送,但是不会被浏览器执行
Java语言注释:
会被转义,但是不会被servlet执行
jsp注释:
不会被转义
JSP的page指令学习:
<%@ page 属性名=“属性值”属性名=“属性值”"%>
language:声明jsp要被转义的语言
import:声明转义的java文件要导入的包,不同的包使用逗号隔开
pageEncoding:设置jsp文件的数据编码格式
contentType="text/html; charset=utf-8"设置jsp数据响应给浏览器时,
浏览器的解析和编码格式
session:设置转译的servlet中是否开启session支持,默认是开启的
errorpage:设置jsp页面运行错误的时候跳转的页面
extends:设置jsp转译的Java文件要继承的父类
作用:
配置jsp文件的转译相关的参数

        JSP的局部代码块:
                         特点:
                               局部代码鲁艾中声明的java代码会被原样转译到jsp对应的servlet
                               文件的_jspservice方法中
                               代码块声明的变量都是局部变量
                          使用:
                              <%   java代码  %>
                          缺点:
                                 使用局部代码块在jsp中进行逻辑判断,书写麻烦,阅读困难
                           开发:
                                  使用servlet进行请求逻辑处理,使用jsp进行页面展现
       JSP的全局代码块:
                            特点:
                                   声明的java代码作为全局代码转译到对应的servlet类中
                            使用:
                                   <%!   全局代码  %>
                             注意:
                                    全局代码块声明的代码,需要使用局部代码块来调用
                              
      JSP的脚本段语句:
                          特点:
                                 帮助我们快速的获取变量或者方法的返回值作为数据响应给浏览器
                          使用:
                                  <%=变量名或者方法的返回值%>
                          注意:不要再变量名或方法名后加分号
                          位置:除jsp语法要求以外都可以加
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值