直接看我代碼再看解釋就懂了
import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletRequest; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.jboss.weld.context.ApplicationContext; public class ServletLogin extends HttpServlet{ private String username; private String password; /* public void doGet(HttpServletRequest request,HttpServletResponse reponse){ this.username=(String)request.getParameter("username"); this.password=(String)request.getParameter("password"); System.out.println("123"); } public void doPost(HttpServletRequest request,HttpServletResponse reponse){ this.username=(String)request.getParameter("username"); this.password=(String)request.getParameter("password"); System.out.println("456"); }*/ public void init(){ //四個域對象(servletcontext ,Session,Request,page) ServletConfig application=this.getServletConfig();//此對象獲得局部變量 ServletContext application1=this.getServletContext();//此對象獲得全局變量 String username=application.getInitParameter("username"); String password=application.getInitParameter("password"); String var=application1.getInitParameter("var"); String var1=application.getInitParameter("var"); System.out.println(var); System.out.println(var1); System.out.println(password); System.out.println(username); System.out.println("789"); // if(this.username.equals(username)&&this.password.equals(password)) //request.sendRedirect("MyJsp.jsp"); } }
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Xuguang5</display-name>
<!-- 聲明全局變量 -->
<context-param>
<param-name>var</param-name>
<param-value>我是全局變量</param-value>
</context-param>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>ServletLogin</servlet-name>
<servlet-class>ServletLogin</servlet-class>
<!-- 聲明局部變量 -->
<init-param>
<param-name>username</param-name>
<param-value>我是局部變量1</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>我是局部變量2</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>ServletLogin</servlet-name>
<url-pattern>/ServletLogin</url-pattern>
</servlet-mapping>
<!--
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>LoginFilter</filter-class>
<init-param>
<param-name>name</param-name>
<param-value>true1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping> -->
</web-app>
代碼當我把doGet()方法注釋掉后就會出現這種情況,原因是doGet()/doPost()方法主要用於處理表單提交過來的數據,在表單<form></form>中method屬性由於默認的是get方式提交也就是調用doGet()方法,當是method是POST方式提交時就是調用doPost()方法。即使我們沒有編寫jsp,我們直接用URL訪問servlet時發送的時Http請求,servlet默認訪問doGet方法,但是我們程序中沒有重寫父類的doGet()方法,而父類的doGet()方法又不支持這種URL方式,所以出現HTTP method GET is not supported by this URL這種錯誤。只需要重寫doGet方法就可以。
當我們用JSP編寫表單提交數據到servlet時如果我們<form>中的屬性method是設置了doPOST/doGet方法,但是我們servlet還是沒有重寫doPOST/doGet方法還是會出現一樣的問題。如下圖(這里就舉沒有重寫doPOST的形式)


