jsp通讯录登录与添加

记录一下Javaee的学习

首先讲一下什么是jsp?

万事先百度。

    JSP全名为Java ServerPages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。

    其实说白了,就是html+java+js+css。sun公司想把java向网页推广的产品,不过确实很成功。

    讲一下jsp运行的原理,和设计jsp项目的流程。

    login.jsp--->LoginServlet--->LoginService--->jdbcUtil.java--->数据库

    不管是jsp还是servlet,当Tomcat服务器开启的时候,tomcat容器都会去加载jsp,说到底最后还是会被jvm编译成一个class文件,jvm认识的java代码会编译成class,不认识的html代码则会被out打印成字符串,留给浏览器解析。其实说到底还是java。

    列举到登录验证过程,当用户输入账号和密码,点击提交的时候,form表单则将请求以method(post,get),账号密码比较重要的数据,一般用post提交,则不会在地址栏显示。此时地址则会改变,比如login.jsp会变成LoginServlet,Servlet做相应逻辑处理,但是做事的还是service,与dao数据库打交道是service,而servlet只是向service要数据。然后servlet通过数据库里的账号和密码验证后,则通过转发或者重定向,跳转到另一个jsp。

   因此jsp项目的设计流程是:

   表设计--->jdbcUtil-->bean-->service-->jsp-->servlet

一般是先设计数据库,最后再设计servlet,中间大同小异。

废话不多说,直接贴代码。

实现通讯录添加、显示。要求如下:

1) 用户只有登录后才能对通讯录进行添加和查询显示

2) 如果用户没有登录直接访问通讯录维护页面,则提示用户先进行登录,然后点击链接让其跳转至登录页面进行登录。

流程如下:

1) 用户访问登录页面,输入用户名、密码,点击提交,进入servlet验证用户名密码的正确性。

2) 如果验证成功,则跳转至新的jsp页面,显示所有的通讯录信息,并在右上角显示当前登录用户名;如果验证不成功,则跳转至登录页面。

3) 在通讯录显示页面,有一个”添加通讯录”的按钮,点击后进行添加通讯录页面,并进行添加。

4) 退出系统

5) 统计访问人数


环境:myeclipse2014 jdk1.7 mysql tomcat7

mysql数据库表结构

一个用户表(users) 一个用来存储用户好友的表(persons)

users表:

create table users

(

    username varchar(10) primary key,

    password varchar() not null

)

persons表:

create table persons

    username varchar(10) references users(username),

    id int(20) primary key auto_increment,

    name varchar(10) not null,

    tel varchar(30),

    address varchar(20)

)

login.jsp(登录界面)

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%
    String num=(String)application.getAttribute("num");
    if(num==null){
    	//第一次访问
    	application.setAttribute("num", "1");
    }else{
    	int num_ = Integer.parseInt(num);
    	num_ +=1;
    	application.setAttribute("num", String.valueOf(num_));
    }
 %>
<!DOCTYPE>
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>Login</title>
  </head>
  
  <body>
  <p>网站访问次数,<%=application.getAttribute("num") %></p>
   	<form action="AddressServlet" method="post">
   		用户名:<input type="text" id="username" name="username" size="20" required="required"/>
   		密码:<input type="password" id="password" name="password" size="20" required="required"/>
   		<input type="hidden" id="type" name="type" value="login"/>
   		<input type="submit" value="提交"> 
   	</form>
  </body>
</html>

list.jsp(显示信息界面)

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

<!DOCTYPE>
<html>
  <head>
    <base href="<%=basePath%>">
    <title>list</title>
  </head>
  
  <body>
  <p>当前在线人数:${userCounts }</p>
  <p>正在登录的用户是:<%=request.getAttribute("user") %></p>
  <a href="add.jsp">添加通讯录</a>
    <div>
   	<table border="1" style="border-collapse:collapse">
   		<tr>
	   		<th>用户编号</th>
	   		<th>姓名</th>
	   		<th>手机</th>
	   		<th>地址</th>
   		</tr>
   			<%
   			Object getlists=request.getAttribute("personlists");
   			ArrayList<Person> personlists=(ArrayList<Person>)getlists;
   		
   		
   			if(personlists!=null)
   			{
   				for(Person p:personlists)
   				{
   			%>
   					<tr>
   						<td>
   							<%= p.getId() %>
   						</td>
   						<td>
   							<%= p.getName() %>
   						</td>
   						<td>
   							<%= p.getTel() %>
   						</td>
   						<td>
   							<%= p.getAddress() %>
   						</td>
   					</tr>
   			<% 
   				}
   			}
   			else
   			{%>
   				<tr>
   					<td>没有数据</td>
   				</tr>
   			 <%
   			}
   			%>
   	</table>
   </div> 
  </body>
</html>

add.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>
  <head>
    <base href="<%=basePath%>">
    
    <title>add</title>
    

  </head>
  
  <body>
  <form action="AddressServlet" method="post">
    姓名<input type="text" id="name" name="name" size="20" required="required"/>
    手机<input type="text" id="tel" name="tel" size="20" required="required"/>
    地址<input type="text" id="address" name="address" size="20" required="required"/>
    <input type="hidden" id="type" name="type" value="add">
    <input type="submit" value="添加"/>
   </form>
  </body>
</html>

AddressServlet(web层)

package com.work.web;

import java.io.IOException;
import java.io.PrintWriter;

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

import com.work.bean.Person;
import com.work.bean.User;
import com.work.dao.PUtil;
import com.work.service.AddressService;

public class AddressServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		String name=request.getParameter("name");
		String tel=request.getParameter("tel");
		String address=request.getParameter("address");
		String type=request.getParameter("type");
		User user;
		Person p;
		if(!"".equals(username))
		{
			user=new User(username,password);
			request.setAttribute("user", username);
		}
		if(!"".equals(type)&&type!=null&&!"".equals(username)&&"login".equals(type))
		{
			if(AddressService.islogin(username, password))
			{
				user = new User(username, password);
				request.setAttribute("personlists", AddressService.list(username));
				//request.setAttribute("adminname", adminname);
				request.getSession().setAttribute("user", user);
				PUtil.uname=username;
				request.getRequestDispatcher("/list.jsp").forward(request, response);
			}
			else
			{
				request.getRequestDispatcher("/login.jsp").forward(request, response);
			}
			
		}
		if(!"".equals(type)&&type!=null&&!"".equals(username)&&"add".equals(type))
		{
			p=new Person(name, tel, address);
			if(AddressService.add(p,PUtil.getUname()))
			{
				request.setAttribute("user", PUtil.uname);
				request.setAttribute("personlists", AddressService.list(PUtil.uname));
				request.getRequestDispatcher("/list.jsp").forward(request, response);
			}
			else
			{
				request.getRequestDispatcher("/add.jsp").forward(request, response);
			}
		}
		
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		this.doGet(request, response);
	}

}

AddressService.java(service层)

package com.work.service;

import java.util.ArrayList;

import com.work.bean.Person;
import com.work.dao.PUtil;

public class AddressService {
	//登录验证
	public static boolean islogin(String username,String pwd)
	{
		return PUtil.islogin(username, pwd);
	}
	//查看通讯录里的好友
	public static ArrayList<Person> list(String username)
	{
		return PUtil.list(username);
	}
	//添加通讯录好友
	public static boolean add(Person p,String username)
	{
		return PUtil.add(p, username);
	}
	//添加新用户
	public static boolean addUser(String username,String pwd)
	{
		return PUtil.addUser(username, pwd);
	}
}

SessionListener.java(监听器)

package com.work.listener;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class SessionListener implements HttpSessionListener,HttpSessionAttributeListener{
    private int userCounts = 0;//在线人数
	@Override
	public void attributeAdded(HttpSessionBindingEvent be) {
		System.out.println("session添加属性"+be.getName()+"--"+be.getValue());
		
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent be) {
		System.out.println("session移除属性"+be.getName()+"--"+be.getValue());
		
	}

	@Override
	public void attributeReplaced(HttpSessionBindingEvent be) {
		System.out.println("session替换属性"+be.getName()+"--"+be.getValue());
		
	}

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		userCounts++;
		se.getSession().setAttribute("userCounts", userCounts);
		System.out.println("新的会话创建===="+se.getSession().getId());
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
	    userCounts--;
	    se.getSession().setAttribute("userCounts", userCounts);
	    System.out.println("会话销毁===="+se.getSession().getId());
		
	}

}

Afilter.java(过滤器)

package com.work.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

public class Afilter implements Filter {

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		// TODO Auto-generated method stub
		HttpServletRequest request=(HttpServletRequest)arg0;
		HttpServletResponse response=(HttpServletResponse)arg1;
		String currentURL = request.getRequestURI();   
        String targetURL = currentURL.substring(currentURL.indexOf("/", 1),  
                currentURL.length());  
        HttpSession session = request.getSession(false);  
        if (!"/login.jsp".equals(targetURL)) {// 判断当前页是否是重定向以后的登录页面页面,如果是就不做session的判断,防止出现死循环  
            if (session == null || session.getAttribute("user") == null) {  
                // *用户登录以后需手动添加session  
                System.out.println("request.getContextPath()="  
                        + request.getContextPath());  
                response.sendRedirect(request.getContextPath() + "/login.jsp");  
                // 如果session为空表示用户没有登录就重定向到login.jsp页面  
                return;  
            }  
        }  
        // 加入filter链继续向下执行  
        arg2.doFilter(request, response);  
	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("过滤器已经回收...");
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("过滤器正在过滤...");
	}

}

PUtil.java(dao层)

package com.work.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import com.work.bean.Person;



public class PUtil {
	static Connection conn;
	static PreparedStatement ps;
	static ResultSet rs;
	static ArrayList<Person> plists;
	public static String uname;
	private static final String DBDRIVER="com.mysql.jdbc.Driver";
	private static String USERNAME="root";
	private static String PASSWORD="123456";
	private static String URL="jdbc:mysql://localhost:3306/qq";
	//添加用户
	public static boolean addUser(String username,String pwd)
	{
		try {
			Class.forName(DBDRIVER);
			conn=DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql="insert into users values(?,?)";
			ps=conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, pwd);
			ps.execute();
			return true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return false;
	}
	//验证用户登录
	public static boolean islogin(String username,String pwd)
	{
		try {
			Class.forName(DBDRIVER);
			conn=DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql="select * from users where username=? and password=?";
			ps=conn.prepareStatement(sql);
			ps.setString(1, username);
			ps.setString(2, pwd);
			rs=ps.executeQuery();
			while(rs.next())
			{
				if(rs.getString("username").equals(username)&&rs.getString("password").equals(pwd))
				{
					return true;
				}
			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return false;
	}
	//查看全部
	public static ArrayList<Person> list(String username)
	{
		Person person;
		try {
			Class.forName(DBDRIVER);
			conn=DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql="select * from persons where username=?";
			ps=conn.prepareStatement(sql);
			ps.setString(1, username);
			rs=ps.executeQuery();
			plists=new ArrayList<>();
			while(rs.next())
			{
				person=new Person(rs.getInt("id"),rs.getString("name"),rs.getString("tel"), rs.getString("address"));
				plists.add(person);
			}
			return plists;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				rs.close();
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return null;
	}
	//添加通讯录的好友
	public static boolean add(Person p,String username)
	{
		try {
			Class.forName(DBDRIVER);
			conn=DriverManager.getConnection(URL, USERNAME, PASSWORD);
			String sql="insert into persons(username,name,tel,address) values(?,?,?,?)";
			ps=conn.prepareStatement(sql);
			ps.setString(1,username);
			ps.setString(2, p.getName());
			ps.setString(3, p.getTel());
			ps.setString(4, p.getAddress());
			ps.execute();
			return true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			try {
				ps.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return false;
	}
	public static String getUname() {
		return uname;
	}
	public static void setUname(String uname) {
		PUtil.uname = uname;
	}
	
}

Person.java(bean)

package com.work.bean;

public class Person {
	int id; 
	String name;
	String tel;
	String address;
	public Person() {
	}
	
	public Person(int id,String name, String tel, String address) {
		this.id=id;
		this.name = name;
		this.tel = tel;
		this.address = address;
	}
	public Person(String name, String tel, String address) {
		this.name = name;
		this.tel = tel;
		this.address = address;
	}
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

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

	public String getTel() {
		return tel;
	}
	public void setTel(String tel) {
		this.tel = tel;
	}
	public String getAddress() {
		return address;
	}
	public void setAddress(String address) {
		this.address = address;
	}
	
}

User.java(bean)

package com.work.bean;

public class User {
	String username;
	String password;
	public User()
	{
		
	}
	
	public User(String username, String password) {
		super();
		this.username = username;
		this.password = password;
	}

	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;
	};
	
}

web.xml(配置文件有很严格的顺序要求 filter-->servlet-->listener-->session)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    
    <filter>
        <filter-name>Afilter</filter-name>
        <filter-class>com.work.filter.Afilter</filter-class>
         <init-param>
            <param-name>encoding</param-name>
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>Afilter</filter-name>
        <url-pattern>*.jsp</url-pattern>
        
    </filter-mapping>
    <!-- 监听器的配置 (被动执行的,当相关对象的事件发生时执行) -->
  <listener>
   <listener-class>com.work.listener.SessionListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>AddressServlet</servlet-name>
    <servlet-class>com.work.web.AddressServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>AddressServlet</servlet-name>
    <url-pattern>/AddressServlet</url-pattern>
  </servlet-mapping>
  <!-- session时长设置 单位:分-->
  <session-config>
    <session-timeout>1</session-timeout>
  </session-config>
</web-app>

还有mysql jdbc jar 可以去mysql官网下载

https://dev.mysql.com/downloads/connector/j/

posted @ 2018-03-02 08:48  TroubleBoy丶  阅读(228)  评论(0编辑  收藏  举报