我已经找到了一个明确的答案或领导了整个堆栈和其他论坛,但所有这些都与使用输入,表单和/或提交填充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>
答案 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来访问请求中的数据。