Java Web之BaseServlet的抽取
生活随笔
收集整理的這篇文章主要介紹了
Java Web之BaseServlet的抽取
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Java Web學習的初期,開發的小項目幾乎都是JSP+Servlet+JDBC,長期開發下來,會發現當業務邏輯設計的接口一多的時候,充當控制器的Servlet也會越來越多,但是處理的業務邏輯相對單一。后來學習Struts2或者SpringMVC,發現它們處理起來優雅得多,但是配置起來也比純的Servlet要繁瑣,對于經常做小項目的我來說有點大材小用了,于是我根據前人的經驗抽離了一個BaseServlet,用反射的機制來處理請求,這樣處理業務邏輯的Servlet要相對簡單的多,廢話不說,把自己使用的一套拿出來曬曬。
BaseServlet
由于服務器端經常是用JSON與Android和iOS客戶端進行交互,所以這里返回的就是JSON數據
//這個抽象類,BaseServlet類不需要在web.xml中進行配置 public abstract class BaseServlet extends HttpServlet {// final 防子類復寫public final void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {this.doPost(request, response);}public final void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 1、獲得執行的方法名String methodName = request.getParameter("method");// 默認方法if (methodName == null) {methodName = "execute";}System.out.println("BaseServlet : " + this + " , " + methodName);try {// 2、通過反射獲得當前運行類中指定方法,形式參數Method executeMethod = this.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class);// 3、反射執行方法String result = (String)executeMethod.invoke(this, request, response);// 4、將json數據返回response.getWriter().write(result);} catch (NoSuchMethodException e) {throw new RuntimeException("請求的方法[" + methodName + "]不存在");} catch (Exception e) {e.printStackTrace();throw new RuntimeException("服務器異常", e);}}/*** 此方法用于復寫,方便子類編程,默認執行方法*/public void execute(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {} }真正處理業務邏輯的Servlet
需要做的就是繼承上面的BaseServlet,然后根據業務需求寫自己的方法即可,乍一看像SpringMVC,但是要注意這里的方法名和返回值,方法名決定了請求時的method參數的值,返回值由于是JSON,所以用的是String。
public class UserServlet extends BaseServlet {public String users(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {ArrayList<User> users = new ArrayList<User>();for (int i = 0; i < 10; i++) {User user = new User(i, "zhangsan" + i, i + 10, "wukong" + i);users.add(user);}Gson gson = new Gson();return gson.toJson(users);} }========================================================== //自定義的一個PO public class User {private int id;private String name;private int age;private String nickname;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getNickname() {return nickname;}public void setNickname(String nickname) {this.nickname = nickname;}public User(int id, String name, int age, String nickname) {this.id = id;this.name = name;this.age = age;this.nickname = nickname;} }部署Servlet
將自己的業務UserServlet部署到web.xml,如下:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"version="3.1"><servlet><servlet-name>UserServlet</servlet-name><servlet-class>test.app.api.UserServlet</servlet-class></servlet><servlet-mapping><servlet-name>UserServlet</servlet-name><url-pattern>/UserServlet</url-pattern></servlet-mapping></web-app>訪問Servlet
部署并啟動tomcat以后,打開瀏覽器訪問:http://localhost/AppTestAPI/UserServlet?method=users
結果如下:
總結
以上是生活随笔為你收集整理的Java Web之BaseServlet的抽取的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 提升体验-支持Chrome Custom
- 下一篇: CSS魔法堂:你一定误解过的Normal