- ServletConfig 的作用
*getServletName
*getInitParameter()
*getInitParameterNames()
getServletContext()
5.servlet线程是不安全的。
因为在服务器中,一个servlet只存在一个实例。所以当有多个请求访问的时候,如果使用成员变量接受线程参数,就会有问题。
6.url-pattern
路径匹配: "/"开头 例如:/AServlet
后缀名匹配: “”开头 例如: *.do
注意: 1.匹配范围越广优先级越低
2.两种匹配方式不能同时使用。
7.load on startup
该配置可以让servlet在服务器启动时加载
填入的数字表示优先级.数字越小,优先级越高。
优先级一样,按配置顺序加载。
8.servletContext
范围:一个项目对应一个servletContext
获取:通过servletConfig获取
作用:
1.获取配置文件(web.xml根下的)中的参数
*getInitPParameter()
*getInitParameterNames()
2.域的功能 => application
增加一个:setAttribute
删除一个: removeAttribute
获得一个:getAttribute
获得所有键:getAttributeNames
3.获得项目内资源
getResourceAsStream
getRealPath
以上两个方法都是填写
//取得之前记录的数字,从application域取
//取到了 ==> 不是第一次访问
//没有取到了 ==> 当前是第一次访问
//2.将访问次数输出给浏览器
//3.将新的访问次数放回application域
Day08 --- request & response
- response 代表响应,可以理解为一个空的箱子,我们在里面填入要发送到浏览器的内容。服务器会把这些内容组装成http响应
响应首行 协议/版本号 状态码 状态码描述
添加状态码 和描述
void setStatus(int sc) 设置状态码
void setStatus(int sc, String sm) 设置状态码和描述
void sendError(int sc) 只设置状态码,错误的
void sendError(int sc, String msg) 设置状态码 和 描述
响应头
添加响应头
void setHeader(String name, String value) A:A
setIntHeader(String name, int value)
setDateHeader(String name, long date)
void addHeader(String name, String value)
响应空行
响应正文
发送字节流
getOutputStream
发送字符流
getWriter
应用一:
手动给浏览器发送状态码404
例二:重定向
//1 放回状态吗为302
//2 告诉浏览器哪找新地址,发送一个响应头: Location: http://www.baidu.com
也可以用sendRedirect("")
例三:Refresh头,刷新
//1 .设置响应头为Refresh:5;url=/Day08-response/AServlet
response.setHeader()
//2. 提示字符流发送提示,5秒后跳转
例四:输出字节流
//1 获得输出字节流
//2 输出中文
//3 告诉浏览器使用GBK解码 ==> 乱码
控制 浏览器使用什么码表解码
可以用请求头response.setHeader(" "," ")
例五:字符流发送汉子
// 控制字符流使用的编码,往上放,在获得字符流的时候,会来取这个编码。如果在取完之后设置,没有效果
//告诉浏览器使用什么码来解码
//1. 获得字符流
//2. 发送中文
JAVAEE提供一种方法可以同时解决以上两个方法:setcontenttype
字符流和字节流要注意的一个问题:
字节流和字符流一定不能同时使用。
字节流发送图片:
//0 告诉浏览器 发给你的流的MIME类型。
//1. 获得图片的输入流
getServletContext().getResourceAsStream
//2. 通过response获得输出字节流
OutputStream out = response.getOUtputStream();
//3 两个对接
//3. 两个对接
//使用字节流发送图片
getServletContext().getMimeType(".jar")
告诉Context根据对象去xml里面找
request对象
封装了浏览器发送来的请求信息
请求首行 请求方式 请求路径 协议/版本号
request.getMethod(): GET
request.getRequestURI()
request.getServletPath
请求头
请求空行
请求正文,表单传过来的键值对
获得表单提交的参数:
1.GET http://localhost:8080/Day
乱码:只要确保编码和解码一致,就绝对没有问题。
浏览器负责编码。浏览器使用的码表就是表单所在页面的码表
服务器负责解码,服务器默认使用ISO-8859-1编码,如下配置的URIEndoing来解决编码码表(不太推荐使用)
2.POST
POST解码时机是在解码时,Get是在调用之前。
如上配置会影响整个服务器不推荐:
我们选用如下代码解决:
//获得参数
//因为服务器使用了错误的码表,那么我们按照错误的码表原路返回
//用正确的码表重新解码
2.POST
因为Post解码是在第一次调用getParameter之前,那么解决乱码只需要在调用该方法之前设置编码
涉及到获得表单参数的方法还有哪些呢?
String getParameter 根据键获得值
Map getParameterMap() 获得服务器保存表单参数的容器. 就是map. 泛型:habit=chi&habit=shui&habit=la
String[] getParameterValues(String name) 根据一个键获得多个值得情况
2.request 中请求转发
转发:
一个Servlet处理完毕交给下面的servlet(JSP)继续处理.
作用:
在现实开发中,
//1 获得表单提交的用户名密码
//2 判断是否正确tom 1234才算成功
//成功 ==> 转发到成功页面
//失败 ==> 转发到失败页面
注意问题:
转发的时候,从分工上讲servlet中不要做
servlet中不要做输出正文的动作,没有结果的
如果放到前面会出现乱码
但是响应头是可以的
请求包含
getRequestDispather
3.request域的应用.
原理:
在request对象中含有一个map,这个map就是request域
作用:
//1 获得表单提交的用户名密码
//2 验证
//成功 ==> 成功页面
//失败 ==> 回到登陆页面,并显示错误信息
request域中共享对象
在将来开发中。请求转发时,servlet处理完数据,处理结果要交给jsp显示,可以使用request域将处理结果由servlet带给jsp显示
操作:
1.setAttribute 存入一个键值对
2.getAttribute 通过键取出值
3.getAttributeNames 获得域中所有键
4.removeAttribute 根据键移除一个键值对
路径总结:
以上路径分为两种情况:
1.客户端路径 ==>给浏览器用的路径