Web---JSP---几代技术发展史

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_34928644/article/details/82556284

以登录例子演示JSP技术的发展

JSP的第1代开发技术:纯JSP技术

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSP的第1代开发技术:纯JSP技术</title>
  </head>
  
  <body>
    <h2>登录结果页面</h2>
    <%
	    String name =(String) request.getAttribute("name");
	    if(name!=null){
	    	out.println("欢迎你,"+name);
	    	out.println("<br/>显示登录用户的操作界面");
	    }else{
	    	//out.println("登录失败...");//
	    	response.sendRedirect(request.getContextPath()+"/jsps/index1.jsp");//踢到登录界面
	    }
    %>
    
  </body>
</html>

JSP的第2代开发技术:JSP+EJB

JSP

<%@page import="cn.hncu.domain.Person"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSP的第2代开发技术:JSP+EJB</title>
  </head>
  
  <body>
 
    <%
       request.setCharacterEncoding("utf-8");
       //1收集参数
       String name = request.getParameter("name");
       String pwd = request.getParameter("pwd");
       
       //2封装成JavaBean ---EJB: Enterprise Java Bean ,加入业务逻辑方法的JavaBean
       Person p = new Person();
       p.setName(name);
       p.setPwd(pwd);
       
       p= p.login();
       request.setAttribute("p", p);
       request.getRequestDispatcher("/jsps/v2/result.jsp").forward(request, response);
    %>
    
    <!-- 在第2代技术中,还可使用jsp:useBean,jsp:setProperty这些标签 -->
    
  </body>
</html>

EJB

package cn.hncu.domain;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Person implements Serializable {
	private String name;
	private String pwd;

	public Person() {
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", pwd=" + pwd + "]";
	}
	
	
	/////////////在普通JavaBean基础上增加业务方法---EJB//////////////////
	public boolean create(){
		//把this-bean中的信息存入数据库---可以自己写dao层代码,也可以调用独立dao层
		return true;
	}
	
	public Person login(){
		//按理这里应该访问数据库(直接或间接),进行登录校验,这里模拟了
	    if(name!=null && name.trim().startsWith("hncu")  &&
	         pwd!=null && pwd.length()>4  ){
	    	//登录成功,还可以为this对象封装从数据库中获得的新信息
	    	return this;
	    }else{
	    	return null;
	    }
	}
	
}

JSP的第3.1代开发技术(MVC):JSP+servlet+EJB(Model1)

JSP

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSP的第3.1代开发技术(MVC):JSP+servlet+EJB(Model1)</title>
  </head>
  
  <body>
    <h2>JSP的第3.1代开发技术(MVC):JSP+servlet+EJB(Model1)</h2>
    <form action="<%=request.getContextPath()%>/LoginServlet" method="post">
    	Name:<input type="text" name="name"/><br/>
    	Pwd:<input type="password" name="pwd"/> <br/>
    	<input type="submit" value="登录"/>
    </form>
    
    
  </body>
</html>

Servlet

package cn.hncu.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 cn.hncu.domain.Person;

@SuppressWarnings("serial")
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1收集
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		String pwd = request.getParameter("pwd");
		
		//2组织--封装EJB
		Person p = new Person();
		p.setName(name);
		p.setPwd(pwd);
		
		//3调用EJB中的业务逻辑方法
		p = p.login();
		
		//4导向结果页面
		if(p!=null){
			request.setAttribute("p", p);
			request.getRequestDispatcher("/jsps/v3/result.jsp").forward(request, response);
		}else{
			response.sendRedirect(request.getContextPath()+"/jsps/index3.jsp");
		}
	}

}

EJB

package cn.hncu.domain;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Person implements Serializable {
	private String name;
	private String pwd;

	public Person() {
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	@Override
	public String toString() {
		return "Person [name=" + name + ", pwd=" + pwd + "]";
	}
	
	
	/////////////在普通JavaBean基础上增加业务方法---EJB//////////////////
	public boolean create(){
		//把this-bean中的信息存入数据库---可以自己写dao层代码,也可以调用独立dao层
		return true;
	}
	
	public Person login(){
		//按理这里应该访问数据库(直接或间接),进行登录校验,这里模拟了
	    if(name!=null && name.trim().startsWith("hncu")  &&
	         pwd!=null && pwd.length()>4  ){
	    	//登录成功,还可以为this对象封装从数据库中获得的新信息
	    	return this;
	    }else{
	    	return null;
	    }
	}
	
}

JSP的第3.2代开发技术(MVC):JSP+servlet+JavaBean+service(Model2)

图解

JSP

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>JSP的第3.2代开发技术(MVC):JSP+servlet+JavaBean+service(Model2)</title>
  </head>
  
  <body>
    <h2>JSP的第3.2代开发技术(MVC):JSP+servlet+JavaBean+service(Model2)</h2>
    <form action="<%=request.getContextPath()%>/Login2Servlet" method="post">
    	Name:<input type="text" name="name"/><br/>
    	Pwd:<input type="password" name="pwd"/> <br/>
    	<input type="submit" value="登录"/>
    </form>
    
    
  </body>
</html>

Servlet

package cn.hncu.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 cn.hncu.domain.User;
import cn.hncu.service.ILoginService;
import cn.hncu.service.LoginService;

@SuppressWarnings("serial")
@WebServlet("/Login2Servlet")
public class Login2Servlet extends HttpServlet {

	//注入service---以后我们可以通过Spring实现依赖xml注入。暂时我们都是手动进行new对象注入
	private ILoginService service = new LoginService(); 
	
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//1收集参数: id(要到dao层补), name, pwd
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		String pwd = request.getParameter("pwd");
		
		//2组织参数---JavaBean ---POJO
		User user = new User();
		user.setName(name);
		user.setPwd(pwd);
		
		//3调用逻辑层---service层
		user = service.login(user);
		
		//4导向结果页面
		if(user!=null){
			request.setAttribute("user", user);
			request.getRequestDispatcher("/jsps/v4/result.jsp").forward(request, response);
		}else{
			response.sendRedirect(request.getContextPath()+"/jsps/index4.jsp");
		}
		
	}

}

JavaBean

package cn.hncu.domain;

import java.io.Serializable;

@SuppressWarnings("serial")
public class User implements Serializable{
	private String id;
	private String name;
	private String pwd;
	public User() {
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	
	
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((id == null) ? 0 : id.hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		User other = (User) obj;
		if (id == null) {
			if (other.id != null)
				return false;
		} else if (!id.equals(other.id))
			return false;
		return true;
	}
	
	
	@Override
	public String toString() {
		return "User [id=" + id + ", name=" + name + ", pwd=" + pwd + "]";
	}
	
}

Service

接口

package cn.hncu.service;

import cn.hncu.domain.User;

public interface ILoginService {
	public User login(User user);
}

实现类

package cn.hncu.service;

import cn.hncu.dao.LoginDAO;
import cn.hncu.dao.LoginDaoImpl;
import cn.hncu.domain.User;

public class LoginService implements ILoginService{
	//注入dao
	private LoginDAO dao = new LoginDaoImpl();
	
	@Override
	public User login(User user) {
		return dao.login(user);
	}
	
}

猜你喜欢

转载自blog.csdn.net/qq_34928644/article/details/82556284
今日推荐