0

これは、私の jsp ページに出力するコードです。ただし、ページに他のコードがあります。この関数を呼び出すと、呼び出された直後にメッセージを出力する必要があります。xhtml ネゴシエーションを使用しているため確認できませんが、/html タグの後に出力されると思われます。

これが私の機能です

public Print(HttpServletRequest request,HttpServletResponse response){
        try{
            response.setContentType("text/html");
            PrintWriter out = response.getWriter();
            out.print("<p>haha</p>");
        }catch(IOException e){
            e.printStackTrace();
        }
    }
};

これは私がそれを呼ぶところです

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Register</title>
</head>

<body>
<%@ page import="com.otrocol.app.*" %>
<%
    Print(request, response);
%>
</body>
</html>

私が思う結果はこんな感じです。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Register</title>
</head>

<body>
</body>
</html>
"haha"

これは私が応答をしたいものです:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <title>Register</title>
    </head>  
    <body>
     "haha"
    </body>
    </html>

これは私が得るエラーです:

ここに画像の説明を入力

4

4 に答える 4

3

JSP は独自の PrintWriter である JspWriter を使用しoutます。したがって、これを (静的) 関数に渡します。そうしないと、2 番目のライターを使用することになり、バッファリングによってすべてがうまくいかなくなります。

また、出力は既に行われているため、関数にコンテンツ タイプを設定しないでください。

JSP の上部は、インポートにも適した場所です。

<%@page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

ライターが1 つある場合、関数は本文の正しい場所に出力されます。

原因についての素晴らしい直感。ところで、関数名は小文字で始めます。

于 2013-05-03T15:01:10.250 に答える
1

それはあなたの質問への直接的な答えではありませんが、あなたがしていることは、たとえそれがうまくいったとしても、あなたに苦痛を与えるだけだと私は信じています. 仕事に適したツールを使用していません。JSPカスタム JSP タグを作成することは、Java コードから書き込むためのより良いオプションです。


コード例:

register.jsp

<%@ taglib prefix="custom" uri="/WEB-INF/custom-tags.tld" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
    <title>Register</title>
</head>
<body>
    <p>
      <c:out value="${custom:printHaha()}" />
    </p>
</body>
</html>

custom-tags.tld

<?xml version="1.0" encoding="UTF-8"?>

<taglib version="2.0" 
        xmlns="http://java.sun.com/xml/j2ee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd">
    <tlibversion>1.0</tlibversion>
    <jspversion>2.0</jspversion>
    <shortname>custom-taglib</shortname>

    <uri>CustomTags</uri>

    <function>
        <name>printHaha</name>
        <function-class>com.yourpackage.Tags</function-class>
        <function-signature>
           java.lang.String print()
        </function-signature>
    </function>

    (...)

タグ.クラス

public class Tags {
    public static String print() {
        return "haha";
    }
}

タグの詳細:公式ドキュメント

于 2013-05-03T15:05:14.213 に答える
0

私はあなたのコードをチェックしません...jspページでget writerを使用してout.printを再度実行することはできません...このリクエストに対する応答は、jspをレンダリングすることによってすでにコミットされているためです

aspで何かを印刷するには、これをさまざまな方法で行うことができます

  1. 式タグで印刷
  1. use out (サーバーが作成するオブジェクト)

    out.print("何とか...");

もっと

jsp に何が起こるかを理解するには、/work/catalina/blah.../ を調べます。

于 2013-05-03T14:52:19.670 に答える
0

2ページあります。1つ目はメインページです。これは、いくつかの疑似計算を実行します。

これらの計算に基づいて、Success.jsp または Failure.jsp が返されます。

このコードは、あなたが達成したかったことを行います.....

他の方が指摘されているように、最近はもっと高度なテクニックもあるとはいえ、それでも踊るにはまず動きを知らなければならない……。

忙しい猫

主にこの cObj.Print(request, response); を見てください。2番目のjspページにあります。

JSPページ

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="java.util.*" %>
<%@ page import="rustler.Beans.Beany" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <title>JSP and JavaBean</title>

        <%-- create an instance of Customer class --%>
        <jsp:useBean id="cObj" scope="request" class="rustler.Beans.Beany">

        <%-- Set the value of attribute such as CustID --%>
        <jsp:setProperty name="cObj" property="*" />
        </jsp:useBean>

    </head>
<body>

<%
            int x=cObj.setStoreCust();

            if(x>=1)
            {
        %>
                <jsp:forward page="Success.jsp" />
        <%

            }
            else
            {
        %>
                <jsp:forward page="Failure.jsp" />
        <%

            }

        %>

</body>
</html>

JSPページ

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<%@ page import="java.util.*" %>
<%@ page import="rustler.Beans.Beany" %>
<%@ page import="javax.servlet.http.HttpServletRequest" %>
<%@ page import="javax.servlet.http.HttpServletResponse" %>



<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Failure!</title>

<%-- create an instance of Customer class --%>
<jsp:useBean id="cObj" scope="request" class="rustler.Beans.Beany">

<%-- Set the value of attribute such as CustID --%>
<jsp:setProperty name="cObj" property="*" />


</jsp:useBean>

</head>
<body>


<%cObj.Print(request, response);%>
</body>
</html>

ジャバビーン

package rustler.Beans;

import java.io.*;
import java.util.*;
import java.sql.*;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Beany implements Serializable
{

    public Beany()
    {

    }
        /**
     * 
     */
    private static final long serialVersionUID = 1L;
        private String custID;
        private String custName;
        private int qty;
        private float price;
        private float total;
        private int storeCust;

        public String getCustID() {
            return custID;
        }

        public void setJunk(String sStr)
        {
            //System.out.println("What a punk!");
            custName = sStr;//"What a punk!";           
        }       

        public void Print(HttpServletRequest request,HttpServletResponse response)
        {
            try{
                response.setContentType("text/html");
                PrintWriter out = response.getWriter();
                out.print("<p>haha</p>");
            }catch(IOException e){
                e.printStackTrace();
            }
        }


        public String prntJunk()
        {
            //System.out.println("What a punk!");
            return custName;//"What a punk!";           
        }

        public void setCustID(String custID) {
            this.custID = custID;
        }

        public String getCustName() {
            return custName;
        }

        public void setCustName(String custName) {
            this.custName = custName;
        }

        public int getQty() {
            return qty;
        }

        public void setQty(int qty) {
            this.qty = qty;
        }

        public float getPrice() {
            return price;
        }

        public void setPrice(float price) {
            this.price = price;
        }

        public float getTotal() {
            return total;
        }

        public void setTotal(float total) {
            this.total = total;
        }

        public int setStoreCust() 
        {
            try{
            Class.forName("com.mysql.jdbc.Driver");
            Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/usermaster","admin","password");
            PreparedStatement pstmt=null;
            String query=null;
            query="insert into customer values(?,?,?,?,?)";
            pstmt=con.prepareStatement(query);
            pstmt.setString(1,custID);
            pstmt.setString(2,custName);
            pstmt.setInt(3,qty);
            pstmt.setFloat(4,price);
            pstmt.setFloat(5,total);
            int i=pstmt.executeUpdate();

            this.storeCust=i;
            }
            catch(Exception e)
            {

            }
            return storeCust;
        }
}
于 2014-01-10T04:38:33.263 に答える