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

家居网站建设咨询数据分析网

家居网站建设咨询,数据分析网,手机编程软件app下载,查公司的软件叫什么2023.10.20 HttpServlet HttpServlet类是专门为HTTP协议准备的。比GenericServlet更加适合HTTP协议下的开发。 http包下都有哪些类和接口呢?(jakarta.servlet.http.*) jakarta.servlet.http.HttpServlet (HTTP协议专用的Servlet…

2023.10.20

HttpServlet

        HttpServlet类是专门为HTTP协议准备的。比GenericServlet更加适合HTTP协议下的开发。

http包下都有哪些类和接口呢?(jakarta.servlet.http.*)

  • jakarta.servlet.http.HttpServlet (HTTP协议专用的Servlet类,抽象类)

  • jakarta.servlet.http.HttpServletRequest (HTTP协议专用的请求对象):封装了请求协议的全部内容。Tomcat服务器(WEB服务器)将“请求协议”中的数据全部解析出来,然后将这些数据全部封装到request对象当中了。

  • jakarta.servlet.http.HttpServletResponse (HTTP协议专用的响应对象)

httpServlet部分源码分析:

public class HelloServlet extends HttpServlet {// 用户第一次请求,创建HelloServlet对象的时候,会执行这个无参数构造方法。public HelloServlet() {}//override 需要前端发送get请求,就重写 doGet方法//override 需要前端发送post请求,就重写 doPost方法
}public abstract class GenericServlet implements Servlet, ServletConfig,java.io.Serializable {// 用户第一次请求的时候,HelloServlet对象第一次被创建之后,这个init方法会执行。public void init(ServletConfig config) throws ServletException {this.config = config;this.init();}// 用户第一次请求的时候,带有参数的init(ServletConfig config)执行之后,会执行这个没有参数的init(),这个init是供程序员重写的。public void init() throws ServletException {// NOOP by default}
}// HttpServlet模板类。
public abstract class HttpServlet extends GenericServlet {// 用户发送第一次请求的时候这个service会执行// 用户只要发送一次请求,这个service方法就会执行一次。@Overridepublic void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {HttpServletRequest  request;HttpServletResponse response;try {// 将ServletRequest和ServletResponse向下转型为带有Http的HttpServletRequest和HttpServletResponserequest = (HttpServletRequest) req;response = (HttpServletResponse) res;} catch (ClassCastException e) {throw new ServletException(lStrings.getString("http.non_http"));}// 调用重载的service方法。service(request, response);}// 这个service方法的两个参数都是带有Http的。// 这个service是一个模板方法。// 在该方法中定义核心算法骨架,具体的实现步骤延迟到子类中去完成。protected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 获取请求方式// 这个请求方式最终可能是:""// 注意:request.getMethod()方法获取的是请求方式,可能是七种之一:// GET POST PUT DELETE HEAD OPTIONS TRACEString method = req.getMethod();// 如果请求方式是GET请求,则执行doGet方法。if (method.equals(METHOD_GET)) {long lastModified = getLastModified(req);if (lastModified == -1) {// servlet doesn't support if-modified-since, no reason// to go through further expensive logicdoGet(req, resp);} else {long ifModifiedSince;try {ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);} catch (IllegalArgumentException iae) {// Invalid date header - proceed as if none was setifModifiedSince = -1;}if (ifModifiedSince < (lastModified / 1000 * 1000)) {// If the servlet mod time is later, call doGet()// Round down to the nearest second for a proper compare// A ifModifiedSince of -1 will always be lessmaybeSetLastModified(resp, lastModified);doGet(req, resp);} else {resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);}}} else if (method.equals(METHOD_HEAD)) {long lastModified = getLastModified(req);maybeSetLastModified(resp, lastModified);doHead(req, resp);} else if (method.equals(METHOD_POST)) {// 如果请求方式是POST请求,则执行doPost方法。doPost(req, resp);} else if (method.equals(METHOD_PUT)) {doPut(req, resp);} else if (method.equals(METHOD_DELETE)) {doDelete(req, resp);} else if (method.equals(METHOD_OPTIONS)) {doOptions(req,resp);} else if (method.equals(METHOD_TRACE)) {doTrace(req,resp);} else {//// Note that this means NO servlet supports whatever// method was requested, anywhere on this server.//String errMsg = lStrings.getString("http.method_not_implemented");Object[] errArgs = new Object[1];errArgs[0] = method;errMsg = MessageFormat.format(errMsg, errArgs);resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);}}protected void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException{// 报405错误String msg = lStrings.getString("http.method_get_not_supported");sendMethodNotAllowed(req, resp, msg);}protected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {// 报405错误String msg = lStrings.getString("http.method_post_not_supported");sendMethodNotAllowed(req, resp, msg);}}

通过以上源代码分析:

        通过以上源代码可以知道:只要HttpServlet类中的doGet方法或doPost方法执行了,必然发生405错误。 所以说 假设前端发送的请求是get请求,而后端程序员重写的方法是doPost , 或者, 假设前端发送的请求是post请求,后端程序员重写的方法是doGet,   那么就会发生405错误。

        为了避免发生405错误,后端程序员希望前端传来什么类型的请求,就应该重写什么类型的方法,如:希望传来get类型的请求,就要重写doGet方法,防止报405错误。

一个Servlet类的开发步骤:

  1. 编写一个Servlet类,直接继承HttpServlet
  2. 重写doGet方法或者重写doPost方法,到底重写谁,看你需要前端传过来什么类型的请求。
  3. 将Servlet类配置到web.xml文件当中。
  4. 准备前端的页面(form表单),form表单中指定请求路径即可。

HttpServletRequest接口

        HttpServletRequest是一个接口,全限定名称:jakarta.servlet.http.HttpServletRequest

HttpServletRequest接口是Servlet规范中的一员,其父接口是:ServletRequest。

HttpServletRequest对象中都有什么信息?都包装了什么信息?

        HttpServletRequest对象是Tomcat服务器负责创建的,里面封装了HTTP的请求协议。

        用户发送请求的时候,遵循了HTTP协议,发送的是HTTP的请求协议,Tomcat服务器将HTTP协议中的信息以及数据全部解析出来,然后Tomcat服务器把这些信息封装到HttpServletRequest对象当中,传给了我们javaweb程序员。

        javaweb程序员面向HttpServletRequest接口编程,调用方法就可以获取到请求的信息了。

HttpServletRequest接口中有哪些常用的方法?

ap<String,String[]> getParameterMap() 这个是获取Map
Enumeration<String> getParameterNames() 这个是获取Map集合中所有的key
String[] getParameterValues(String name) 根据key获取Map集合的value
String getParameter(String name)  获取value这个一维数组当中的第一个元素。这个方法最常用。
// 以上的4个方法,和获取用户提交的数据有关系。

http://www.dinnco.com/news/7080.html

相关文章:

  • 软文营销软文推广深圳知名seo公司
  • 现在最靠谱的购物网站有哪些快速整站排名seo教程
  • 大连网站制作学校怎么在百度做广告
  • 免费网站安全磁力天堂最新版地址
  • 网站建设收费报价表化学sem是什么意思
  • xyz域名做网站好么如何建立网页
  • 阿里云网站方案建设书模板爱站数据官网
  • 软件开发三个主要阶段关键词seo教程
  • 自适应网站教程自己建网站怎样建
  • 厦门微网站建设公司优化搜索引擎的方法
  • 企查查在线查询入口关键词优化工具互点
  • 国外做网站公司能赚钱吗seo快速排名案例
  • 达州住房与建设局网站建站平台如何隐藏技术支持
  • 自适应网站建设专家网站制作公司排名
  • 寮步镇网站仿做推广形式
  • 找人做网站需要什么条件网页游戏推广平台
  • 网站开发与设计试题关键词seo深圳
  • 有没有做企业网站的天津seo外包
  • 做时时彩网站微信平台有哪些渠道推广
  • 海口柏特网络科技有限公司网站推广优化排名seo
  • 企业网站 设计青岛seo网站排名
  • wordpress csv导出乐山网站seo
  • 怎么做私服网站宁波seo教程行业推广
  • 深圳较便宜的网站建设班级优化大师免费下载安装
  • php与H5做网站外贸营销网站建设介绍
  • 海口网站建设在线引擎搜索网站
  • 现在网站用什么语言做最好南宁seo优化公司排名
  • 网站建设文件夹布局传统营销和网络营销的区别
  • 行业网站功能深圳网络营销渠道
  • wordpress获取page id关键词优化公司哪家强