其实jsp的本质就是servlet,Jsp经过编译之后就成了servlet,但Java虚拟机并不能识别JSP代码,当浏览器请求JSP页面时,JSP引擎会首先去检查是否需要编译这个文件。如果这个文件没有被编译过,或者在上次编译后被更改过,则编译这个JSP文件。JSP擅长在于页面显示,servlet则擅长逻辑控制,类似于.NET MVC的Controllers。Jsp生命周期结束后就会销毁servlet实例。
JSP与SERVLET之间的传值有两种情况,JSP到servlet,servlet到JSP,通过对象request和session来传递。
JSP 到servlet示例:JSP的form表单传值
通过设置form表单的action请求路径和输入框的name值来传递,当点击新增按钮的时候就会获取到姓名和密码传到servlet
<form action="${ctx}/servlet/UserServlet" method="post"
>
姓名<input type="text" name="username" id="username" class="username">
密码<input type="text" name="password" id="password" class="password">
<input type="submit" value="新增">
</form>
servlet代码示例,下面就是通过servlet来接收JSP传过来的数据
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//通过request.getParamter(参数)方法来获取
//参数为JSP form表单所对应的name值
String username=request.getParameter("username");
String password=request.getParameter("password");
}
Servlet 到JSP:servlet代码示例
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//通过request.setAttribute(参数,值)方法设置
request.setAttribute("username", "cxk");
request.setAttribute("password", "123");
//通过request.getRequestDispatcher("路径").forward(request, response)方法来把设置好的参数传到jsp去
request.getRequestDispatcher("/jsp/MyJsp.jsp").forward(request, response);
}
Jsp代码:通过el表达式来获取值,el表达式就是“${}”这样子,里面写对应的 参数就行
${username} <br>
${password}