版权声明:本文为博主原创文章,未经博主允许不得转载。 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);
}
}