PrintWriter输出到body标签内的jsp页面

时间:2013-05-03 14:43:54

标签: java jsp web-applications httpresponse

这是要打印到我的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>

这是我得到的错误:

enter image description here

4 个答案:

答案 0 :(得分:3)

JSP使用自己的PrintWriter,即JspWriter out。所以将它传递给(静态)函数。 否则你正在接受第二个作家,并且缓冲一切都会变得混乱。

另外,由于输出已经发生,所以不要在函数中设置内容类型。

在JSP的顶部是一个不错的位置,也适用于导入。

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

一个编写器时,该函数将在正文中的正确位置打印。

关于事业的直觉很好。 BTW用小写字母开始一个函数名称。

答案 1 :(得分:1)

这不是你问题的直接答案,但我相信你所做的事情会让你感到痛苦,即使你付出了代价。你没有使用合适的工具来完成工作;创建自定义JSP标记是从Java代码写入JSP的更好选择。


代码示例:

<强> 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>

自定义-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>

    (...)

<强> Tags.class

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

有关标签的更多信息:official docs

答案 2 :(得分:0)

我不会检查你的代码......你不能在jsp页面中使用get writer再次执行out.print ...因为这个请求的响应已经通过呈现jsp来提交

现在要在asp上打印一些东西你可以用任何方式做到这一点

  1. 按表达式标签打印
    1. use out(服务器创建的对象)

      的out.print( “等等...”);

    2. 以及更多

      了解jsp对/ work / catalina / blah ... /

      的影响

答案 3 :(得分:0)

有两页。第一个是主页面。这个执行一些 伪计算。

根据这些计算,返回Success.jsp或Failure.jsp。

此代码将完成您想要实现的目标.....

尽管正如其他人指出的那样,有更先进的技术 迟到了,还是为了跳舞,首先你必须知道这些动作....

a busy cat http://sstatic.net/stackoverflow/img/error-lolcat-problemz.jpg

主要看看这个     cObj.Print(请求,回复);在第二个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>

Java Bean

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;
        }
}