使用JSP(JSTL)从Java MVC和JDBC检索数据

我是Servlets和MVC网络编程的新手。 到目前为止,我已经开发了一个基本的CRUD项目,并希望添加一个搜索function。 我想使用JSP文件与servlet进行通信并使用标记(我在编写问题时遇到问题,但我希望下面的代码能够清除它)。

我DAO的一部分

public List getAllCourses() { // TODO Auto-generated method stub List courseList = new ArrayList(); try { Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery( "select * from courses" ); while( resultSet.next() ) { Courses course = new Courses(); course.setCourseid( resultSet.getInt( "courseid" ) ); course.setCoursename( resultSet.getString( "coursename" ) ); course.setFaculty( resultSet.getString( "faculty" ) ); course.setCourseSpecification( resultSet.getString( "courseSpecification" ) ); course.setDuration( resultSet.getInt( "duration" ) ); courseList.add(course); } resultSet.close(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } return courseList; } public void findCourse(Courses course) { try { Statement statement = conn.createStatement(); ResultSet resultSet = statement.executeQuery( "select * from courses where coursename=?" ); while( resultSet.next() ) { Courses course1 = new Courses(); course1.setCourseid( resultSet.getInt( "courseid" ) ); course1.setCoursename( resultSet.getString( "coursename" ) ); course1.setFaculty( resultSet.getString( "faculty" ) ); course1.setCourseSpecification(resultSet.getString("courseSpecification")); course1.setDuration( resultSet.getInt( "duration" ) ); } resultSet.close(); statement.close(); } catch (SQLException e) { e.printStackTrace(); } return; } 

servlets程序

 @WebServlet(name = "GetStudent", urlPatterns = {"/GetStudent"}) public class FindCourse extends HttpServlet { private static final long serialVersionUID = 1L; @EJB private CourseDao courseDAO; protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Courses course = new Courses(); String coursename = request.getParameter("coursename"); Courses course1= courseDAO.getCourse(course, coursename); request.setAttribute("Courses", course1); request.getRequestDispatcher("findCourse.jsp").forward(request, response); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } 

}

JSP

 
${course.coursename}

我希望对这段代码有一个很好的解释,因为大部分内容来自教程等,我非常想学习。 因此,我希望表单能够获取用户输入并检索与查询匹配的课程,并显示课程或可能的课程,如果多个课程与名称匹配。 目前我正在收到“资源未找到”错误。

作为一个附带问题,如果我被允许,视图和控制器之间的数据forms是什么? 有没有办法管理它或强制它采取JSON / XML? 我怎样才能将这个简单的MVC变成RESTFUL服务? 我不认为复杂的答案只是正确方向的一些指示。 总的来说,我发现这非常有趣和具有挑战性。 谢谢。

servlet是Web应用程序的核心。 它充当控制器,其中处理用户(http)请求并生成响应并将其发送回用户(通常以JSP页面的forms,但也可以是图像,pdf文档,JSON响应或任何其他对应于预定义的http MIME类型的内容)。

Jsp页面基本上有两个目的:1)它们向用户呈现响应内容; 2)它们允许用户输入发送到服务器的信息(然后存储在那里或用于过滤以创建不同的响应) 。 通常不应该滥用JSP页面,并且应该将业务逻辑放入servlet,而JSP页面应该只有最小的JAVA代码(这通常意味着您将使用JSTL和EL(表达式语言)并尽量避免使用Scriptlet尽可能)

Web应用程序中的模型是您正在处理的数据。 一个例子是一个简单的POJO(例如Courses),它包含Course表所有的所有字段(以及相应的getter / setters方法)。 通常,控制器将通过DAO(或其他方式)访问此模型并对其进行更改。

关于数据格式,JSP在服务器上呈现,因此可以在servlet(控制器)和JSP页面之间使用普通的Java对象。 当然,当您通过HTML表单(作为JSP页面的一部分)发送数据时,表单数据默认情况下将以application / x-www-form-urlencoded格式发送。 (这将是表单元素的enctype属性)。 如果您使用文件上传作为表单的一部分,则必须将数据格式设置为multipart / form-data 。 (据我所知,浏览器在输入时应该只支持这两种格式)

现在,当您不使用浏览器并想要创建REST Web服务时,您必须手动执行序列化/反序列化。 这将涉及创建HTTP客户端并针对REST服务的URL发出HTTP请求(GET / POST)。 实际数据必须序列化(如JSON,XML,application-x-www-form-urlencoded等)并附加到请求中。 响应必须反序列化。

就用户输入处理而言,你应该做类似的事情

 //servlet String courseName = request.getParameter("coursename"); //get the argument //and then modify the sql query ResultSet resultSet = statement.executeQuery( "select * from courses where coursename='"+courseName+"'"; 

请注意,使用PreparedStatement比使用Statement更好(因为PreparedStatement更快更安全(针对sql注入攻击)

至于错误,发布整个堆栈跟踪。