【J2EE】【1.HelloWorld】J2EE基础(jsp,servlet,tomcat,eclipse)

零,名词解释(课外阅读,不看不影响后续教程)

0.1 jsp

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 servlet

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生成响应内容并将其传给服务器。响应内容动态生成,通常取决于客户端的请求
  服务器将响应返回给客户端

0.3 Tomcat

(是一种容器):供了servlet功能的服务器,叫做servlet容器。对web程序来说,servlet容器的作用就相当于桌面程序里操作系统的作用,都是提供一些编程基础设施。(简单来说Servlet要在容器内工作)

0.4 eclipse

日蚀,是java开发的经典IDE(集成开发环境),为了开发j2ee,有jee版本的eclipse,该版本配置好了很多东西,方便使用。



【参考本教程前,请确保安装配置好(jdk,tomcat)环境】

一,新建Dynamic Web Project

  1. 新建运行环境,这里使用Tomcat 【J2EE】【1.HelloWorld】J2EE基础(jsp,servlet,tomcat,eclipse)_第1张图片
  2. Tomcat8 支持3.1的servlet
  3. 只要使用tomcat就会生成Servers,正常的,如果删除了会导致tomcat在eclipse中表现失常【J2EE】【1.HelloWorld】J2EE基础(jsp,servlet,tomcat,eclipse)_第2张图片


二。 hello world

  1. WebContent下新建jsp File-  index.jsp
  2. 在两个body标签内写入  Hello world
  3. 右击项目,run as - run on Server, 或者点运行图标
  4. 可以见到效果,url:http://localhost:8080//
  5. eclipse内置的浏览器可以看到效果,此时tomcat已经启动。所以如果之前启动过tomcat应该先关掉。此时另开浏览器输入如上url也是能看到效果的


三。将hello world改造成登陆界面

        1,将body标签改为这样


	please login
	
username:
password:

        2,新建一个javaBean作为数据包裹。这个bean是为了后续工作方便,暂时不是必要的。在src下建立一个 AccountBean.java

              有两个成员变量,String username; String password, 选中两行声明变量的语句,右键,source-Generate getter and setter

        3,关注代码中的action="login"这个单词,在你点击submit后可以看到url跳转到http://localhost:8080//login?username=asdf&password=123

                可以看到url中的login,就是从index.jsp 中的action来的。后面就是这个form的两对。当你点击submit时候,页面跳转了,携带着参数,这叫做redirect


四。写一个servlet去处理这个跳转和相关的数据

        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//redirectPath


五,写个JavaServer Pages (JSPs)显示成功登陆

        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() %>

六,在回显jsp中显示用户名

        有人就要问了,在成功登陆的页面,我想要显示用户名,这个要求一点不过分吧,为什么不做呢?

        原因在于response的时候用了sendRedirect,可以看到服务器是发送了一个新地址给浏览器,所以在回显的时候,jsp不知道用户名,没人告诉它呀

        解决办法:不用sendRedirect而用forward的方法,这个是在服务器内部重定向,服务器请求其他程序(servlet)将取回的结果显示给浏览器,浏览器不知道服务器究竟做什么了。

        1,贴代码,将CheckAccount的sendRedirect改成如下

request.getRequestDispatcher("jsp/logSuccess.jsp").forward(request, response);

        2,可以看到是将request经过分发器分发给这个路径(代表一个程序Servlet,jsp其实也是一个servlet),原样forward两个参数过去

        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

你可能感兴趣的:(Java)