iT邦幫忙

0

html 傳值java

大家好:
想問一下我想重html傳值到java
然後作運算
但是都失敗
n1.jsp的程式

<form action="show.java" method="post">
  <input id="datepicker1" name="datepicker1"type="text" />
  <input id="datepicker2" name="datepicker2" type="text" />
  <button submit="submit">button</button>
</form>

show.java的程式

public class Show {   
    String datepicker1,datepicker2;
    //set & get;
    public void getdata()
    { if(datepicker1....)
      ....
    }

想問用post傳不到java那邊嗎?還是我還少寫了甚麼

0
froce
iT邦大師 5 級 ‧ 2018-02-01 10:18:06
最佳解答

我沒在寫 java,不過...

String datepicker1,datepicker2;
你只定義出這兩個變數出來,沒把 request 接進去啊。
java的 compiler 有人性化到可以自動去找你要的 html 頁面的 form field 嗎?

https://ithelp.ithome.com.tw/articles/10029373

String datepicker1 = request.getParameter("datepicker1");
0
fillano
iT邦超人 1 級 ‧ 2018-02-01 11:07:29

java需要有伺服器端配合啦,而且他並不是直譯式的語言,不可能按你程式寫的這樣跑XD

看更多先前的回應...收起先前的回應...
神威 iT邦新手 3 級 ‧ 2018-02-01 13:15:30 檢舉

你好,我把java改成這樣

public class Show extends HttpServlet {
 String datepicker1,datepicker2;
     @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  datepicker1 = request.getParameter("datepicker1");
    datepicker2 = request.getParameter("datepicker2");
}
}

n1.jsp這樣,但還是沒反應耶

<form action="n1.jsp" method="post">
  <input id="datepicker1" name="datepicker1"type="text" />
  <input id="datepicker2" name="datepicker2" type="text" />
  <button submit="submit">button</button>
</form>
fillano iT邦超人 1 級 ‧ 2018-02-01 14:00:01 檢舉

先開一下瀏覽器的開發工具,看一下瀏覽器有出現什麼訊息。

接下來...你的n1.jsp不會只有這幾行吧?你要他接post,那要看一下你怎麼接。

到這裡,還沒碰到你的java哪。接下來要看你怎麼編譯?還是你用什麼IDE?另外,你的伺服器是什麼?

一步一步來。

神威 iT邦新手 3 級 ‧ 2018-02-01 14:19:30 檢舉

fillano你好:
我使用的是netbean,oracle資料庫,tomcat
按確定後瀏覽器沒出現任何錯誤訊息,只是我的資料被清空
想要的結果還是沒出來而已...
我希望按確定後他可以顯示價錢(EX:1/12-1/14 總銷售金額)
https://ithelp.ithome.com.tw/upload/images/20180201/20102983rArzZp7P1R.jpg
我n1.jsp程式碼

<%@page import="dto.axmt410"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
    Show sh=new Show();       
    List <axmt410> axmt=sh.Getaxmt410();
    double oilre=0,total=0,oilpro=0;
  for(axmt410 num : axmt)
    { switch (num.getOEB04().substring(0,1)) {
                case "3":
                    //油壓
                    if ("T335".equals(num.getOEA01().substring(0, 4))){                    
                       oilre+= num.getOEB14().doubleValue()*num.getOEA24().doubleValue();
			
                    }else
                       oilpro+= num.getOEB14().doubleValue()*num.getOEA24().doubleValue();                   
                    break;		
                default:
                    //零件 其他		   
                    break;
            }        
    }
  out.println("油壓維修:"+oilre);
  out.println("油壓成品:"+oilpro);
  oilre=0;oilpro=0;
%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <link rel="import" href="date.html">
        <title>JSP Page</title>
    </head>
    <body>
<form action="n1.jsp" method="post">
  <input id="datepicker1" name="datepicker1"type="text" />
  <input id="datepicker2" name="datepicker2" type="text" />
  <button submit="submit">button</button>
</form>
    </body>
</html>

以及我show.java

public class Show extends HttpServlet {
    private SessionFactory sessionFactory=HibernateUtil.getSessionFactory();
    private Session session=sessionFactory.openSession(); 
     String datepicker1,datepicker2;
     @Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  datepicker1 = request.getParameter("datepicker1");
    datepicker2 = request.getParameter("datepicker2");
}
    public List Getaxmt410()
    {
	String sql="select a.oea01 as OEA01,b.oeb04 as OEB04,a.oea24 as OEA24,b.oeb14 as OEB14,b.oeb14t as OEB14T "
	    + "FROM oea_file a,oeb_file b,ima_file i "
	    + "where b.oeb01 = a.oea01 and i.ima01 = b.oeb04 and "
	    + "to_char(oea02, 'YYYY-MM-DD') between '" + datepicker1 + "' and '" + datepicker2 + "'"; 
    Query query=session.createSQLQuery(sql).
            setResultTransformer(Transformers.aliasToBean(axmt410.class));   
        return query.list();
    }
}

不知為何這樣還傳不到java

froce iT邦大師 5 級 ‧ 2018-02-01 14:55:55 檢舉

有設路徑嗎?

@WebServlet(urlPatterns={"/PATH"})
神威 iT邦新手 3 級 ‧ 2018-02-01 15:18:38 檢舉

froce
https://ithelp.ithome.com.tw/upload/images/20180201/20102983hy2Xx0Cy19.jpg
是這樣嗎?加了之後還是無反應阿QQ

froce iT邦大師 5 級 ‧ 2018-02-01 15:36:06 檢舉

urlPatterns 是你網站的路徑,並非你專案的路徑。
你總要告訴電腦說你瀏覽到哪個網址,要用哪些程式碼來對應啊。
你看起來寫web應該還是初嘗試,先找篇教學惡補一下吧。

http://www.codedata.com.tw/java/java-tutorial-the-3rd-class-3-servlet-jsp/

神威 iT邦新手 3 級 ‧ 2018-02-01 15:50:50 檢舉

froce,文章我看完了
所以我專案是f
那路徑就是以下,對不對

@WebServlet( 
  urlPatterns={"/f/*"} ,  
  initParams={ 
     @WebInitParam(name = "datepicker1", value = "datepicker1") 
     ,@WebInitParam(name = "datepicker2", value = "datepicker2")
  }
)

但還是不行....

froce iT邦大師 5 級 ‧ 2018-02-01 16:28:39 檢舉

...你應該沒有看懂,要不然就是囫圇吞棗。
我簡介一下網站的流程吧,要不然你搞不清楚。

1.當使用者在 browser 送出一個網址(EX:http://aaa.bbb.com/hello?name=word),伺服器(aaa.bbb.com)會收到 request。
2.伺服器看到網址有/hello的時候,他會去找程式裡的URL設定,那一段是使用者進到 /hello 後該做的事(urlPatterns指的就是這個)。
3.伺服器還會分析你這次的 request 到底送了些什麼東西出來,以這個例子,就是送了一個 GET,你可以用 request.getParameter("name") 接進來,他的值會是world。
4.然後伺服器就會照著你的code去處理你的邏輯,最後送出 render 後的 html code,也就是 response。

拿python的flask來寫個簡短的例子好了。

# 告訴伺服器/hello這個頁面指向下個函式,方法是用GET
@app.route('/hello', methods=['GET'])
# 實際要做的事。
def hello():
    # 假設使用者送了GET進來,就傳回"Hello [name]"
    if request.method == 'GET':
        return "Hello " + request.args.get("name", "")
    # 使用者如果沒傳GET進來的提示。
    else:
        return "Input your name by HTTP GET"

最後,java我真的不熟,能給你的都給你了,看得出來你對web這塊不熟,先去找一篇教學好好弄懂吧。

froce iT邦大師 5 級 ‧ 2018-02-01 16:37:37 檢舉

然後你專案在伺服器上的路徑,只要依照你框架所生成的,框架就會找到。
我不知道java有沒有測試的伺服器,現在的框架通常都會帶有一個簡單的測試伺服器,寫好你的code,然後下個指令,讓測試伺服器跑,你就可以在你的電腦 browser 測試你的網頁了。

神威 iT邦新手 3 級 ‧ 2018-02-02 10:24:15 檢舉

fillano,froce,twluke大大好
報告一下
經過努力,我已經接收到從n1.jsp傳來的值了
但是放進去運算卻沒反應啊!!!!!
https://ithelp.ithome.com.tw/upload/images/20180202/20102983yWLdWa6TTm.jpg
我想要選好日期案確定後,會自動在上面顯示金額
但她卻一直是0.......
show.java

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  datepicker1 = request.getParameter("datepicker1");
    datepicker2 = request.getParameter("datepicker2");
   request.getRequestDispatcher("n1.jsp").forward(request, response);
     Getaxmt410();   
}
public List Getaxmt410()
    {
	String sql="select a.oea01 as OEA01,b.oeb04 as OEB04,a.oea24 as OEA24,b.oeb14 as OEB14,b.oeb14t as OEB14T "
	    + "FROM oea_file a,oeb_file b,ima_file i "
	    + "where b.oeb01 = a.oea01 and i.ima01 = b.oeb04 and "
+ "to_char(oea02, 'YYYY-MM-DD') between '" + datepicker1 + "' and '" + datepicker2 + "'"; 
    Query query=session.createSQLQuery(sql).            setResultTransformer(Transformers.aliasToBean(axmt410.class));   
        return query.list();
    }
Luke iT邦新手 3 級 ‧ 2018-02-02 10:30:52 檢舉

/images/emoticon/emoticon04.gif

fillano iT邦超人 1 級 ‧ 2018-02-02 11:51:48 檢舉

建議先把Java EE Web底層架構了解一下,良葛格的文章不錯:
https://openhome.cc/Gossip/ServletJSP/

神威 iT邦新手 3 級 ‧ 2018-02-05 16:37:03 檢舉

fillanotwlukefroce大大好
經過假日努力研究,良葛格文章有看了,Youtube影片也翻了
發現JSP傳JAVA是不是只能

@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		user = req.getParameter("user");
		if ("a".equals(user)) {	   
			req.setAttribute("result",user);
		} 
		RequestDispatcher  rd = req.getRequestDispatcher("/a.jsp"); 
          rd.forward(req,resp);
	}
 	private void response(HttpServletResponse resp, String msg)
			throws IOException {
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("<t1>" + msg + "</t1>");
		out.println("</body>");
		out.println("</html>");
	}

前端的東西傳到後端只能print+字串
沒辦法放到資料庫去做運算阿...?
請問有沒有什麼方案是能把資料傳到後端去還能做運算的呢?
請大大指點,謝謝

froce iT邦大師 5 級 ‧ 2018-02-05 18:52:46 檢舉

當然不是啦,要不然現在web怎麼會那麼興盛?
你能接到使用者的 request,接著就是把request轉成你程式語言的資料型態做運算,或是儲存到資料庫,或是叫server去做其他的事,最後將資料傳回使用者手上,這才是web的整個流程。

		out.println("<t1>" + msg + "</t1>");

其實這句就已經是在做運算了啊。

神威 iT邦新手 3 級 ‧ 2018-02-06 14:52:14 檢舉

報告各位大大

public List test(String user )
    {
            String sql="select* from product where price > '" + Integer.valueOf(user)+ "'";
	     Query query=session.createSQLQuery(sql).addEntity(Product.class);           
	    return query.list();	     
    }
  
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		String user = req.getParameter("user");
		//Integer.valueOf();
		if (user!=null) {
		   //abc(user);
			response(resp, test(user));
		} 
	}
	
	private void response(HttpServletResponse resp, List msg)
			throws IOException {
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<body>");
		out.println("<t1>" + msg + "</t1>");
		out.println("</body>");
		out.println("</html>");
	}

我似乎傳成功了!!?
但我得到的都是位址,不是值阿
請問要怎樣把他轉成值?
https://ithelp.ithome.com.tw/upload/images/20180206/201029831HLyQAIwPu.png

神威 iT邦新手 3 級 ‧ 2018-02-08 11:06:33 檢舉

froce fillanotwluke大大好:
我成功了,終於知道要怎麼寫了,謝謝各位

1
Luke
iT邦新手 3 級 ‧ 2018-02-01 17:25:16
<form action="show.java" method="post">
  <input id="datepicker1" name="datepicker1"type="text" />
  <input id="datepicker2" name="datepicker2" type="text" />
  <button submit="submit">button</button>
</form>
<form action="n1.jsp" method="post">
  <input id="datepicker1" name="datepicker1"type="text" />
  <input id="datepicker2" name="datepicker2" type="text" />
  <button submit="submit">button</button>
</form>

您的 JSP 上的 form action="xxx.do" 是要將這一頁資訊,傳到伺服機(Tomcat) 上的哪一個
java

若是您要傳給 【 public class Show extends HttpServlet {】
就要去 WEB.config 內設定, xxx.do 對應到 Show.java
Show.java 內 就用 datepicker1 = request.getParameter("datepicker1"); 收到數據

若是您要寫在同一JSP
一樣<% datepicker1 = request.getParameter("datepicker1"); %> 收到數據

JSP 跟JAVA 都會在編譯成 Class
若是您想學java 可以找"良葛格" 這說的很詳細

我要發表回答

立即登入回答