使用Java Servlet中的方法填充JSP textarea

时间:2013-12-18 20:14:13

标签: java html jsp servlets textarea

我已经找到了一个明确的答案或领导了整个堆栈和其他论坛,但所有这些都与使用输入,表单和/或提交填充textareas相关联。在我的情况下,我不需要任何这些。我只需要在该区域中填充我在Servlet的service()方法中编写的查询所获取的信息。我不想依赖scriptlet。我希望能够通过我的私有实例维护安全性并维护2个不同的文件,我可以用一种语言为每个文件编写代码。对我来说这样更容易,更有条理。

对于记录,用于获取信息的算法已经过测试,并且如果通过具有执行所有html代码的printwriter的servlet运行,则该算法正常工作。我现在想要将html / jsp与java分开以保持更好的编码实践。

我如何调用service()方法并使用查询中的所需值填充jsp中的textarea?

谢谢。

的Servlet

/**
 * Servlet implementation class Homepage
 */
@WebServlet(urlPatterns = { "/Homepage" })

public class Homepage extends HttpServlet {
private static final long serialVersionUID = 1L;
private Connection connection;
private Statement stmt;
private ResultSet rs;

/**
 * @see HttpServlet#HttpServlet()
 */
public Homepage() {
    super();
}

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();

    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        System.out.println("driver found");
        connection = DriverManager.getConnection("jdbc:sqlserver://127.0.0.1;" +
                "instance=SQLEXPRESS;databaseName=Timecard_DB;user=Dan;password=12345;");

        try {
            stmt = connection.createStatement();
            String feedSelect = "SELECT ROLE_NAME from ROLES";
            rs = stmt.executeQuery(feedSelect);
            ResultSetMetaData metadata = rs.getMetaData();
            while(rs.next()) {
                for(int i = 1; i <= metadata.getColumnCount(); i++) {
                    String colValue = rs.getString(i);
                    out.println(colValue);
                }
            }
        }

        catch (SQLException e) {
            e.printStackTrace();
        }   
    } 
    catch (Exception e) {
        e.printStackTrace();
        e.getMessage();
    }
    response.setContentType("text/html");
}

JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!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>Home</title>

<style>
body {
background-image: url(Images/whitebg.jpg);
background-repeat: no-repeat;
background-size: 100%;
}

#container {
width: 900px;
margin: 0 auto;
font-family: "Trebuchet MS", Helvetica, sans-serif;
}

#header img {
position: absolute;
top: 80px;
left: 72px;
width: 200px;
height: 50px;
}

#container a:visited {
color: blue;
}

#container a:hover {
color: red;
}

#welcome {
position: absolute;
top: 20px;
right: 100px;
}

#logout {
position: absolute;
top: 20px;
right: 20px;
width: 50px;
height:25px;
}

#links {
position: absolute;
top: 200px;
left: 72px;
}

#links ul {
list-style-type: none;
padding: 5px 10px 5px 10px;
border: 2px solid red;
border-radius: 10px;
}

#links li {
padding: 10px 0 25px 0;
}

#feed {
position: absolute;
top: 100px;
left: 400px;
width: 800px;
height: 400px;
}

#feedtext {
width:800px;
height:400px;
overflow: scroll;
}
</style>
</head>

<body>

<div id='container'>

<div id='header'>
    <img src='Images/mPowerlogo.jpg'/>
</div>

<div id='welcome'>
    Welcome, User1
</div>

<div id='logout'>
    <a href=''>Logout</a>
</div>

<div id='links'>
    <ul>
    <li><a href=''>Timecard Management</a></li>
    <li><a href=''>User Management</a></li>
    <li><a href=''>Customer Management</a></li>
    <li><a href=''>Admin</a></li>
    <li><a href=''>Reports</a></li>
    </ul>
</div>

<div id='feed'>
    <p>Recent Activity:</p>
        <textarea id='feedtext' readonly>
            ***WANT DB INFO HERE***
        </textarea>
</div>

</div>

</body>
</html>

1 个答案:

答案 0 :(得分:1)

首先,你的类需要覆盖HttpServlet中的doPost或doGet方法。

然后,当您转到主页时,servlet将接收请求,处理数据并将其添加到请求中。在你的循环中你会做类似的事情:

StringBuilder data = new StringBuilder();
while (rs.next()) {
    for (...) {
        data.append(rs.getString(i));
        data.append("|"); // Some separator
    }
    data.append("\n");
}

request.setAttribute("data", data);

之后,您需要重定向到JSP:

RequestDispatcher dispatcher = request.getRequestDispatcher("/pathToJsp");
dispatcher.forward(request, response);

最后你得到JSP中的数据:

<textarea>
    ${data} <%-- This will grab data from the request attribute --%>
</textarea>

如果有人在数据库中保存HTML,您需要关注HTML注入。这将在浏览器上呈现。

在JSP中,您可以使用Expression Language来访问请求中的数据。