一、ServletConfig
1.代表当前Servlet的web.xml中的配置信息
ServletConfig conf = this.getServletConfig();
2.获取Servlet的名字
getServletName()
3.获取Servlet中配置的Servlet初始化参数
web里构建参数:
在servlet标签下
<init-param>
<param-name>name</param-name>
<param-value>nameValue</param-value>
</init-param>
getInitParameter("")
4.获取ServletContext对象
getServletContext()
二、ServletContext
代表当前web应用
在服务器启动,web应用被加载后立即创建代表当前web应用的ServletContext对象,此对象一直驻留在内存中,直到web应用被移除出容器,或服务器关闭时,webServletContext对 象随着web应用的销毁而销毁
config.getServletContext();
this.getServletContext();
1.作为域对象在整个web应用范围内共享数据
作用范围:整个web应用范围
生命周期:随着web应用启动而创建,随着web应用的销毁而销毁
this.getServletContext().setAttribute("param1", "avb");有缓存问题,要刷新。
在任何servlet里设置属性,在另外一个servlet里就能获取
context.getAttribute("param1")
2.获取整个web应用的初始化参数
在web-app标签下:
<context-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</context-param>
context.getInitParameter("");
3.实现Servlet的转发。
//获取转发器 RequestDispatcher
this.getServletContext().getRequestDispatcher("/servlet/Demo3Servlet").forward(request, response);
4.获取资源
this.getServletContext().getRealPath("/1.txt")//---在传入的路径前拼接当前web应用的硬盘路径,返回的就是需要的资源的硬盘路径
*5.利用类加载器读取资源
String path = Demo4.class.getClassLoader().getResource ("config.properties").getPath();
找该类的加载开始路径就是WebRoot目录下classes目录开始
三、ServletResponse -- HttpServletResponse
1.向浏览器输出一段数据
输出数据时的乱码问题原理,解决方案
1)字节输出流
设置浏览器打开的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
设置输入时的字节编码
response.getOutputStream().write("中国".getBytes("utf-8"));
2)字符输出流
/*response.setCharacterEncoding("uft-8");
response.setHeader("Content-Type", "text/html;charset=utf-8");*/
下面的方法代替上面方法:
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("中国");
2.控制浏览器定时刷新(3秒后回到主页)
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;utf-8");
response.getWriter().write("恭喜您注册成功!3秒后自动跳转到主页!如果没有自动跳转,<a href='"+request.getContextPath() +"/index.jsp'>点这里</a>");
response.setHeader("refresh", "3;url="+request.getContextPath() +"/index.jsp");
3.控制浏览器是否缓存资源
response.setDateHeader("Expires", System.currentTimeMillis()+1000L*3600*24*30);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.getWriter().write(new Date().toLocaleString());
4.实现请求重定向
/*response.setStatus(302);
response.setHeader("Location", "/day04/index.jsp");*/
请求重定向用下面方法:
response.sendRedirect("/day04/index.jsp");
如果给浏览器看的要写/项目名
服务器程序不用写/项目名
*请求重定向和请求转发
他们都可以实现访问资源的跳转过程
请求转发:一次请求一次响应,地址栏不发生变化,转发之前和转发之后是同一个request、response
请求重定向:两次请求两次响应。地址栏发生变化,重定向之前和重定向之后的是两个不同的request两个不同的response
通常情况下都是用请求转发。减少对服务器的访问次数,减少服务器的压力。可以在请求转发的过程中利用request对象带参数。
如果希望地址栏发生变化时用请求重定向。
5.response身上的getOutputStream和getWriter是互斥的调用了其中一个就不能再调用另外一个了。
response身上获取的OutputStream和Writer会在Servic方法结束后由服务器关闭,我们就不用关了。
6.验证码
四、ServletRequest -- HttpServletRequest
1.获取客户机信息
getRequestURL方法返回客户端发出请求完整URL
getRequestURI方法返回请求行中的资源名部分
getQueryString 方法返回请求行中的参数部分
getRemoteAddr方法返回发出请求的客户机的IP地址
getMethod得到客户机请求方式
getContextPath 获得当前web应用虚拟目录名称
2.获取请求头信息
getHeader(name)方法 --- String
getHeaders(String name)方法 --- Enumeration<String>
getHeaderNames方法 --- Enumeration<String>
getIntHeader(name)方法 --- int
getDateHeader(name)方法 --- long(日期对应毫秒)
3.获取请求参数
1)getParameter(name) --- String 通过name获得值
2)getParameterValues --- String[ ] 通过name获得多值 checkbox
3)getParameterNames --- Enumeration<String> 获得所有name
4)getParameterMap --- Map<String,String[ ]> key :name value:
5)对于获取请求参数时的乱码:
如果是POST提交,只要设置request.setCharacterEncoding("xxxx");就可以解决
但是如上的方法只对请求中实体内容中的部分起作用,由于get提交方式提交的请求参数时在URL后面带过来的,所以上面的方法不能解决get乱码
对于get方式提交的请求参数中的乱码需要我们手动的编解码解决:
value = new String(value.getBytes("iso8859-1"),"utf-8");
4.利用请求域传递对象
1.代表当前Servlet的web.xml中的配置信息
ServletConfig conf = this.getServletConfig();
2.获取Servlet的名字
getServletName()
3.获取Servlet中配置的Servlet初始化参数
web里构建参数:
在servlet标签下
<init-param>
<param-name>name</param-name>
<param-value>nameValue</param-value>
</init-param>
getInitParameter("")
4.获取ServletContext对象
getServletContext()
二、ServletContext
代表当前web应用
在服务器启动,web应用被加载后立即创建代表当前web应用的ServletContext对象,此对象一直驻留在内存中,直到web应用被移除出容器,或服务器关闭时,webServletContext对 象随着web应用的销毁而销毁
config.getServletContext();
this.getServletContext();
1.作为域对象在整个web应用范围内共享数据
作用范围:整个web应用范围
生命周期:随着web应用启动而创建,随着web应用的销毁而销毁
this.getServletContext().setAttribute("param1", "avb");有缓存问题,要刷新。
在任何servlet里设置属性,在另外一个servlet里就能获取
context.getAttribute("param1")
2.获取整个web应用的初始化参数
在web-app标签下:
<context-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</context-param>
context.getInitParameter("");
3.实现Servlet的转发。
//获取转发器 RequestDispatcher
this.getServletContext().getRequestDispatcher("/servlet/Demo3Servlet").forward(request, response);
4.获取资源
this.getServletContext().getRealPath("/1.txt")//---在传入的路径前拼接当前web应用的硬盘路径,返回的就是需要的资源的硬盘路径
*5.利用类加载器读取资源
String path = Demo4.class.getClassLoader().getResource ("config.properties").getPath();
找该类的加载开始路径就是WebRoot目录下classes目录开始
三、ServletResponse -- HttpServletResponse
1.向浏览器输出一段数据
输出数据时的乱码问题原理,解决方案
1)字节输出流
设置浏览器打开的编码
response.setHeader("Content-Type", "text/html;charset=utf-8");
设置输入时的字节编码
response.getOutputStream().write("中国".getBytes("utf-8"));
2)字符输出流
/*response.setCharacterEncoding("uft-8");
response.setHeader("Content-Type", "text/html;charset=utf-8");*/
下面的方法代替上面方法:
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("中国");
2.控制浏览器定时刷新(3秒后回到主页)
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;utf-8");
response.getWriter().write("恭喜您注册成功!3秒后自动跳转到主页!如果没有自动跳转,<a href='"+request.getContextPath() +"/index.jsp'>点这里</a>");
response.setHeader("refresh", "3;url="+request.getContextPath() +"/index.jsp");
3.控制浏览器是否缓存资源
response.setDateHeader("Expires", System.currentTimeMillis()+1000L*3600*24*30);
response.setHeader("Cache-Control", "no-cache");
response.setHeader("pragma", "no-cache");
response.getWriter().write(new Date().toLocaleString());
4.实现请求重定向
/*response.setStatus(302);
response.setHeader("Location", "/day04/index.jsp");*/
请求重定向用下面方法:
response.sendRedirect("/day04/index.jsp");
如果给浏览器看的要写/项目名
服务器程序不用写/项目名
*请求重定向和请求转发
他们都可以实现访问资源的跳转过程
请求转发:一次请求一次响应,地址栏不发生变化,转发之前和转发之后是同一个request、response
请求重定向:两次请求两次响应。地址栏发生变化,重定向之前和重定向之后的是两个不同的request两个不同的response
通常情况下都是用请求转发。减少对服务器的访问次数,减少服务器的压力。可以在请求转发的过程中利用request对象带参数。
如果希望地址栏发生变化时用请求重定向。
5.response身上的getOutputStream和getWriter是互斥的调用了其中一个就不能再调用另外一个了。
response身上获取的OutputStream和Writer会在Servic方法结束后由服务器关闭,我们就不用关了。
6.验证码
四、ServletRequest -- HttpServletRequest
1.获取客户机信息
getRequestURL方法返回客户端发出请求完整URL
getRequestURI方法返回请求行中的资源名部分
getQueryString 方法返回请求行中的参数部分
getRemoteAddr方法返回发出请求的客户机的IP地址
getMethod得到客户机请求方式
getContextPath 获得当前web应用虚拟目录名称
2.获取请求头信息
getHeader(name)方法 --- String
getHeaders(String name)方法 --- Enumeration<String>
getHeaderNames方法 --- Enumeration<String>
getIntHeader(name)方法 --- int
getDateHeader(name)方法 --- long(日期对应毫秒)
3.获取请求参数
1)getParameter(name) --- String 通过name获得值
2)getParameterValues --- String[ ] 通过name获得多值 checkbox
3)getParameterNames --- Enumeration<String> 获得所有name
4)getParameterMap --- Map<String,String[ ]> key :name value:
5)对于获取请求参数时的乱码:
如果是POST提交,只要设置request.setCharacterEncoding("xxxx");就可以解决
但是如上的方法只对请求中实体内容中的部分起作用,由于get提交方式提交的请求参数时在URL后面带过来的,所以上面的方法不能解决get乱码
对于get方式提交的请求参数中的乱码需要我们手动的编解码解决:
value = new String(value.getBytes("iso8859-1"),"utf-8");
4.利用请求域传递对象