当前位置: 首页 > news >正文

珠海网站制作渠道株洲网络推广

珠海网站制作渠道,株洲网络推广,在线网站建设,东莞最新网站建设软件文章目录 Servlet APIHttpServlet处理请求 HttpServletRequest打印请求信息前端给后端传参 Servlet API Servlet中常用的API HttpServlet 实际开发的时候主要重写 doXXX 方法, 很少会重写 init / destory / service destory 服务器终止的时候会调用. //下面的注解把当前类和… 文章目录 Servlet APIHttpServlet处理请求 HttpServletRequest打印请求信息前端给后端传参 Servlet API Servlet中常用的API HttpServlet 实际开发的时候主要重写 doXXX 方法, 很少会重写 init / destory / service destory 服务器终止的时候会调用. //下面的注解把当前类和一个HTTP请求的路径关联起来 WebServlet(/hello) public class HelloServlet extends HttpServlet {Overridepublic void init() throws ServletException {//重写init 插入自己初始化相关的逻辑System.out.println(init);}Overridepublic void destroy() {System.out.println(destroy);}Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//这个只是在服务器的控制台打印System.out.println(hello world);//要想把hello world返回到客户端,需要使用下面的代码//getWriter 会得到一个Writer对象resp.getWriter().write(hello world);} }上面的destroy能不能被执行到有待商榷,如果是通过Smart Tomcat 的停止按钮,这个操作本质上是通过Tomcat的8005端口,主动停止,可以触发destroy.如果是直接杀进程,此时可能就来不及执行destroy就没了.因此不太推荐使用destroy. service每次收到http请求就出触发(路径匹配) Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.service(req, resp);}init / destory / service 这三个方法是HttpServlet中最关键的三个方法. Servlet的声明周期是怎么回事? 开始的时候执行init每次收到请求执行service销毁之前执行destroy 处理请求 WebServlet(/method) public class MethodServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(doGet);resp.getWriter().write(doGet);}Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(doPost);resp.getWriter().write(doPost);}Overrideprotected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(doPut);resp.getWriter().write(doPut);}Overrideprotected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(doDelete);resp.getWriter().write(doDelete);} } 我们刷新页面只有doGet请求,想要获得别的请求可以利用postman这个软件来实现: 也可以通过ajax来构造请求:先在webapp目录下创建test.html. !DOCTYPE html html langen headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/title /head body!-- 使用这个页面来构造ajax请求 --script srchttps://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.min.js/scriptscript$.ajax({type: get,url: method,success: function(body, status){console.log(body);}});/script /body /html然后重启服务器,在网址栏输入:http://127.0.0.1:8080/hello_servlet/test.html然后刷新在控制台就能看到doGet请求了.想要获取别的请求,直接在代码中改就可以了,需要注意的是我们在编写Servlet代码的时候,每次修改代码,要及得重新启动服务器. 此处写的路径是相对路径,相对路径的基准目录是该html所在的路径.此处写method就相当于在http://127.0.0.1:8080/hello_servlet的基础上,再拼上一个method 绝对路径的写法: HttpServletRequest 这个类表示的是HTTP请求.这个对象是Tomcat自动构造的,Tomcat会实现监听端口,接受连接,解析请求,构造请求对象等一系列工作. 下面的表格就是一些典型的方法: 方法描述String getProtocol()返回请求协议的名称和版本String getMethod()返回请求的 HTTP 方法的名称例如GET、POST 或 PUTString getRequestURI()从协议名称直到 HTTP 请求的第一行的查询字符串中返回该请求的 URL 的一部分String getContextPath()返回指示请求上下文的请求 URI 部分String getQueryString()返回包含在路径后的请求 URL 中的查询字符串Enumeration getParameterNames()返回一个 String 对象的枚举包含在该请求中包含的参数的名称String getParameter(Stringname)以字符串形式返回请求参数的值或者如果参数不存在则返回nullString[] getParameterValues(String name)返回一个字符串对象的数组包含所有给定的请求参数的值如果参数不存在则返回 nullEnumeration getHeaderNames()返回一个枚举包含在该请求中包含的所有的头名String getHeader(String name)以字符串形式返回指定的请求头的值String getCharacterEncoding()返回请求主体中使用的字符编码的名称String getContentType()返回请求主体的 MIME 类型如果不知道类型则返回 nullint getContentLength()以字节为单位返回请求主体的长度并提供输入流或者如果长度未知则返回 -1InputStream getInputStream()用于读取请求的 body 内容. 返回一个 InputStream 对象 打印请求信息 WebServlet(/showRequest) public class ShowRequestServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应的 content-type 告诉浏览器 响应的body里的格式是啥样的resp.setContentType(text/html);//搞个 StringBuilder 把这些api的结果拼起来,统一写回到响应中StringBuilder stringBuilder new StringBuilder();stringBuilder.append(req.getProtocol());stringBuilder.append(br);stringBuilder.append(req.getMethod());stringBuilder.append(br);stringBuilder.append(req.getRequestURI());stringBuilder.append(br);stringBuilder.append(req.getContextPath());stringBuilder.append(br);stringBuilder.append(req.getQueryString());stringBuilder.append(br);//获取到 header 中所有的键值对EnumerationString headerNames req.getHeaderNames();while (headerNames.hasMoreElements()){String headerName headerNames.nextElement();stringBuilder.append(headerName : req.getHeader(headerName));stringBuilder.append(br);}resp.getWriter().write(stringBuilder.toString());} }在浏览器通过 URL http://127.0.0.1:8080/hello_servlet/showRequest 访问, 可以看到: 前端给后端传参 1.通过GET里的query string 在前端给后端传两个数字,一个是同学的studentId,一个是classId WebServlet(/getParameter) public class GetParameterServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//预期浏览器会发一个形如 /getParameter?studentId10classId20 这样的请求// 借助req 里的 getParameter方法就能拿到 query string 中的键值对内容//getParameter 得到的是 String 类型的结果String studentId req.getParameter(studentId);String classId req.getParameter(classId);resp.setContentType(text/html);resp.getWriter().write(studentId studentId classId classId);} }如果key在query string中不存在,此时就返回值就是null 2.通过POST,借助form表单的方式 对于前端是form表单这样格式的数据(也是键值对,和query string的格式一样,只是这部分内容在body中),后端还是使用getParameter来获取. 前端代码: !DOCTYPE html html langen headmeta charsetUTF-8meta nameviewport contentwidthdevice-width, initial-scale1.0titleDocument/title /head bodyform actionpostParameter methodpostinput typetext namestudentIdinput typetext nameclassIdinput typesubmit value提交/form /body /html后端代码: WebServlet(/postParameter) public class PostParameterServlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {String studentId req.getParameter(studentId);String classId req.getParameter(classId);resp.setContentType(text/html);resp.getWriter().write(studentId studentId classId classId);} }使用getParameter 既可以获取到query string 中的键值对,也可以获取到form表单构造的body中的键值对. 3.POST里的json json是一种非常主流的数据格式,也是键值对结构. 我们可以把body按照这个格式来组织.前端可以通过ajax的方式来构造出这个内容,更简单的方法使用postman直接构造. 后端代码: WebServlet(/postParameter2) public class PostParameter2Servlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//通过这个方法来处理 body 为 json 格式的数据//直接把 req 对象里 body 完整的读取出来//getInputStream// 在流对象中读多少字节取决于Content-Lengthint length req.getContentLength();byte[] buffer new byte[length];InputStream inputStream req.getInputStream();inputStream.read(buffer);//把这个字节数组构造成 String 打印出来String body new String(buffer,0,length,utf8);System.out.println(body body);resp.getWriter().write(body);} }然后在postman那块点击Send请求,服务器也相对应打印出了从body中读出的数据. 总结:借助postman构造出post请求,body就是json数据,请求到达Tomcat,Tomcat解析成req对象,再通过req.getInputStream读取body内容,把读出的结果构造成响应往回写,最后postman客户端收到了对应的结果. 当前通过json传递数据,但是服务器这边只是把整个body读出来,没有按照键值对的方式来处理,还不能根据key获取value,为了解决这个问题,我们可以使用jackson第三方库. 通过maven引入第三方库: 将所选的内容粘贴到pom.xml当中: 然后上面的后端代码就需要改变: class Student{public int studentId;public int classId; } WebServlet(/postParameter2) public class PostParameter2Servlet extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {Student student objectMapper.readValue(req.getInputStream(),Student.class);System.out.println(student.studentId , student.classId);} }
http://www.w-s-a.com/news/774724/

相关文章:

  • 商城网站建设报价方案导师让做网站
  • 清远市企业网站seo联系方式动易官方网站
  • 手机上怎么做能打开的网站一级域名和二级域名跨域
  • 网站首页效果图wordpress 在线教育
  • 电商网站开发团队广西桂林商贸旅游技工学校
  • 网站模板文件怎么下载东莞常平镇邮政编码
  • 建网站需要什么wordpress误删的后果
  • wordpress无插件实现网站地图做阿里巴巴网站店铺装修费用
  • 英文互动网站建设南宁住房和城乡建设局网站
  • 威海微网站建设乐清建网站哪家强
  • 网站和app的开发成本saas系统开发教程
  • ps切片工具做网站大气简洁网站
  • 网至普的营销型网站建设wordpress邮箱验证插件下载
  • 找权重高的网站方法张家港早晨网站建设
  • WordPress数据库添加管理员关键词优化举例
  • 河南国基建设集团--官方网站wordpress qode
  • 做农村电子商务的网站有哪些内容静态网站模板古典
  • 导航网站设计方案个人网站推广方法
  • 网站排名易下拉教程防wordpress花园
  • 计算机网站建设 是什么意思现在网站建站的主流语言是什么
  • php网站跟随导航西安百姓网免费发布信息网
  • 濮阳做公司网站html5 特效网站
  • ppt设计器怎么打开深圳seo网络推广营销
  • 建设银行网站用360浏览器建设信用卡中心网站
  • 创建公司网站 教程广州建设局
  • 详述网站建设的过程简答题ui培训设计怎么样
  • 动易网站官网ppt主题大全素材
  • 怎样用eclipse做网站可以做宣传图的网站
  • 哪里可以做游戏视频网站做网站平台应该注意哪些
  • 网站后期推广是谁来做网页制作步骤作答题