给大家推荐个靠谱的公众号程序员探索之路,大家一起加油
package com.lean.zzh; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class ZzhServlet extends HttpServlet { /** * Constructor of the object. */ public ZzhServlet() { super(); } private ServletConfig config; // 这里重写了父类的init(ServletConfig config)方法 如果没有super.init(config) // 那么 父类的这个方法将失效 父类的这个方法里面还有调用了一下 init() 空参的init() // 所以如果自己还初始化了一些其他的东西那么就会失效 所以 就 自己重新调用一下这空参的init() /* * @Override public void init(ServletConfig config) throws ServletException * { // TODO Auto-generated method stub this.config = config; init(); } */ /** * Destruction of the servlet. <br> */ public void destroy() { super.destroy(); // Just puts "destroy" string in log // Put your code here } /** * The doGet method of the servlet. <br> * * This method is called when a form has its tag value method equals to get. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */ public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); // 第一种: // String username = config.getInitParameter("username"); // String password = config.getInitParameter("password"); // String encoding = config.getInitParameter("encoding"); // 第二种方法获得配置时 会显示500意思就是 空指针异常 为什么呢? // 首先参数是配置好的 不会为空 那么就是getServletConfig()获取config没获取到为空导致的为什么呢 // 因为在上面重写了init(ServletConfig config)方法 会覆盖父类的init(ServletConfig // config)方法 // 导致父类的confing不会再init(ServletConfig config)中初始化 导致父类的config参数为空 // 那么获取时也就为空 // 解决方案不重写这个方法 // String username = getServletConfig().getInitParameter("username"); // String password = getServletConfig().getInitParameter("password"); // String encoding = getServletConfig().getInitParameter("encoding"); // 第三种方式:为什么可以这样用呢 因为底层是这样用的 // 利用适配器设计模式,servlet和servletconfig二者合一,于是servlet就是servletconfig,不用获取 // @Override // public String getInitParameter(String name) { // return getServletConfig().getInitParameter(name); // } String username = getInitParameter("username"); String password = getInitParameter("password"); String encoding = getInitParameter("encoding"); out.print(username + ":" + password + ":" + encoding); System.out.println(username + ":" + password + ":" + encoding); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * The doPost method of the servlet. <br> * * This method is called when a form has its tag value method equals to * post. * * @param request * the request send by the client to the server * @param response * the response send by the server to the client * @throws ServletException * if an error occurred * @throws IOException * if an error occurred */ public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"); out.println("<HTML>"); out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>"); out.println(" <BODY>"); out.print(" This is "); out.print(this.getClass()); out.println(", using the POST method"); out.println(" </BODY>"); out.println("</HTML>"); out.flush(); out.close(); } /** * Initialization of the servlet. <br> * * @throws ServletException * if an error occurs */ public void init() throws ServletException { // Put your code here } }