写在前面的话:为什么突然要写一篇这个?因为明天考试要考这个
public class HelloServlet implements Servlet { //处理请求和相应的方法 @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("该已执行"); } //初始化 @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } //销毁 @Override public void destroy() { } }
<!--<servlet>标签给Tomcat配置Servlet程序--> <servlet> <!--<servlet-name>给程序起别名,一般是类名 --> <servlet-name>HelloServlet</servlet-name> <!--<servlet-class>servlet程序的全类名--> <!--<servlet-class>访问HelloServlet中的service方法--> <servlet-class>com.example.Test_service.HelloServlet</servlet-class> </servlet> <!--servlet-mappingServlet配置访问地址--> <servlet-mapping> <!--<servlet-name>告诉服务器当前配置的程序给哪一个服务器使用 --> <servlet-name>HelloServlet</servlet-name> <!-- url-pattern 标签配置访问地址 / 斜杠在服务器解析的时候表示地址为http://ip:port/工程路径 /hello 为http://ip:port/工程路径/hello --> <!--hello的命名要与模块(HelloServlet)有对应关系 --> <url-pattern>/hello</url-pattern> </servlet-mapping>
http://localhost:8080/Test_service_war_exploded/hello // http:// 协议 // localhost:8080 ip地址 // Test_service_war_exploded 工程名 // hello XML文件中‘hello’所对应的类
创建一个HTML表单
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!--请求方法为GET--> <!--填写完整请求响应路径--> <form action="http://localhost:8080/Test_service_war_exploded/hello" method="get"> <input type="submit"> </form> </body> </html>
1. Get是不安全的,因为在传输过程,数据被放在请求的URL中;Post的所有操作对用户来说都是不可见的。
2. Get传送的数据量较小,这主要是因为受URL长度限制;Post传送的数据量较大,一般被默认为不受限制。
3. Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。
4. Get执行效率却比Post方法好。Get是form提交的默认方法。
1.区分GET与POST方法需要在Servlet的实现方法中设置
public class HelloServlet implements Servlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //1.为了使用类型判断方法,需要将servletRequest的类型转换为子类httpservletRequest HttpServletRequest httpservletRequest=(HttpServletRequest) servletRequest; //2.使用类型判断请求方式 String str=httpservletRequest.getMethod(); //3.区分请求处理信息 if(str.equals("POST")) System.out.println("HelloPOST"); else if (str.equals("GET")) System.out.println("HelloGET"); } @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
2.为了进一步区分GET与POST请求,将两种状态封装函数
public class HelloServlet implements Servlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //1.为了使用类型判断方法,需要将servletRequest的类型转换为子类httpservletRequest HttpServletRequest httpservletRequest=(HttpServletRequest) servletRequest; //2.使用类型判断请求方式 String str=httpservletRequest.getMethod(); //3.区分请求处理信息 if(str.equals("POST")) doPost();//直接调用 else if (str.equals("GET")) doGet(); } //4.做GET请求 public void doGet(){ System.out.println("HelloGET"); } //5.做POST请求 public void doPost(){ System.out.println("HelloPOST"); } @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
PS:快速重写类的方法 鼠标点击类后CTRL+O
public class HelloServlet2 extends HttpServlet { //直接在方法里面做处理,不需要重写service方法 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("GET"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { System.out.println("POST"); } }