`
sophia828
  • 浏览: 9837 次
社区版块
存档分类
最新评论

4.2 简单Java Web项目举例

 
阅读更多

       今天以登录功能为例,完成在不用spring等框架的情况下如何搭建一个简单的Java Web项目。

 

  • HttpServlet 了解

        通过浏览器对系统的访问,我们通常叫http请求,Java Web系统对http请求是通过HttpServlet接收处理的,HttpServlet容器响应Web客户请求流程如下:

  • 1)Web客户向Servlet容器(或叫web容器,例如Tomcat)发出Http请求;
  • 2)Servlet容器解析Web客户的Http请求;
  • 3)Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
  • 4)Servlet容器创建一个HttpResponse对象;
  • 5)Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
  • 6)HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
  • 7)HttpServlet调用HttpResponse的有关方法,生成响应数据;
  • 8)Servlet容器把HttpServlet的响应结果传给Web客户。

      我用下划线画出来了在流程中的几个元素:HTTP请求+信息,servlet容器,HttpServlet对象,HttpRequest对象,HttpResponse对象,流程中元素之间的交互概括如下图:


       接下来的开发,就是针对每个元素进行的处理。
 
 

  • Java Web项目创建

       这个项目我们就只做个简单的登录功能。

       我们在Java Web开发准备这个内容已经把环境配置好了,包括tomcat(Servlet容器),接下来就需要我们完成三点:

      • ①提供页面,输入登录信息,提交后能发起请求(Web客户);
      • ②获取请求信息,查询数据库,取得用户信息进行对比 (HttpServlet对象,HttpRequest对象,HttpResponse对象)
      • ③把对比处理结果反馈到页面上(HttpResponse对象)
    • 1)新建数据库和表格

新建数据库ecom;

新建user表格并初始化,sql如下:

 

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
  `id` int(255) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `email` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES ('2', 'sophia', '123456', 'test@sina.com');

 

  • 2)新建Web Project
  •   File->new->web project,填入项目名SimpleJavaWeb,如下:
  •  
  • 3)新建用户类User和数据库操作类

        根据输入的email信息,查询数据库获得用户信息,返回一个User类的对象。

        User.java:

package com.test;

public class User {
	String email;
	String username;
	String password;
	public User(String email,String username,String password){
		this.email = email;
		this.username = username;
		this.password = password;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
}

 数据库操作类JDBCUtils.java:

package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
 * JDBC连接数据库
 * 详细可参考http://www.cnblogs.com/Qian123/p/5339164.html
 * @author jxh
 */
public class JDBCUtils {
    
    private static final String URL="jdbc:mysql://localhost:3306/ecom";
    private static final String NAME="jxh";
    private static final String PASSWORD="123456";
    
    private static Connection conn=null;
    
    //静态代码块(将加载驱动、连接数据库放入静态块中)
    static{
        try {
            //1.加载驱动程序
            Class.forName("com.mysql.jdbc.Driver");
            
            //2.获得数据库的连接
            conn = DriverManager.getConnection(URL, NAME, PASSWORD);
            
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    
    public JDBCUtils(){}
    
    //对外提供一个方法来获取数据库连接
    public static Connection getConnection(){
        return conn;
    }
    
    
    public static User getUserInfo(String email) throws Exception{
    	
        //3.通过数据库的连接操作数据库,实现增删改查
        String sql = "select email,username,password from user where email = ?";
        PreparedStatement psmt = conn.prepareStatement(sql);
        psmt.setString(1, email);
        ResultSet rs = psmt.executeQuery();
        
        //如果对象中有数据,就会循环打印出来
        while(rs.next()){
            System.out.println(rs.getString("email")+","+rs.getString("username")+","+rs.getString("password"));
            return new User(rs.getString("email"),rs.getString("username"),rs.getString("password"));
        }
        return null;
    }
}

    这个类能正确运行,还需要下载mysql-connector-java-5.1.39.jar,放到WebRoot\WEB-INF\lib\下

 

  • 4)创建登录页面及其他

login.jsp:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
  Object obj = request.getAttribute("msg");
  String msg = "";
  if(obj!=null){
     msg = obj.toString();
  }
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <!-- 设置页面内所有连接的相对路径,必须放在head标签里 -->
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body style="text-align: center;">
  <div>
   <form action="login.do">
   <table>
   <th>
   <tr>邮箱</tr>
   <tr><input name="email" type="text"/></tr>
   </th>
   <th>
   <tr>密码</tr>
   <tr><input name="password" type="text"/></tr>
   </th>
    <th>
   <tr><input type="submit" value="登录"/></tr>
   <tr><%=msg%></tr>
   </th>
   </table>
   </form>
   </div>
  </body>
</html>

 

 

其中 request.getAttribute("msg");用来在页面打开时,获取request中的操作错误的提示信息,第一次打开页面这个肯定是没有值的。

登录成功显示页面success.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <!-- 设置页面内所有连接的相对路径,必须放在head标签里 -->
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body style="text-align: center;">
  <div>欢迎,尊敬的<%=request.getAttribute("usr")%>,您登录成功!
   </div>
  </body>
</html>

 登录错误提示页面err.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <!-- 设置页面内所有连接的相对路径,必须放在head标签里 -->
    <base href="<%=basePath%>">
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  
  <div>
    登录出错,请联系管理人员!
   </div>
  </body>
</html>

 

 

  • 5)自定义HttpServlet

       创建自定义的HttpServlet,这里命名为SimpleJavaWebServlet,用来接收请求,并按照我们自己的需求作出处理和请求反馈。

       (HTTP的请求方式包括DELETE,GET,OPTIONS,POST,PUT和TRACE,在HttpServlet类中分别提供了相应的服务方法,它们是,doDelete(),doGet(),doOptions(),doPost(), doPut()和doTrace(),常用的就用doGet()和doPost()两个)

         SimpleJavaWebServlet.java 代码如下:

 

package com.test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@SuppressWarnings("serial")
public class SimpleJavaWebServlet extends HttpServlet {

	// 注意
	// request.getRequestDispatcher("/(正斜杠)加文件名(从webroot下开始算)").forward(request,
	// response);
	// response.sendRedirect("/(正斜杠)+项目名+文件名(从webroot下开始算。所有servlet文件都算作在webroot的跟目录下。不需要加包名)");
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		String email = req.getParameter("email");
		String password = req.getParameter("password");

		if (email == null || password == null) {
			req.setAttribute("msg", "邮箱和密码都不能为空");
			req.getRequestDispatcher("/login.jsp").forward(req, resp);
			return;
		}

		try {
			User usr = JDBCUtils.getUserInfo(email);
			if (usr == null) {
				req.setAttribute("msg", "邮箱不存在");
				req.getRequestDispatcher("/login.jsp").forward(req, resp);
				return;
			}

			if (!password.equals(usr.getPassword())) {
				req.setAttribute("msg", "密码不正确");
				req.getRequestDispatcher("/login.jsp").forward(req, resp);
				return;
			}
			req.setAttribute("usr", usr.getUsername());
			req.getRequestDispatcher("/success.jsp").forward(req, resp);
			return;
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		req.getRequestDispatcher("/err.jsp").forward(req, resp);

	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doGet(req, resp);
	}
}

 

 

  • 6)配置web.xml

        将我们定义的simpleJavaWebServlet配置到web中,就是告诉项目用这个servlet启动,并作为容器处理相关请求。

   web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- 配置自定义servlet -->
   <servlet>
    <servlet-name>simpleJavaWebServlet</servlet-name>
    <servlet-class>com.test.SimpleJavaWebServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>simpleJavaWebServlet</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
</web-app>

 

  • 7)测试

        到目前项目结构:


       右击项目,run as->run on server,成功启动后,在浏览器中输入http://localhost:8080/SimpleJavaWeb/login.jsp回车:


     测试多种情况:

  • ①邮箱和密码都没有输入,点击登录
  • 邮箱和密码其中之一没有输入,点击登录
  • ③邮箱输入test@sina.com,密码跟数据库中的不一样
  • ④邮箱输入test@sina.com,密码123456
  • 登录成功的页面如下:


      简单的Java Web项目完成!

 

 

 

 

 

  • 大小: 58.2 KB
  • 大小: 13.3 KB
  • 大小: 54.4 KB
  • 大小: 15.1 KB
  • 大小: 7.7 KB
  • 大小: 6 KB
分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Java服务器程序设计

     本书适用于所有对java和web感兴趣的读者使用和参考。 第1部分 java服务器基础[/font] [/font] 第1章 java计算的体系结构[/font] [/font] 1.1 传统的计算模式[/font] 1.1.1 集中式计算模式[/font] 1.1.2 胖客户机...

    java入门pdf

    - **2.3.2 Eclipse的使用**:启动Eclipse,创建新的Java项目,编写并运行Java代码。 #### 第三章:Java基本程序结构 **3.1 Java应用程序结构** 一个典型的Java应用程序包含多个类,每个类定义在一个单独的`.java`...

    java初学者必看

    第17章 Java Web应用——JSP 17.1 JSP技术概述 17.2 JSP运行环境搭建 17.2.1 Tomcat下载与安装 17.2.2 Tomcat的环境变量配置 17.3 基本语法 17.3.1 HTML注释 17.3.2 隐藏注释 17.3.3 声明 17.3.4 表达式 ...

    Designing Web Services with the J2EE 1.4 Platform

    - **5.2 Web服务客户端应用场景** 举例说明Web服务在实际应用中的典型场景。 - **5.3 开发使用Web服务的客户端应用程序** 包括调用Web服务的方法和工具。 - **5.4 一般考虑事项** 如错误处理、安全性问题等。 - **...

    Java加密与解密的艺术配书源代码

    本书是Java安全领域的百科全书,密码学...常规Web应用开发安全389 12.2 实例:IM应用开发安全399 12.3 实例:Web Service应用开发安全420 12.4 小结443 附录A Java 6支持的算法445 附录B Bouncy Castle支持的 算法447

    java一看就懂的老师教程

    - Java Applet是一种可以在Web浏览器中运行的小型应用程序。 - **1.7 什么是JSP(Java Server Pages)** - JSP是一种用于创建动态网页的技术。 #### 二、基础概念与关键字 - **2.1 认识关键字** - Java中有许多...

    jsp 简易教程

    ### JSP简易教程知识点概述 #### 第1章 JSP简介 - **1.1 什么是JSP** - JavaServer Pages(简称JSP)是一种基于Java的服务器端脚本技术,用于生成动态网页内容。 - JSP允许开发人员将业务逻辑与表示层分离,使...

    How Tomcat Works: A Guide to Developing Your Own Java Servlet Container

    第1章 一个简单的Web服务器 3 1.1 The Hypertext Transfer Protocol (HTTP) 3 1.2 HTTP Request 3 1.3 HTTP Response 4 1.4 Socket类 4 1.5 ServerSocket类 5 1.6 应用举例 5 第2章 一个简单的servlet容器 7 2.1 ...

    动态网页(JSP+Servlet)教程

    Tomcat 作为一款轻量级的 Java Web 服务器,不仅安装配置简单,而且具有良好的性能和稳定性,是学习和开发 JSP 和 Servlet 的理想选择。 #### 三、Servlet简介 **3.1 简介** Servlet 是一种 Java 技术,允许...

    Spring培训资料

    **4.2 Web层分发器和配置** - **Web层的核心DispatcherServlet**:作为Spring MVC的核心组件,负责接收前端的HTTP请求,并将请求分发给相应的控制器。 - **.do与.screen的区别**:`.do`后缀用于表示处理请求的控制...

    Jsp教程(很全面)

    JSP作为Java Web开发的重要组成部分,提供了强大的功能和灵活性,从基础语法到高级文件操作和数据库集成,再到JavaBeans的应用,涵盖了Web应用程序开发的各个方面。通过深入学习和实践,开发者可以充分利用JSP的潜力...

    java程序设计与开发课件

    第1章 Java语言概述······························· (1) 1.1 Java语言及其产生···························· (1) 1.2 Java的特点··········...

    jsp教程.pdf

    - 当客户端请求一个JSP页面时,Web服务器会将该页面编译成一个Java Servlet,并在服务器端执行。执行结果再被转化为HTML内容返回给客户端。 - **1.4 安装配置JSP运行环境** - 需要安装JDK(Java Development Kit)...

    简单易懂的经典jsp教程

    它能够简化Web应用程序的开发过程,并且可以轻松地与其他Java技术如Servlets、JavaBeans等集成。 **1.2 JSP页面** JSP页面是包含HTML标记、Java代码片段和预定义的动作的一种特殊类型的网页。这些页面可以在服务器...

    JSP教程

    - 安装JSP运行环境通常需要安装Java开发工具包(JDK)、Web服务器(如Tomcat)以及集成开发环境(IDE)。配置过程涉及设置环境变量、部署服务器等步骤。 - **1.5 JSP页面的测试** - 测试JSP页面主要包括检查页面...

    Ontology理论研究和应用建模(国内高手总结).doc

    OWL Lite适合简单的Ontology,OWL DL具有完全的逻辑基础,支持推理,而OWL Full是最通用但语义最模糊的子语言。 4. OWL文档结构举例 4.1 命名空间:用于区分不同源的Ontology元素。 4.2 头:包含Ontology的基本...

Global site tag (gtag.js) - Google Analytics