severlet笔记整理

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//获得登录页面的数据 从请求对象获得
一次 第一次访问servlet时,才会创建对象初始化
serverlet :
//无参构造函数
public TestServlet() {
System.out.println("无参构造...");
}
//doGet
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
//获得登录页面的数据 从请求对象获得
}else if ("POST".equals(method)) {
doPost(req, resp);
}
}*/
//doGet
public void doGet(HttpServletRequest request, HttpServletResponse response)
//使用转发技术 回复 用户
request.getRequestDispatcher("SuccessServlet").forward(request, response);//将当前请求和响应对象 一起 传递给下一个组件
} else {
// 重定向
response.sendRedirect("FailureServlet");//参数: URL
PrintWriter out = response.getWriter();
//out.println--向浏览器/网页 打印信息 System.out.print()---向控制台打印信息
页面向服务器传递数据 : 将数据封装到请求对象中
服务器向页面传递数据 : 将数据封装到响应对象中
匹配成功后,根据当前servlet标签下的servlet-class 找到这个 真实的servlet类
如果截取的内容 与 servlet-mapping中的url-pattern 不匹配,才会到WebRoot下 寻找相应的资源.
如果没有找到这样的资源 将报404
问题:servlet类在整个周期,创建和初始化多少次?
public void init() throws ServletException {
System.out.println("初始化....");
}
通过web.xml找到servlet类后,
如果是第一次访问这个servlet类,将先 通过无参构造函数 创建Servlet对象
String name=request.getParameter("userName");//根据标签的name属性值 获得 标签的值 <input type="text" name='userName'>
String password=request.getParameter("password");
页面之间传递数据 : URL 其他
服务器中 组件之间 传递数据: 容器
name=张三
servletA ..转发.> servletB ---重定向--> servletC
为什么要使用容器: 解决服务器端组件之间传递数据问题.
Servlet的容器: request容器 session容器 application容器
<servlet-class>action.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<!-- 给你的servlet程序 起一个别名 名称任意 但是不要太特别 -->
<servlet-name>test</servlet-name>
xml 配置 :
<!-- 注册servlet,用于服务器 找到Servlet程序 -->
<servlet>
<!-- 给你的servlet程序 起一个别名 名称任意 但是不要太特别 -->
<servlet-name>test</servlet-name>
<!-- 指出这个别名对应的真实的servlet 格式: 包名.类名-->
System.out.println("GET 账号:"+name+" 密码:"+password);
}
//doPost
// 请求对象中 封装的请求方式 = post request.getMethod()
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("doPost.....");
}
//销毁
public void destroy() {
System.out.println("销毁....");
}
//初始化
2.重定向 属于 客户端跳转
//服务器调用 doGet / doPost 取决于 请求方式
//请求方式 被封装到了 请求对象中 request.getMethod() ---post
@Override
/*protected void service(HttpServletRequest req, HttpServletResponse resp)
服务器自动从项目名称 之后 开始截取
拿着截取的内容 到项目的web.xml文件中 与servlet-mapping中的url-pattern匹配
如果截取的内容 与 url-pattern匹配成功 拿着当前servlet-mapping下的servlet-name的值
与servlet标签中的servlet-name 进行匹配
请求: Get Post
Get: 超链接 表单的method=get 直接访问
Post: 表单的method=post
GET请求: 常见的方式有 超链接 表单的get提交(method="get") 直接访问
特点:
1.get请求 服务器会自动调用servlet的 doGet()
get请求和post请求:
get请求会要求服务器 立即处理该请求 不会形成请求队列.
问题: 对于servlet的 doGet doPost 都是服务器自动调用的, 那么 服务器怎么处理?
服务器会先在 HttpServlet中 调用service() 获得请求方式,判断请求方式的类型,调用相应的方法.
System.out.println("POST 账号:"+name+" 密码:"+password);
//假设 账号--TOM 密码--123 成功 否则失败
// 告诉用户登录 结果 响应 : 转发 重定向
if ("TOM".equals(name)&&"123".equals(password)) {
//告诉浏览器 向某个地址 再次发送数据 属于直接访问
//修改 地址栏上的 路径: http://localhost:8080/servlet/FailureServlet 然后提交
}
}
//服务器调用 doGet / doPost 取决于 请求方式
//请求方式 被封装到了 请求对象中 request.getMethod() ---post
使用该对象调用 初始化方法.
如果不是第一次方式,将不再执行无参构造和初始化方法.
接下来 根据请求方式的不同,选择性调用 doGet /doPost
当关闭服务器时 服务器自动调用销毁方 销毁servlet对象和数据.
请求: 浏览器向服务器发送数据
响应: 服务器向浏览器返回数据
String name=request.getParameter("userName");//根据标签的name属性值 获得 标签的值 <input type="text" name='userName'>
String password=request.getParameter("password");
取出容器中的数据:request.getAttribute("属性名称");
request对象:
1.服务器将客户端的数据封装到 request对象
2.request也作为一个容器对象,存放数据
request容器:
向容器中放入数据:request.setAttribute("属性名称","值"); // 键名--->值
响应: 转发 重定向
转发: 组件A 将未完成的任务 和 请求及响应对象 一同传递给 组件B .
特点:
1. 用户发出请求到获得结果 ,只发送一次数据.
2. 转发属于 服务器端跳转
重定向: 组件A 修改 浏览器的路径 使 浏览器向 组件B 发送请求
1.用户发出请求到获得结果,至少发送两次请求
throws ServletException, IOException {
System.out.println("这是service....");
String method=req.getMethod();
if ("GET".equals(method)) {
doPost(req, resp);
throws ServletException, IOException {
System.out.println("doGet....");
}
//doPost
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
2. 会自动将要传递给服务器的数据 添加到 地址栏 将数据暴漏 . GET请求,参数传递的大小 小于1024B
POST请求: 常见的方式 表单的POST提交 (method="post")
特点:
1.POST请求 服务器会自动调用servlet的 doPost()
2. 不会将要传给服务器的数据添加到地址栏 相对比较安全 理论上参数传递的多少不受限制.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
<!-- 设置这个servlet 在浏览器中访问时 使用的名称,名称任意 通常必须以"/"开头-->
<url-pattern>/a123.html</url-pattern>/
</servlet-mapping>
<!--
http://localhost:8080/servlet/a123.txt
相关文档
最新文档