servlet——2.2Servlet-的service、dopost、doget
创建了一个Servlet
package com.carlinfo.servlet.demo;
import java.io.IOException; import java.io.PrintWriter;
import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;
/** * 测试一下Servlet常见的方法 * @author wangshMac * */ public class HttpMethodServlet extends HttpServlet { @Override public void init() throws ServletException { System.out.println("==init=="); }
@Override public void destroy() { System.out.println("==destroy=="); }
/** * 先访问Service_1 */ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("==service=="); /* 调用父类的方法 * 先调用Service_1 * 后调用doGet或者doPost(); * * 什么时候是post请求,什么时候是get请求: * * post请求必须是:form,不是from; method=post * 其它的全部是get提交 * */ super.service(req, resp); }
@Override protected void doPost(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { System.out.println("==doPost==");
/* dopost和doget合二为一 * 合二为一和Service一般只选一个,两个都使,神经病 * */ this.doGet(req, response); }
/** * 如果页面白了,那是因为女生木有给男生写回信; */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException { System.out.println("==doGet=="); /* * 指定编码,一定要放到第一行 * MIME类型:编码集 * */ response.setContentType("text/html;charset=UTF-8"); /* 如何写回信 * 和我们当年学的io一样 * PrintWriter:是一个字符流 * */ PrintWriter out = response.getWriter() ; /* System.out中的out */ /*out.println("hello,i am reverse"); out.println("我收到了");*/ /* 让文本有一个背景条 * 拼装html * */ String html = "" ;
/* 拼装HTML * 特别的累: * ~木有提示 * ~还得注意格式 * ~木有写css和js * * 需求:如果能够在html文件中写html代码,让servlet直接将html代码返回多得劲!!! * */ html += "<!DOCTYPE html>"; html += "<html>" ; html += " <head>" ; html += " <title>这是回信</title>" ; html += " <head>" ; html += " <body>" ; html += " <p style='background-color:red;font-size:30px;'>我收到了</p>" ; html += " <body>" ; html += "</html>" ;
out.println(html); /* 控控水 */ out.flush(); /* 关闭管子 */ out.close(); } } |
Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>01_servlet_hw</display-name>
<!-- 打开一个XML文件,先格式化 --> <!-- 一个Servlet配置开始 servlet标签和servlet-mapping标签,是通过servlet-name关联起来;servlet-name得一致
servlet-class:开发的Servlet所处的位置(包名+名类);一看到包名+类名; 对象创建有两种方式: 一种是new了一个对象;new 后面跟的是:构造方法 一种反射;Class.forName(包名+类名).newInstance(); --> <servlet> <servlet-name>Hw_01</servlet-name> <servlet-class>com.carlinfo.servlet.demo.Hw_01</servlet-class> <!-- 一旦写了此配置,tomcat一启动就要初始化Servlet 数字指的是:如果有多个Servlet,都要在tomcat启动的时候初始化, 按照数字的大小:从小到大,一一的初始化 --> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Hw_01</servlet-name> <!-- url-pattern:在浏览器地址栏输入的内容,tomcat会调用我们的service方法 --> <url-pattern>/Hw_01</url-pattern> </servlet-mapping> <!-- 一个Servlet配置结束 -->
<!-- 第二个Servlet --> <servlet> <servlet-name>HttpMethodServlet</servlet-name> <servlet-class>com.carlinfo.servlet.demo.HttpMethodServlet</servlet-class> <!-- tomcat一启动就初始化Servlet 配置的值:整数别重复 --> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>HttpMethodServlet</servlet-name> <!-- /表示的是项目的根目录 项目名后面跟着此Servlet --> <url-pattern>/HttpMethodServlet</url-pattern> </servlet-mapping>
<!-- 欢迎文件列表页面 http://192.168.1.2:8080/01_servlet_hw(项目名后面啥也木有写) tomcat会按照welcomefilelist中指定的页面,一个一个的找,如果找到就访问. 找不到就报:404错误(页面未找到)
不配置也可以,但是文件名必须叫做index.html; 如果不是下面列出的文件,需要手工指定; (这下面的文件,写不写都行)
如果想指定一个文件,不在下面的文件中,需要指定 --> <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> </web-app> |
Index.html(首页)--导航页面
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <table border="1" width="80%"> <tr> <td>标题</td> <td>内容</td> </tr> <!-- /:表示的是tomcat根路径;因为tomcat下面可以放很多项目 什么也不写,表示的是相对路径,hw.html所在的路径(WebContent中) --> <tr> <td>hw.html</td> <td><a href="hw.html" target="_blank">hw</a></td> </tr> <tr> <td>第一个Servlet</td> <td><a href="Hw_01" target="_blank">hw_01</a></td> </tr> <tr> <td>第二个Servlet</td> <td><a href="HttpMethodServlet" target="_blank">HttpMethodServlet</a></td> </tr> </table> </body> </html> |
Hw.html:专门用来测试post提交
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> 这是我的第一个html <!-- 提交的路径是Servlet 前面木有写/,默认是相对路径, 如果写了/,默认是tomcat根路径 --> <form action="HttpMethodServlet" method="post"> <input type="submit" value="提交"/> </form> </body> </html> |
总结
特别怕404错误
协议://ip或者域名:端口/项目名/文件的位置 |
协议://ip(域名):端口/项目名/web.xml中servlet对应的url-pattern |