dva*_*ria 2 html java jsp servlets
我正在尝试学习如何使用Java EE 6构建Web应用程序,但我很难理解在典型MVC2设计的组件之间传递信息的最佳方法.
我理解它的方式,使用Java EE的MVC2模式将是:数据是模型,控制器是servlet,视图是JSP.这只是一个例子.
所以我写了以下三个部分,我知道如何在我正在使用的服务器(Tomcat 7)中安装它们,入口点将是下面的html文件.我正在努力解决servlet如何转发它对JSP的响应,以及如何将JSP发送回客户端浏览器.
HTML文件(demo.html):
<html>
<head>
<title>MVC2 Demo</title>
</head>
<body>
<form method='post' action='/mvc2-demo/DemoServlet'>
<h1> MVC2 Demo </h1>
Name: <input type='text' name='input_name' size='50'>
<br><br>
Age: <input type='text' name='input_age' size='10'>
<br><br>
<input type='submit' value='SUBMIT INFO'>
</form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
servlet(DemoServlet.java):
import java.io.PrintWriter;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class DemoServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) {
response.setContentType("text/html");
try {
PrintWriter pw = response.getWriter();
String name = request.getParameter("input_name");
String age = request.getParameter("input_age");
pw.println("Information received by Servlet: " + name + " : " + age);
// forward this response to Demo.jsp...
pw.close();
} catch (Exception e) {
System.out.println("Cannot get writer: " + e);
}
}
}
Run Code Online (Sandbox Code Playgroud)
JSP(Demo.jsp):
<html>
<head><title> JSP Demo </title></head>
<body>
<h1>JSP Demo</h1>
<ul>
<%= get response forwarded from servlet.. %>
</ul>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
入口点是一个HTML页面,它显示一个带有两个输入字段的简单表单(一个用于某人的姓名,另一个用于他们的年龄)和一个提交按钮.当用户点击提交时,表单将数据发送到DemoServlet.然后,servlet从HTTP请求有效负载中提取数据并将其保存在一些本地String变量中.我评论的那部分是我想以某种方式将这些信息转发给JSP的地方.一旦我这样做,JSP会自动发送到客户端吗?什么引发了这个?
谢谢你的帮助.
在MVC中,servlet应该只控制请求/响应.它不应该在响应中打印任何内容.这是观点的责任.因此servlet中的以下行违反了MVC原则:
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("Information received by Servlet: " + name + " : " + age);
Run Code Online (Sandbox Code Playgroud)
摆脱他们所有.
您需要在请求范围中存储您要在JSP中显示的信息,然后将请求/响应转发给JSP.由于JSP已经可以使用这些参数,因此${param}您无需在此特定情况下存储任何内容.只需转发到JSP即可.出于演示目的,我将为请求添加另一个属性:
request.setAttribute("message", "Information successfully processed");
request.getRequestDispatcher("/WEB-INF/Demo.jsp").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
属性值是可用的由属性名称EL(表达式语言)为${message}.
然后是JSP,它基本上是HTTP响应的一部分.当servlet方法完成并且forward()已经发生时,servletcontainer将执行JSP代码.JSP提供了一个模板来编写HTML/CSS/JS,就像你希望它被发送到客户端(webbrowser)一样.但是不鼓励使用Scriptlet, <% %>因为它允许您以违反MVC原则的方式编写代码.你应该只使用EL ${}.
所以,替换
<%= get response forwarded from servlet.. %>
Run Code Online (Sandbox Code Playgroud)
通过
<p>Those parameters are submitted: ${param.input_name} : ${param.input_age}</p>
<p>Information received by Servlet: ${message}</p>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1564 次 |
| 最近记录: |