javaweb Servlet接口寫(xiě)法

接口核心流程

  • java
    • 1.建立Dynamic Web Project項(xiàng)目(javaweb)
    • 2.創(chuàng)建-包-servlet
      • [ ] 3.javaweb加入頭部開(kāi)啟跨域
response.setHeader("Access-Control-Allow-Origin", "*");
  • 4.請(qǐng)求
    • doget 寫(xiě)get請(qǐng)求
      • [ ] 接取數(shù)據(jù)庫(kù)信息
      • [ ] 轉(zhuǎn)成json形式
      • 傳到前臺(tái)
    • dopost 寫(xiě)post請(qǐng)求
  • web
    • 調(diào)取接口
    • error問(wèn)題
dataType: "json"http://傳值類(lèi)型不對(duì)就算成功接取數(shù)據(jù)也會(huì)返回error

1.eclipse 創(chuàng)建項(xiàng)目

Dynamic Web Project

  1. 創(chuàng)建servlet
圖片
package com.niu;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ServletTest
 */
@WebServlet("/ServletTest")
public class ServletTest extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletTest() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        //response.getWriter().append("Served at: ").append(request.getContextPath());
        response.setHeader("Access-Control-Allow-Origin", "*");
  response.setHeader("Content-type", "text/html;charset=UTF-8");        
        response.setCharacterEncoding("UTF-8");     
        /**      * 當(dāng)多線(xiàn)程并發(fā)訪(fǎng)問(wèn)這個(gè)方法里面的代碼時(shí)郊霎,會(huì)存在線(xiàn)程安全問(wèn)題嗎         
         * * i變量被多個(gè)線(xiàn)程并發(fā)訪(fǎng)問(wèn),但是沒(méi)有線(xiàn)程安全問(wèn)題爷绘,因?yàn)閕是doGet方法里面的局部變量书劝,         
         * * 當(dāng)有多個(gè)線(xiàn)程并發(fā)訪(fǎng)問(wèn)doGet方法時(shí),每一個(gè)線(xiàn)程里面都有自己的i變量土至, 各個(gè)線(xiàn)程操作的都是自己的i變量购对,所以不存在線(xiàn)程安全問(wèn)題         
         * * 多線(xiàn)程并發(fā)訪(fǎng)問(wèn)某一個(gè)方法的時(shí)候,如果在方法內(nèi)部定義了一些資源(變量陶因,集合等) 那么每一個(gè)線(xiàn)程都有這些東西骡苞,所以就不存在線(xiàn)程安全問(wèn)題了      
         * */       
        String text = (String) request.getParameter("text");        
        System.out.println("結(jié)果已經(jīng)傳入后臺(tái):" + text);         
        String output = "后臺(tái)返回的結(jié)果加上前臺(tái)的結(jié)果" + text;        
        response.getWriter().write(output);
        
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}
package com.runoob.test;
import java.io.PrintWriter;
import java.sql.*;
import java.util.*;
import java.io.IOException;
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 net.sf.json.JSONArray;
/**
 * Servlet implementation class DatabaseAccess
 */
@WebServlet("/DatabaseAccess")
public class DatabaseAccess extends HttpServlet {
    private static final long serialVersionUID = 1L;
    // JDBC 驅(qū)動(dòng)名及數(shù)據(jù)庫(kù) URL
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    static final String DB_URL = "jdbc:mysql://localhost:3306/myigou?useSSL=false";  
    // 數(shù)據(jù)庫(kù)的用戶(hù)名與密碼,需要根據(jù)自己的設(shè)置
    static final String USER = "root";
    static final String PASS = "23629423";  
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DatabaseAccess() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        Connection conn = null;
        Statement stmt = null;
        // 設(shè)置響應(yīng)內(nèi)容類(lèi)型
        response.setHeader("Access-Control-Allow-Origin", "*");
        response.setContentType("text/html;charset=UTF-8");
        
        try{
            // 注冊(cè) JDBC 驅(qū)動(dòng)器
            Class.forName(JDBC_DRIVER);
            
            // 打開(kāi)一個(gè)連接
            conn = DriverManager.getConnection(DB_URL,USER,PASS);

            // 執(zhí)行 SQL 查詢(xún)
            stmt = conn.createStatement();
            String sql;
            sql = "SELECT address_id, addressinfo, addressarea FROM address";
            
            ResultSet rs = stmt.executeQuery(sql);
            JSONArray jsonData = JSONArray.fromObject(convertList(rs)); 
            System.out.println(jsonData.toString());
            PrintWriter out = response.getWriter();    //把json數(shù)據(jù)傳遞到前端楷扬,記著前端用ajax接收
            out.print(jsonData);
//            response.getWriter().write(rs);
            // 展開(kāi)結(jié)果集數(shù)據(jù)庫(kù)         
            /*while(rs.next()){
                // 通過(guò)字段檢索
                // 通過(guò)字段檢索
                int id  = rs.getInt("address_id");
                String name = rs.getString("addressinfo");
                String url = rs.getString("addressarea");
    
                // 輸出數(shù)據(jù)
                out.println("ID: " + id);
                out.println(", 站點(diǎn)名稱(chēng): " + name);
                out.println(", 站點(diǎn) URL: " + url);
                out.println("<br />");
            }*/
            /*out = response.getWriter();                                
                  */
            // 完成后關(guān)閉
            rs.close();
            stmt.close();
            conn.close();
        } catch(SQLException se) {
            // 處理 JDBC 錯(cuò)誤
            se.printStackTrace();
        } catch(Exception e) {
            // 處理 Class.forName 錯(cuò)誤
            e.printStackTrace();
        }finally{
            // 最后是用于關(guān)閉資源的塊
            try{
                if(stmt!=null)
                stmt.close();
            }catch(SQLException se2){
            }
            try{
                if(conn!=null)
                conn.close();
            }catch(SQLException se){
                se.printStackTrace();
            }
        }
       
        
    }
//  ResultSet rs 轉(zhuǎn)json
    private static List convertList(ResultSet rs) throws SQLException {
        List list = new ArrayList();
        ResultSetMetaData md = rs.getMetaData();
        int columnCount = md.getColumnCount();
        while (rs.next()) {
            Map rowData = new HashMap();
            for (int i = 1; i <= columnCount; i++) {
                rowData.put(md.getColumnName(i), rs.getObject(i));
            }
            list.add(rowData);
        }
        return list;
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

3.編寫(xiě)xml

圖片
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">
    <display-name>gitTest</display-name>
    <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>
    <servlet>
        <servlet-name>default</servlet-name>
        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
        <init-param>
            <param-name>debug</param-name>
            <param-value>0</param-value>
        </init-param>
        <init-param>
            <param-name>listings</param-name>
            <param-value>false</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>ServletDemo1</servlet-name>
        <servlet-class>com.niu.ServletTest</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ServletDemo1</servlet-name>
        <url-pattern>/ajaxtest</url-pattern>
    </servlet-mapping>


</web-app>

4.項(xiàng)目?jī)?nèi)ajax調(diào)取接口

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="js/jquery-2.1.4.min.js"></script>
<meta name="description" content="this is my page">
<meta name="content-type" content="text/html; charset=UTF-8">
<meta charset="UTF-8">
<title>測(cè)試用例</title>
<script type="text/javascript">
function ajaxtest(index) {  
    var datapar = {     
            "text" : $("#input" + index).val(),     
            "index" : index 
            };  
    var options = {     
            url : "ajaxtest",       
            type : "post",      
            data : datapar,     
            success : function(data) {          
                console.log(data);          
            var mytext = $("textarea[id*='output" + index + "']");          
            mytext.val(data);       
            }   
    };  
    $.ajax(options);}
</script>
</head>
<body>
    <h2 id="time">測(cè)試?yán)?lt;/h2>
    <table border="0" align="center">
        <!-- **************************測(cè)試*********************************** -->
        <tr align="center">
            <td width="20%">
                <div>
                    <textarea id="input2" placeholder="前端輸入">haha</textarea>
                </div>
            </td>
            <td width="10%">
                <div>
                    <button onClick=ajaxtest(2)>測(cè)試后臺(tái)</button>
                </div>
            </td>
            <td width="55%">
                <div>
                    <textarea id="output2" placeholder="后臺(tái)輸出"></textarea>
                </div>
            </td>
        </tr>
    </table>
</body>
</html>

5.項(xiàng)目外調(diào)取接口

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>

<body>


    <script src="js/jquery-2.1.4.min.js"></script>
    <script>
        var datapar = {
            "text": "haha",
            "index": 2
        };
        $.ajax({
            type: "post",
            // async: false,
            url: "http://192.168.0.73:8080/servletTest/ajaxtest",
            data: datapar,
            // dataType: "json",
            success: function (data) {
                console.log(data)

            },
            error: function (error) {
                console.log(error.responseText);


            }

        });
    </script>
</body>

</html>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末解幽,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子烘苹,更是在濱河造成了極大的恐慌亚铁,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件螟加,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吞琐,警方通過(guò)查閱死者的電腦和手機(jī)捆探,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)站粟,“玉大人黍图,你說(shuō)我怎么就攤上這事∨樱” “怎么了助被?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)切诀。 經(jīng)常有香客問(wèn)我揩环,道長(zhǎng),這世上最難降的妖魔是什么幅虑? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任丰滑,我火速辦了婚禮,結(jié)果婚禮上倒庵,老公的妹妹穿的比我還像新娘褒墨。我一直安慰自己炫刷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布郁妈。 她就那樣靜靜地躺著浑玛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪噩咪。 梳的紋絲不亂的頭發(fā)上顾彰,一...
    開(kāi)封第一講書(shū)人閱讀 49,730評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音剧腻,去河邊找鬼拘央。 笑死,一個(gè)胖子當(dāng)著我的面吹牛书在,可吹牛的內(nèi)容都是我干的灰伟。 我是一名探鬼主播,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼儒旬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼栏账!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起栈源,我...
    開(kāi)封第一講書(shū)人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤挡爵,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后甚垦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體茶鹃,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年艰亮,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了闭翩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡迄埃,死狀恐怖疗韵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情侄非,我是刑警寧澤蕉汪,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站逞怨,受9級(jí)特大地震影響者疤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜叠赦,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一宛渐、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦窥翩、人聲如沸业岁。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)笔时。三九已至,卻和暖如春仗岸,著一層夾襖步出監(jiān)牢的瞬間允耿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工扒怖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留较锡,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓盗痒,卻偏偏與公主長(zhǎng)得像蚂蕴,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子俯邓,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容