Servlet 创建与入门案例
-
创建一个普通的java类,实现Servlet接口 并重写里面的所有方法
package com.itheima.servlet; import javax.servlet.*; import java.io.IOException; public class Servlet01 implements Servlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { //处理业务逻辑 servletResponse.getWriter().println("这段代码是业务逻辑"); //------------业务代码 5 } @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
但是在使用tomcat直接发布网页需要在web.xml 中配置文件, 即配置Servlet01的类路径和映射路径 配置文件如下:
<servlet> <servlet-name>firstServlet</servlet-name> //路径 <!-- 3 --> <servlet-class>com.ali.servlet.Servlet01</servlet-class> //类路径 <!-- 4 --> </servlet> <!--此段代码应该是这样执行的: 阅览器上输入地址1->通过地址1中的映射路径2 ->找到路径3->再通过路径3找到类路径4->执行类路径4中的代码即上述代码---> 5 <servlet-mapping> <servlet-name>firstServlet</servlet-name> //是上面的firstServlet的映射路径 <!-- 2 --> <url-pattern>/first</url-pattern> //阅览器上输入的地址名 如: http://localhost:8080/first <!-- 1 --> </servlet-mapping>
2.使用GenericServlet优化Servlet接口编程,并且只需要重写你需要用到的方法即可;
注意: 由于GenericServlet为抽象方法并且继承Servlet接口,所以GenericServlet可以实现Servlet的功能,且在继承GenericServlet后其子类必须重写其内部全部的抽象方法,在GenericServlet中 抽象方法只有service方法 所以只需要重写service一个方法即可
package com.itheima.servlet; import javax.servlet.GenericServlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import java.io.IOException; public class Servlet02 extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { servletResponse.getWriter().println("这段代码是业务逻辑"); } }
但是依旧需要在web.xml中配置文件,十分繁琐, 配置文件如下:
<servlet> <servlet-name>secondServlet</servlet-name> <servlet-class>com.ali.servlet.Servlet02</servlet-class> </servlet> <servlet-mapping> <servlet-name>secondServlet</servlet-name> <url-pattern>/second</url-pattern> </servlet-mapping>
3.使用HttpServlet优化GenericServlet接口编程,HttpServlet是GenericServlet的一个子类拥有比GenericServlet更加强大的功能
为什么要使用HttpServlet来优化GenericServlet ????
1.GenericServlet中处理不同的请求都使用service()方法,而HttpServlet会根据不同的请求方式提供不同的方法进行处理。等于是细化了service()方法即doGet()和doPost方法;
2.HttpServlet类中的方法参数为HttpServletRequest对象和HttpServletResponse对象。使用这两个对象的好处在于:
2.1. HttpServletRequest继承了ServletRequest,HttpServletResponse继承了ServletResponse。功能更强大;
2.2. HttpServletRequest和HttpServletResponse为我们提供了很多处理HTTP协议相关的API,HTTP协议正是我们日常生活中使用得比较多的一种协议;
具体使用方法只需要继承HttpServlet即可, 但是注意依旧需要在web.xml中配置文件, 十分繁琐, 配置文件步骤不再重写, 如有需要请参考上述配置文件!!!!
package com.itheima.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Servlet03 extends HttpServlet {
@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请求提交的数据");
}
}
4.使用注解开发我们这里使用的是idea的快捷工具来生成注解
package com.itheima.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("name = "threeServlet", urlPatterns = "/three") // name属性: 相当于web.xml中的<servlet-name>threeServlet</servlet-name>
// urlPatterns属性: 就是web.xml中的<url-pattern>/three</url-pattern>
public class Servlet03 extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
在实际开发中, 这些代码不需要我们写,只需要修改其中参数即可, 以idea为例,方法如下
-
在src的servlet文件夹下创建新的Servlet对象,一般都在src或其子文件夹下创建
2. 输入"Name"的值,点击OK,Name是上述代码中的name属性值,但是我们一般只会用后面的url属性值,所以这个name属性在小编看来就无足轻重了
3. 正常情况下应该会出现上述代码 但是这里小编在后台更改了代码,所以会和大家的显示效果不一样但是很好理解
首先在@WebServlet后面不是name和url属性值,而是直接跟的url,因为在前面也说了,对于小编来说,name属性值并不重要,所以干脆就不写了
其次在doPost方法中调用了doGet方法,这样写有一个好处,就是以后的无论是doGet还是doPost方法都可以写在doGet方法中,因为即使在doGet中写了doPost的方法但是调用方法时在doPost内部还是执行了doGet的方法的
最后这样写的好处就是不用区分请求类型而去选择写在哪个代码块里面,省去了很多时间
4. 关于后台文件的配置(喜欢的同学可以看一下,配置完了以后就会出现上图中的代码格式)
当然goGet中写doPost还是doPost中写doGet都是一样的,也可以不写,因为我的开发需求大多是不要求区分doget和dopost请求的,所以一般我都会写在一个方法里面
我也是个小白, 这是我我刚刚接触到Servlet时候做出自己的一些总结,理论性的东西少了一点, 鄙人能力有限,希望有大神指导,也希望有和我一样的编程爱好者一起讨论,不喜也勿喷,谢谢!