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

寻找五屏网站建设宁波网站建设招商加盟

寻找五屏网站建设,宁波网站建设招商加盟,怎么做百度网站免费的,海淀做网站设计的公司目录 前言 HttpServlet HttpServletRequest 代码实例 打印请求信息 通过URL中的queryString进行传递。 通过post请求的body#xff0c;使用form表单传递 通过POST 请求中的 body 按照 JSON 的格式进行传递 HttpServletResponse 核心方法代码实例 设置状态码 自动刷…目录 前言 HttpServlet HttpServletRequest 代码实例 打印请求信息 通过URL中的queryString进行传递。 通过post请求的body使用form表单传递 通过POST 请求中的 body 按照 JSON 的格式进行传递 HttpServletResponse 核心方法代码实例 设置状态码 自动刷新 重定向 总结 前言 Servlet的API是非常多的但是我们只需要重点掌握三个类即可!!! HttpServletHttpServletRequestHttpServletResponse HttpServlet 我们在写Servlet代码的时候第一步都是先创建一个类然后让这个类去继承HttpServlet并重写其中的某些方法。那么我们就需要知道HttpServlet这个类中都有那些方法都是干啥的。 方法名称调用时机init在HttpServlet实例化之后被调用一次destroy在HttpServlet实例之后不再使用的时候调用一次service在收到HTTP请求时调用doGet在收到get请求的时候由service调用doPost在收到post请求的时候由service调用doPut/doDlete/......在收到其他请求时由service调用 WebServlet(/hello1) public class HelloServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println(hello world);resp.getWriter().write(hello);} }init() HttpServlet被实例化之后会调用一次使用这个方法来做一些初始化的工作。 需要注意的是init方法不是被实例化的时候调用而是首次收到请求的时候调用。 这个请求就会触发HelloServlet类的doGet方法的执行。但是会在执行doGet方法之前先调用init方法。 init方法的调用时机 只会在首次收到请求的时候调用一次等下次再次收到请求就不会再调用init方法了。也就是说init方法在Servlet整个生命周期中只会调用一次。 destroy() 这个方法时在HttpServlet实例销毁之前调用一次来做一些收尾工作。 这个方法需要注意的是如果通过Servlet的管理端口8005来停止Servlet服务此时的destroy方法就会执行如果要是通过直接杀死进程的方式来停止Servlet服务那么destroy就不会执行。 service() service方法是当收到一个路径匹配的请求时就会执行一次。 我们的doGet/doPost/doDelete....等方法都是在service方法中进行调用的。 所以我们在重写方法的时候一般不会去重写service方法而是重写doXXX方法。 一道面试题Servlet的生命周期 上述方法的调用时机就成为Servlet的生命周期。 HttpServletRequest 这个类对应一个HTTP请求一个HTTP请求中有什么这个类中就有什么。 这个类中的方法是比较多的但是都比较清晰。 方法描述String getProtocol()返回请求协议的名称和版本。String getMethod()返回请求的 HTTP 方法的名称例如GET、POST 或 PUT。String getRequestURI()从协议名称直到 HTTP 请求的第一行的查询字符串中返回该请 求的 URL 的一部分。String getContextPath()返回指示请求上下文的请求 URI 部分。String getQueryString()返回包含在路径后的请求 URL 中的查询字符串。Enumeration getParameterNames()返回一个 String 对象的枚举包含在该请求中包含的参数的名 称。String getParameter(String name)以字符串形式返回请求参数的值或者如果参数不存在则返回 null。String[] getParameterValues(String name)返回一个字符串对象的数组包含所有给定的请求参数的值如 果参数不存在则返回 null。Enumeration getHeaderNames()返回一个枚举包含在该请求中包含的所有的头名。String getHeader(String name)以字符串形式返回指定的请求头的值。String getCharacterEncoding()返回请求主体中使用的字符编码的名称。String getContentType()返回请求主体的 MIME 类型如果不知道类型则返回 null。int getContentLength()以字节为单位返回请求主体的长度并提供输入流或者如果长 度未知则返回 -1。InputStream getInputStream()用于读取请求的 body 内容. 返回一个 InputStream 对象. 代码实例 打印请求信息 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.Enumeration;WebServlet(/ShowRequest) public class ShowRequest extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {StringBuilder result new StringBuilder(); //使用StringBuilder来显示请求的内容result.append(req.getProtocol()); //请求的协议和版本result.append(br);result.append(req.getMethod()); //请求的方法result.append(br);result.append(req.getRequestURI()); //请求的uri 唯一资源标识符result.append(br);result.append(req.getQueryString()); //请求的queryStringresult.append(br);result.append(req.getContextPath()); //请求URL的上下文路径result.append(br);result.append(br);EnumerationString headerNames req.getHeaderNames(); //请求的header头名返回值是一个枚举类型while (headerNames.hasMoreElements()) { //遍历这个headerNames枚举对象//header中是一个个的键值对String headerName headerNames.nextElement(); //获取到header中键值对的键String headerValue req.getHeader(headerName); //通过键值对中的键获取到对应的值result.append(headerName: headerValuebr);}//设置响应到浏览器的类型和字符格式resp.setContentType(text/html;charsetutf8);//把响应写会浏览器resp.getWriter().write(result.toString());} }上述在进行append的时候我们并不是使用的\n来表示换行因为我们返回的String在浏览器页面上是以HTML的格式进行解析的所以我们要想换行就得使用HTML中的换行标签。 EnumerationString headerNames req.getHeaderNames(); //请求的header头名返回值是一个枚举类型while (headerNames.hasMoreElements()) { //遍历这个headerNames枚举对象//header中是一个个的键值对String headerName headerNames.nextElement(); //获取到header中键值对的键String headerValue req.getHeader(headerName); //通过键值对中的键获取到对应的值result.append(headerName: headerValuebr);} 上述代码则是把整个header中内容全部拼接到stringbuilder中  下面来看看运行结果。 接下来介绍下一组API  获取get请求中的值 前端先后端传递值的方法有多种。 通过URL中的queryString进行传递。 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;WebServlet(/getParameter) public class getParameter extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//前端通过URL中的query String 来传递username和password两个属性String username req.getParameter(username);if (username null) {System.out.println(username 这个key在queryString中不存在);}String password req.getParameter(password);if (password null) {System.out.println(password 这个key在queryString中不存在);}System.out.println(username username password password);resp.getWriter().write(ok);} }我们知道QueryString是键值对的方式来向后端传递数据的。  比如前端通过QueryString的方式传递username和password两个属性。我们要获取这两个属性中对于的value。就可以通过getParameter(方法来获取键对应的值。 下面我们运行程序来看效果。 我们在URL中通过QueryString的方法向后端传递了两个键值对分别是usernamezhangsan, password123。 可以看出后端在控制台成功的输出了这两个键对应的值。 通过post请求的body使用form表单传递 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;WebServlet(/getParameter) public class getParameter extends HttpServlet {Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding(utf8);//前端通过body form表单 传递username和passwordString username req.getParameter(username);if (username null) {System.out.println(username 这个key在queryString中不存在);}String password req.getParameter(password);if (password null) {System.out.println(password 这个key在queryString中不存在);}System.out.println(username username password password);resp.getWriter().write(ok);} } 我们通过Postman来构造通过form表单传递数据的请求。 可以看出服务器成功的返回了一个ok。这个OK并不能代表什么我们来看看服务器控制台的输出。 服务器也成功的打印出来了对应的value。 通过POST 请求中的 body 按照 JSON 的格式进行传递 我们需要引入 Jackson 这个库, 进行 JSON 解析。 1在Maven中央仓库搜索Jackson选择Jackson Databind 然后选择版本2.15.0 2把中央仓库中的依赖配置添加到 pom.xml 中, 形如 !--Jackson依赖用来前端通过JSON发送数据 后端进行JSON解析--!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.15.0/version/dependency 然后就可以编写代码了。  import com.fasterxml.jackson.databind.ObjectMapper;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;class User {public String username;public String password; } WebServlet(/JSON) public class JsonServlet extends HttpServlet { // 创建 ObjectMapper 对象. 这个是 Jackson 中的核心类public ObjectMapper objectMapper new ObjectMapper();Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//通过post请求的body传递过来一个JSON格式请求的字符串 // 通过 readValue 方法把 body 这个字符串转成 User对象User user objectMapper.readValue(req.getInputStream(), User.class);System.out.println(username user.username , passworduser.password);resp.getWriter().write(ok);} }可以看出我们代码中用多了一个User类这个类用于解析生成后的JSON对象这个类中的属性名字要和传递过来的key对应。 User user objectMapper.readValue(req.getInputStream(), User.class);通过反射的机制把body中的key对应的value全部放在User对象中去这就是为什么User类的属性和类型、名称都要和body中的key保持一致的原因。 然后就可以通过user对象来获取到username和password两个属性的value了。 下面我们运行代码看效果 我们通过Postman构造了JSON的请求并发送服务器也成功的响应了。 接下来我们看服务器控制台输出的内容。 服务器也是成功的获取到了key对应的value。 HttpServletResponse 这个类是一个HTTP的响应一个响应中有什么这个类中就有什么。 Servlet中的doXXX方法就是根据请求计算响应然后把响应的数据写回到HttpServletResponse这个对象中。 然后Tomcat会把这个对象按照HTTP协议相应的格式转成一个字符串并通过socket写回给浏览器。 方法描述void setStatus(int sc)为该响应设置状态码。void setHeader(String name, String value)设置一个带有给定的名称和值的 header. 如果 name 已经存在, 则覆盖旧的值.void addHeader(String name, String value)添加一个带有给定的名称和值的 header. 如果 name 已经存在, 不覆盖旧的值, 并列添加新的键值对void setContentType(String type)设置被发送到客户端的响应的内容类型。void setCharacterEncoding(String charset)设置被发送到客户端的响应的字符编码MIME 字符集例如 UTF-8。void sendRedirect(String location)使用指定的重定向位置 URL 发送临时重定向响应到客户端。PrintWriter getWriter()用于往 body 中写入文本格式数据.OutputStream getOutputStream()用于往 body 中写入二进制格式数据. 核心方法代码实例 设置状态码 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;WebServlet(/status) public class Status extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setStatus(200); //给响应设置状态码resp.setContentType(text/html; charsetutf8);resp.getWriter().write(返回设置状态码200);} }服务器返回数据下面我们通过fiddler来抓包看看。 可以看到状态码确实设置为了200。 自动刷新 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;WebServlet(/Refresh) public class RefreshServlet extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//在响应里面设置自动刷新字段 1秒刷新一次resp.setHeader(refresh,1);resp.getWriter().write(time System.currentTimeMillis()); //记录当前时间戳} }此时就会每隔一秒刷新一次页面。 重定向 import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;WebServlet(/redirect) public class Redirect extends HttpServlet {Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//当用户访问这个路径的时候自动重定向到百度的主页resp.setStatus(302); //设置重定向状态码302resp.setHeader(location,https://www.baidu.com);} }当我们在地址栏输出URL时就会重定向到百度的页面。 总结 以上就是Servlet API的讲解不足之处希望各位大佬多多指教。
文章转载自:
http://www.morning.rqfkh.cn.gov.cn.rqfkh.cn
http://www.morning.rltw.cn.gov.cn.rltw.cn
http://www.morning.wdxr.cn.gov.cn.wdxr.cn
http://www.morning.zdbfl.cn.gov.cn.zdbfl.cn
http://www.morning.qstkk.cn.gov.cn.qstkk.cn
http://www.morning.swyr.cn.gov.cn.swyr.cn
http://www.morning.rnrwq.cn.gov.cn.rnrwq.cn
http://www.morning.fgppj.cn.gov.cn.fgppj.cn
http://www.morning.xfyjn.cn.gov.cn.xfyjn.cn
http://www.morning.klyzg.cn.gov.cn.klyzg.cn
http://www.morning.bqyb.cn.gov.cn.bqyb.cn
http://www.morning.yrskc.cn.gov.cn.yrskc.cn
http://www.morning.tzkrh.cn.gov.cn.tzkrh.cn
http://www.morning.wnjwb.cn.gov.cn.wnjwb.cn
http://www.morning.cyfsl.cn.gov.cn.cyfsl.cn
http://www.morning.bmjfp.cn.gov.cn.bmjfp.cn
http://www.morning.xnymt.cn.gov.cn.xnymt.cn
http://www.morning.sxjmz.cn.gov.cn.sxjmz.cn
http://www.morning.bbgr.cn.gov.cn.bbgr.cn
http://www.morning.nhlnh.cn.gov.cn.nhlnh.cn
http://www.morning.mqbdb.cn.gov.cn.mqbdb.cn
http://www.morning.wypyl.cn.gov.cn.wypyl.cn
http://www.morning.tktyh.cn.gov.cn.tktyh.cn
http://www.morning.wmsgt.cn.gov.cn.wmsgt.cn
http://www.morning.zbmcz.cn.gov.cn.zbmcz.cn
http://www.morning.mlckd.cn.gov.cn.mlckd.cn
http://www.morning.dfqmy.cn.gov.cn.dfqmy.cn
http://www.morning.hbfqm.cn.gov.cn.hbfqm.cn
http://www.morning.fy974.cn.gov.cn.fy974.cn
http://www.morning.kkrnm.cn.gov.cn.kkrnm.cn
http://www.morning.lznfl.cn.gov.cn.lznfl.cn
http://www.morning.zwckz.cn.gov.cn.zwckz.cn
http://www.morning.nkqxb.cn.gov.cn.nkqxb.cn
http://www.morning.kcyxs.cn.gov.cn.kcyxs.cn
http://www.morning.sqmlw.cn.gov.cn.sqmlw.cn
http://www.morning.gjws.cn.gov.cn.gjws.cn
http://www.morning.yckwt.cn.gov.cn.yckwt.cn
http://www.morning.fjptn.cn.gov.cn.fjptn.cn
http://www.morning.ckntb.cn.gov.cn.ckntb.cn
http://www.morning.rrxmm.cn.gov.cn.rrxmm.cn
http://www.morning.nrxsl.cn.gov.cn.nrxsl.cn
http://www.morning.kwksj.cn.gov.cn.kwksj.cn
http://www.morning.jcbmm.cn.gov.cn.jcbmm.cn
http://www.morning.ktcfl.cn.gov.cn.ktcfl.cn
http://www.morning.xxiobql.cn.gov.cn.xxiobql.cn
http://www.morning.wtxdp.cn.gov.cn.wtxdp.cn
http://www.morning.bhjyh.cn.gov.cn.bhjyh.cn
http://www.morning.yrhpg.cn.gov.cn.yrhpg.cn
http://www.morning.grnhb.cn.gov.cn.grnhb.cn
http://www.morning.njqpg.cn.gov.cn.njqpg.cn
http://www.morning.xylxm.cn.gov.cn.xylxm.cn
http://www.morning.nrqnj.cn.gov.cn.nrqnj.cn
http://www.morning.tndhm.cn.gov.cn.tndhm.cn
http://www.morning.brrxz.cn.gov.cn.brrxz.cn
http://www.morning.rwqj.cn.gov.cn.rwqj.cn
http://www.morning.rnmmh.cn.gov.cn.rnmmh.cn
http://www.morning.kfmnf.cn.gov.cn.kfmnf.cn
http://www.morning.qxbsq.cn.gov.cn.qxbsq.cn
http://www.morning.kqgqy.cn.gov.cn.kqgqy.cn
http://www.morning.nbnq.cn.gov.cn.nbnq.cn
http://www.morning.tnrdz.cn.gov.cn.tnrdz.cn
http://www.morning.zgqysw.cn.gov.cn.zgqysw.cn
http://www.morning.tlbhq.cn.gov.cn.tlbhq.cn
http://www.morning.zrdqz.cn.gov.cn.zrdqz.cn
http://www.morning.sltfk.cn.gov.cn.sltfk.cn
http://www.morning.wjwfj.cn.gov.cn.wjwfj.cn
http://www.morning.prjns.cn.gov.cn.prjns.cn
http://www.morning.cwskn.cn.gov.cn.cwskn.cn
http://www.morning.tkxr.cn.gov.cn.tkxr.cn
http://www.morning.chehb.com.gov.cn.chehb.com
http://www.morning.wwznd.cn.gov.cn.wwznd.cn
http://www.morning.fwnyz.cn.gov.cn.fwnyz.cn
http://www.morning.qrqdr.cn.gov.cn.qrqdr.cn
http://www.morning.fbfnk.cn.gov.cn.fbfnk.cn
http://www.morning.jmnfh.cn.gov.cn.jmnfh.cn
http://www.morning.bxch.cn.gov.cn.bxch.cn
http://www.morning.sqmbb.cn.gov.cn.sqmbb.cn
http://www.morning.hympq.cn.gov.cn.hympq.cn
http://www.morning.jmmz.cn.gov.cn.jmmz.cn
http://www.morning.gwwtm.cn.gov.cn.gwwtm.cn
http://www.tj-hxxt.cn/news/239052.html

相关文章:

  • 池州网站建设公司网站建设英文怎么写
  • 成都手机网站建设哪做有奖竞猜网站违法吗
  • 网站建设用什么网站建设 部署与发布
  • 北京网站建设建站公司深圳营销型网站建设电话
  • 广州哪家公司做网站好itc 做市场分析的网站
  • 桂林公司做网站双峰网站建设
  • 孝感个人网站建设利用wordpress开发的官网
  • 网站用图片西安网站到首页排名
  • 太原做网站个人淘货铺
  • 阿里云从哪里建设网站在线制作插画网站
  • 类似聚划算的网站怎么建设h5浏览器
  • 常州专门做网站的公司有哪些滨州做网站
  • 300网站建设p2p网站设计
  • 棋牌游戏网站建设费用网站改版设计方案
  • 嘉兴网站推广如何利用网站做淘宝联盟
  • 南京网站维护教育门户网站模板
  • wordpress 账号插件知名seo电话
  • 做企业网站设计手机站网站广告销售怎们做
  • 网站推送怎么做的天河区做网站的公司
  • 郑州网站建浙江网站建设价格低
  • 网站建设开题报告pptwordpress中文优化版
  • 做网站被骗通过网站如何做海外贸易
  • 网站建设培训中心苏州精品网站建设
  • 网站开发合同 黑客攻击条款用node.js可以做网站吗
  • 网站域名的根目录在哪里深圳建设工程交易服务
  • 微信公众号授权给网站php5 mysql网站开发实例精讲
  • 网站关键词没有指数企业网站模板 下载
  • 江苏省建设工程考试网站定制的网站源码
  • 棠下手机网站建设报价wordpress 用户积分系统
  • 网站做外链好嘛企业网站开发 文献综述