Ssrvlet技术

1.工作原理

在这里插入图片描述
工作原理如上图所示,其工作流程如下五个步骤:

  • Servlet接收浏览器发出的请求。
  • Servlet根据不同的请求调用相应的JavaBean.
  • JavaBean按照子的业务逻辑,通过JDBC操作数据库。
  • Servlet将结果传给了JSP。
  • JSP将后台处理结果传给了浏览器。

2.采用JSP+Servlet+JavaBean+JDBC方式开发一个Web登录程序

(1)创建Java EE 项目
在这里插入图片描述

(2)构造JavaBean,创建JDBC。在src文件下建立包org.easybooks.test.model.vo,创建名为UserTable.java的java类。在包org.easybooks.test.jdbc中创建名为SqlSrvDBConn.java的Java类。

  • UserTable.java代码如下:
package org.easybooks.test.model.vo;

public class UserTable {
   //Fields
   private Integer id;
   private String username;
   private String password;
   
   //Property accessors
   //属性 id 的 get/set 方法
   public Integer getId(){
   	return this.id;
   }
   public void setId(Integer id){
   	this.id=id;
   }
   //属性 username 的 get/set 方法
   public String getUsername(){
   	return this.username;
   }
   public void setUsername(String username){
   	this.username=username;
   }
   //属性 password 的 get/set 方法
   public String getPassword(){
   	return this.password;
   }
   public void setPassword(String password){
   	this.password=password;
   }

}

  • SqlSrvDBConn.java代码如下:
package org.easybooks.test.jdbc;
import java.sql.*;
public class SqlSrvDBConn {
   private Statement stmt;
   private Connection conn;
   ResultSet rs;
   //在构造方法中创建数据库连接
   public SqlSrvDBConn(){
   	stmt=null;
   	try{
   		/**加载并注册 SQLServer 2008 的 JDBC 驱动*/
   		Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
   		conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=TEST","sa","123456");
   	}catch(Exception e){
   		e.printStackTrace();
   	}
   	rs=null;
   }
   //执行查询类的SQL语句,有返回集
   public ResultSet executeQuery(String sql)
   {
       try
       {
       	stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
       	rs=stmt.executeQuery(sql);
       }catch(SQLException e){
       	System.err.println("Data.executeQuery: " + e.getMessage());
       }
       return rs;
   }
   //关闭对象
   public void closeStmt()
   {
       try
       {
           stmt.close();
       }catch(SQLException e){
       	System.err.println("Data.executeQuery: " + e.getMessage());
       }
   }
   public void closeConn()
   {
       try
       {
           conn.close();
       }catch(SQLException e){
       	System.err.println("Data.executeQuery: " + e.getMessage());
       }
   }
}

(3)编写JSP

  • login.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
   <title>简易留言板</title>
</head>
<body bgcolor="#E3E3E3">
<form action="mainServlet" method="post">
<table>
   <caption>用户登录</caption>
   <tr>
   	<td>用户名:</td>
   	<td>
   		<input type="text" name="username" size="20"/>
   	</td>
   </tr>
   <tr>
   	<td>密码:</td>
   	<td>
   		<input type="password" name="password" size="21"/>
   	</td>
   </tr>
</table>
<input type="submit" value="登录"/>
<input type="reset" value="重置"/>
</form>
如果没注册单击<a href="">这里</a>注册!
</body>
</html>

  • main.jsp:
<%@ page language="java" pageEncoding="gb2312" import="org.easybooks.test.model.vo.UserTable"%>
<html>
<head>
   <title>留言板信息</title>
</head>
<body>
   <%
   	UserTable user=(UserTable)session.getAttribute("user");
   	String usr=user.getUsername();
   %>
   <%=usr%>,您好!欢迎登录留言板。
</body>
</html>

  • error.jsp:
<%@ page language="java" pageEncoding="gb2312"%>
<html>
<head>
   <title>出错</title>
</head>
<body>
   登录失败!单击<a href="login.jsp">这里</a>返回
</body>
</html>

(4)编写Servlet:在src文件下创建包org.easybooks.test.servlet,创建名为MainServlet.java的类

  • MainServlet.java代码如下:
package org.easybooks.test.servlet;
import java.sql.*;
import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

import org.easybooks.test.jdbc.SqlSrvDBConn;
import org.easybooks.test.model.vo.UserTable;;
public class MainServlet extends HttpServlet{
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		request.setCharacterEncoding("gb2312");				//设置请求编码
		String usr=request.getParameter("username");		//获取提交的用户名
		String pwd=request.getParameter("password");		//获取提交的密码
		boolean validated=false;							//验证成功标识
		SqlSrvDBConn sqlsrvdb=new SqlSrvDBConn();
		HttpSession session=request.getSession();			//获得会话对象,用来保存当前登录用户的信息
		UserTable user=null;
    	//先获得UserTable对象,如果是第一次访问该页,用户对象肯定为空,但如果是第二次甚至是第三次,就直接登录主页而无须再次重复验证该用户的信息
    	user=(UserTable)session.getAttribute("user");
    	//如果用户是第一次进入,会话中尚未存储user持久化对象,故为null
    	if(user==null){
    		//查询userTable表中的记录
    		String sql="select * from userTable";
    		ResultSet rs=sqlsrvdb.executeQuery(sql);		//取得结果集
    		try {
				while(rs.next())
				{
					if((rs.getString("username").trim().compareTo(usr)==0)&&(rs.getString("password").compareTo(pwd)==0)){
						user=new UserTable();				//创建持久化的JavaBean对象user
						user.setId(rs.getInt(1));
						user.setUsername(rs.getString(2));
						user.setPassword(rs.getString(3));
						session.setAttribute("user", user);	//把user对象存储在会话中
						validated=true;						//标识为true表示验证成功通过
					}
				}
	    		rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
    		sqlsrvdb.closeStmt();
    		sqlsrvdb.closeConn();
        }
        else{
        	validated=true;									//该用户在之前已登录过并成功验证,故标识为true表示无须再验了
        }
        if(validated)
        {
            //验证成功跳转到main.jsp
        	response.sendRedirect("main.jsp");
        }
        else{
            //验证失败跳转到error.jsp
        	response.sendRedirect("error.jsp");
        }
	}
	
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
		doGet(request,response);
	}
}

(5)配置Servlet:在web.xml文件里配置。

  • web.xml 代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>jsp_servlet_javabean_jdbc</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
   <servlet>
  	<servlet-name>mainServlet</servlet-name>
  	<servlet-class>org.easybooks.test.servlet.MainServlet</servlet-class>
  </servlet>
  <servlet-mapping>
  	<servlet-name>mainServlet</servlet-name>
  	<url-pattern>/mainServlet</url-pattern>
  </servlet-mapping>
  
  
  
</web-app>

最后部署运行

效果图:
登陆界面
在这里插入图片描述

总结:

servlet是一种web服务器端的Java程序,具有独立平台和协议的特性,可以动态的生成Web网页
原JSP文件的功能全部改由Servlet来实现

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值