JSP全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1] 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。它实现了Html语法中的java扩张(以 <%, %>形式)。JSP与Servlet一样,是在服务器端执行的。通常返回给客户端的就是一个HTML文本,因此客户端只要有浏览器就能浏览。
0.2.1 Java applet是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。
0.2.2 CGI(Common Gateway Interface):是服务器上的程序,常常是根据用户输入访问数据库的程序。php里面是不是有个CGI,每一个请求都是进程。
0.2.3 servlet是在服务器上运行的小程序,跟cgi很类似,不过请求来的时候,新开一个线程来处理,所以比cgi快。有趣的命名:Servlet=Server+Applet,表示小服务程序
Servlet的主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程为:
客户端发送请求至服务器端;
服务器将请求信息发送至Servlet
Servlet生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求
服务器将响应返回给客户端
(是一种容器):供了servlet功能的服务器,叫做servlet容器。对web程序来说,servlet容器的作用就相当于桌面程序里操作系统的作用,都是提供一些编程基础设施。(简单来说Servlet要在容器内工作)
日蚀,是java开发的经典IDE(集成开发环境),为了开发j2ee,有jee版本的eclipse,该版本配置好了很多东西,方便使用。
【参考本教程前,请确保安装配置好(jdk,tomcat)环境】
1,将body标签改为这样
please login
有两个成员变量,String username; String password, 选中两行声明变量的语句,右键,source-Generate getter and setter
3,关注代码中的action="login"这个单词,在你点击submit后可以看到url跳转到http://localhost:8080/
可以看到url中的login,就是从index.jsp 中的action来的。后面就是这个form的两对
0,贴代码后来在逐个解释
package eva.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import eva.bean.AccountBean;
@WebServlet(name="CheckServlet", urlPatterns="/login")
public class CheckAccount extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = 1L;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
AccountBean account = new AccountBean();
String pwd = request.getParameter("password");
String username = request.getParameter("username");
account.setPassword(pwd);
account.setUsername(username);
if(!username.isEmpty()){
response.sendRedirect("jsp/logSuccess.jsp");
}else{
response.sendRedirect("");
}
}
}
1,以往使用Servlet需要在xml中写配置,告诉tomcat Servlet的类名,这个servlet处理哪个路径的请求。现在采用@开头的注释的方法。Tomcat8 Servlet3.0开始支持这种写法
@WebServlet(name="CheckServlet", urlPatterns="/login")
2,首先是个包名,声明这个类是在这个包里面。这个CheckAccount类是处理Http信息的servlet类,所以继承HttpServlet。
3,serialVersionUID,序列化需要的一个id,序列化超出本文范围,不讲。其实没有这个也ok,因为我们没有用到序列化的功能。
4,doGet函数,处理Http协议里面的Get动作,同样非常重要的还有doPost,类似的是处理Http协议的post动作(方法)。这个方法接收到一个request,这个request其实就是发生点击submit后产生的一个Http的Get动作。这个request对象里面包含了这个请求的信息,可以用各种getter取得。其中要取得参数可以用value=getParameter(key)。
5,有了这些参数后,我们就可以连接数据库查询这个用户是不是这个密码。其实jsp在取得的时候已经可以连接数据库查,但是jsp应该只是负责显示,所以查库这种事应该交由业务层去做,业务层里面其实就是servlet。篇幅限制,下一篇再继续链接数据库,这里为了方便讲述跳转,先不做验证工作。
6,函数从request取得数据,处理后,应该返回一个response,sendRedirect的意思是页面重定向到某路径,不是/开头的成为相对路径,在网页开发一般使用相对路径。成功就跳到成功页面,不成功就跳回默认首页。为了方便管理页面,我在WebContent建了一个目录jsp,里面放置各种jsp。
7,解释一下路径问题:可以观察到 http://localhost:8080/
1,贴个代码,这里用了jsp入门示例的显示时间的经典例子
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page language="java"%>
Insert title here
<% java.util.Date d = new java.util.Date(); %>
Welcome!! Login success
Today's date is <%=d.toString() %>
有人就要问了,在成功登陆的页面,我想要显示用户名,这个要求一点不过分吧,为什么不做呢?
原因在于response的时候用了sendRedirect,可以看到服务器是发送了一个新地址给浏览器,所以在回显的时候,jsp不知道用户名,没人告诉它呀
解决办法:不用sendRedirect而用forward的方法,这个是在服务器内部重定向,服务器请求其他程序(servlet)将取回的结果显示给浏览器,浏览器不知道服务器究竟做什么了。
1,贴代码,将CheckAccount的sendRedirect改成如下
request.getRequestDispatcher("jsp/logSuccess.jsp").forward(request, response);
3,可以看到效果跟之前用重定向的方法一样,但是里面做的事情是不一样的。
4,将登陆成功的jsp的代码改一下,也是从request中取参数,所以说其实jsp就是servlet。
<% java.util.Date d = new java.util.Date(); %>
<% String s = request.getParameter("username"); %>
<%=s %> : welcome
Today's date is <%=d.toString() %>
环境:
OS :Linux Mint17 xfce 64
jdk:1.8
tomcat:8.0
IDE:Eclipse jee luna
本节教程到此结束,后续例子会接着本文的代码基础上,使用数据库,同时会适当重构一下代码。
EvaDemo_1_basic.zip最终的代码:http://pan.baidu.com/s/1c0ldR5e
参考资料:
1.讲jsp和servlet的关系
http://www.cnblogs.com/jbelial/archive/2012/03/13/2385601.html
2.http协议 post get方法
http://blog.csdn.net/xiemk2005/article/details/6108618
3. request转发和response重定向
http://zhidao.baidu.com/question/360515312.html