web01(service,servlet生命周期,ajax)
- 定义Servlet的方法:继承 HttpServlet
- service的作用:
- 根据获取用户请求的方法不同,执行不同的方法
- 浏览器使用get请求方法访问就执行doGet方法,使用post请求方式就执行dopos方法;
- doget方法和dopost方法的区别:
- doget()方法通过将参数名和值追加在请求的URL后面来传递数据。这种方式请求中的参数值是可见的,同时URL对字符数目的限制,限制了用在客户端请求参数值的数目;
- doPost()方法把请求参数值放在请求体,通过post方法传递的敏感信息对外部客户是不可见的,而且可发送的参数的数目是没有限制的。
- get请求方式和post请求方式有什么不同?
- 请求参数的位置:get将请求参数放在URL的查询字符串中,而post将请求参数放在请求体中。
- 请求参数的长度:get将参数放在URL中,请求参数的长度有限制,这取决于HTTP协议以及Web服务器,一般来说不超过2048个字符,而post没有这样的限制,请求体可以包含大量的数据。
- 安全性:get请求可以被缓存,安全性比较低,post请求不可以被缓存,安全性比较高。
- 浏览器地址栏显示:当使用 GET 提交表单时,浏览器地址栏会显示完整的 URL,包括查询字符串。而使用 POST 提交表单时,浏览器地址栏只显示 URL 的路径部分,不显示查询字符串或请求体。
- 对资源的消耗:GET 请求获取资源的方式是通过发送 HTTP 请求从服务器端获取,因此对服务器资源消耗较小。而 POST 请求是将数据发送到服务器端进行处理,因此对服务器的 CPU 和内存等资源消耗较大。
- 对数据的处理:GET 请求通常用于从服务器获取数据(如读取资源),而 POST 请求通常用于向服务器发送数据(如提交表单)。
- request是请求对象,记录了客户请求的所有数据
- 接收参数request.getParameter()
String params_username=request.getParameter("username"); //html的name值 String params_password=request.getParameter("password"); String params_province=request.getParameter( "province");
- 接收参数request.getParameter()
- response是响应对象,将服务器中的数据回应给客户的对象
-
写回响应内容;
response.getWriter().write(response_text);
-
- Java是面向对象的,所有的事务都是对象
- Servlet只有1个实例对象;
- Servlet是线程不安全的;
- 请求转发
- 浏览器发送了一次请求;
- easyE和easyF的request是一个对象;
@WebServlet("/easye") public class EasyEServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("easyf").forward(req, resp);
} - 请求转发可以访问项目中受保护的资源WEB-INF文件夹下的文件;
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.getRequestDispatcher("WEB-INF/form.html").forward(req, resp); }
- 重定向
- 浏览器发送了两次请求;
- 不能访问项目中受保护的资源,要访问本项目内容要写全路径;
- 重定向可以访问到项目外的地址;
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.sendRedirect("https://www.baidu.com"); }
- Servlet生命周期
- 默认在首次被访问时实例化对象,立即执行init方法;
- 可以使用loadOnStartup设置实例化对象顺序;
- loadOnStartup是负数(默认),就在第一次访问时实例化对象;
- loadOnStartup是正数,就在服务器启动时实例化对象,值越小越优先启动;
- 每次执行会执行service方法,然后根据请求方式分别执行doget和dopost方法;
- 服务正常结束会执行destory方法,被动的调用,作用是关闭Servlet对象中的资源;
- servlet的层次结构
- API接口:包含基础的ServletAPI,如javax.servlet.*包下的所有类和接口;
- 容器层:这层处理servlet的生命周期,以及web服务器之间的交互。它包括了servlet容器(如Tomcat),负责加载、初始化、执行和销毁servlet;
- web层:这层处理与web应用相关的功能,如处理http请求,生成动态web页面,生成动态web页面等,它包括web页面;
- servlet的层级结构,常用的类有:
- HttpServlet:这个类是servlet API中的核心类,所有的servlet都应继承这个类;
- servletRequset:这个类代表了客户端发送的HTTP请求,包括请求头、请求参数等;(调用service方法时创建)
- servletResponse:这个类代表了服务器的http响应,可以通过这个类向客户发送数据;(调用service方法时创建)
- HttpSession:这个类用于在多个请求之间保存和获取数据;
- servletContext:这个类提供了关于Web应用的配置信息,以及获取web应用资源的方法;(初始化时创建)
- getParameter和getAttribute的区别
- 获取数据来源不同:getParameter()获取的是客户端设置的数据,比如从浏览器传过来的数据、请求值。getAttribute()获取的是服务器上的数据、转发值,域值对象。
- 返回值类型不同:getParameter()永远返回字符串,而getAttribute()返回值是任意类型。
- 如果需要在服务器端进行跳转,并需要想下个页面发送新的参数时,可以使用setAttribute添加参数值到request对象中,然后用getAttribute来获取。
- ajax
- ajax异步的Javascript和xml 在页面不刷新的时候发送请求;
$('[name="username"]').blur(function(){ //获取该输入框中的内容 var text=$(this).val(); //将改内容发送到服务器 $.ajax({ url:"easyname",//地址 data:{username:text},//传递给服务器的参数 //处理服务器回应的结果 success:function(result){ if(result==0){ alert("用户名可以使用") }else{ alert("用户名被占用") } },//成功访问到服务器,后要执行的代码 error:function(){ alert("服务器开小差了") }//请求失败 404找不到 500服务器报错 503不允许,权限不够 }); - 在java文件获取用户提交的参数;
String param_name=req.getParameter("username"); if("zhangsan".equals(param_name)) { resp.getWriter().write("1"); }else { resp.getWriter().write("0"); }
- jsp (基于java的服务端技术)
- <%@ %>:定义页面依赖属性,比如指定页面编码方式、引入其他文件等。
- <!-- -->:HTML注释;
- <%-- --%>:JSP的注释;
- <% %>:java代码脚本,局部变量声明;
- //:在java代码中的注释;
- <%! %>:类中声明脚本,只能声明,不能调用;
- <%= %>:打印脚本
浙公网安备 33010602011771号