web书城项目-servlet实现

一、数据库连接c3p0--工具类

public class JDBCUtils {

//数据源是一个重量级对象,在项目中有一个实例即可,所以声明成静态成员

private static DataSource dataSource = new ComboPooledDataSource ("webDataSource" );

public static Connection getConnection(){

Connection connection = null;

try {

connection = dataSource . getConnection() ;

catch ( SQLException e ) {

e . printStackTrace() ;

}

return connection;

}

/**

* 释放数据库连接

@param connection

*/

public static void releaseConnection (Connection connection ) {

try {

if (connection != null ){

connection . close() ;

}

catch ( SQLException e ) {

e . printStackTrace() ;

}

}

}


二、 规定 Dao实现类的功能,上层程序根据接口功能使用 Dao实现类。当实现类发生改变时,只要接口不变,上层的调用方式就不需要改变。

DAO接口定义:

public interface DAO <T > {

//实现数据库的增删改

void update (Connection conn ,String sql ,Object ... params) ;

//查询数据库返回单一对象

T getBean (Connection conn ,String sql ,Object ... params) ;

//查询数据库返回对象的集合

List < TgetBeanList (Connection conn ,String sql ,Object ... params) ;

}

UserDao接口定义:

public interface UserDAO {

//1.根据用户名和密码获取用户对象

User getUser (User user) ;

//2.根据用户名获取用户对象

User getUserByName (User user) ;

//3.保存用户对象

void saveUser (User user) ;

}

三、DAO实现类

DaoImpl实现类:

// Dao基类,使用时通过子类继承,传入泛型参数。创建子类对象使用。

public class DaoImpl <T > implements DAO <T >{

//使用QueryRunner对象

private QueryRunner runner =new QueryRunner() ;

//定义泛型对象

private Class< T > beanType =null;

public DaoImpl () {

Type superClass =this. getClass() . getGenericSuperclass() ;

if (superClass instanceof ParameterizedType){

ParameterizedType pt =( ParameterizedType) superClass ;

Type [] types = pt .getActualTypeArguments ();

beanType =( Class) types [0 ]; //获取泛型参数T,获得实际类型值对应的Class类对象

}

}

@Override

public void update( Connection conn, String sql, Object... params ) {

try {

runner .update (conn , sql, params) ;

catch ( Exception e ) {

e . printStackTrace() ;

}

}

@Override

public T getBean( Connection conn, String sql, Object... params ) {

T t =null ;

try {

t = runner . query( conn, sql , new BeanHandler <T >( beanType) , params) ;

catch ( Exception e ) {

e . printStackTrace() ;

}

return t;

}

@Override

public List< T > getBeanList (Connection conn , String sql , Object ... params ) {

List < T> beanList =null;

try {

beanList = runner . query( conn, sql , new BeanListHandler <>( beanType) ,params );

catch ( Exception e ) {

e . printStackTrace() ;

}

return beanList;

}

}

UserDaoImpl实现类:

public class UserDaoImpl extends DaoImpl < User> implements UserDAO {

@Override

public User getUser (User user) {

Connection conn =JDBCUtils . getConnection() ;

String sql ="SELECT
user_id userId,user_name userName,user_pwd pwd,user_email email FROM `user`"

+ "
WHERE user_name=? AND user_pwd=?" ;

User querUser = this. getBean( conn , sql , user. getUserName() , user. getPwd()) ;

JDBCUtils . releaseConnection( conn) ;

return querUser;

}

@Override

public User getUserByName (User user) {

Connection conn = JDBCUtils .getConnection ();

String sql ="SELECT
user_id userId,user_name userName,user_pwd pwd,user_email email FROM `user`"

+ "
WHERE user_name=? " ;

User queryUser = this. getBean( conn, sql , user. getUserName()) ;

JDBCUtils . releaseConnection( conn) ;

return queryUser;

}

@Override

public void saveUser( User user) {

Connection conn =JDBCUtils . getConnection() ;

String sql = "INSERT
INTO `user` (user_name,user_pwd,user_email) VALUES(?,?,?)";

System . out. println( user .getUserName ());

this. update( conn , sql , user. getUserName() , user. getPwd() , user. getEmail()) ;

JDBCUtils . releaseConnection( conn) ;

}

}

测试UserDAO

public class UserDaoTest {

private UserDaoImpl userDao =new UserDaoImpl() ;

@Test

public void testGetUser() {

User user =userDao . getUser( new User( null, "tzq", "123" , null ));

System . out. println( user) ;

//User [userId=1, userName= tzqpwd=123, [email protected]com]

}

@Test

public void testGetUserByName() {

User user =userDao . getUserByName( new User ( null, "admin" , nullnull)) ;

System . out. println( user) ;

//User [userId=2, userName= adminpwd=122, [email protected]com]

}

@Test

public void testSaveUser() {

User user = new User( null, "谭正强", "123456", "[email protected]" );

userDao .saveUser (user );

System . out. println( "数据保存成功" );

}

}


四、定义判断能否登陆的接口方法

public interface UserServiceInter {

//根据用户名、密码校验用户能否登陆

boolean login (User user) ;

//根据用户名验证能否注册,如果可以注册,则将User对象保存到数据库中

boolean regist (User user) ;

}

五、创建UserServiceInter 接口的实现类UserServiceImpl

public class UserServiceImpl implements UserServiceInter {

private UserDAO userDao =new UserDaoImpl() ;

@Override

public boolean login( User user) {

User queryuser = userDao. getUser( user) ;

return queryuser!= null;

}

@Override

public boolean regist( User user) {

User userByName = userDao. getUserByName (user );

if (userByName ==null ){

userDao .saveUser (user );

return true ;

else{

return false ;

}

}

}

测试UserService

public class UserServiceTest {

private UserServiceInter userService = new UserServiceImpl ();

@Test

public void testLogin() {

User user =new User ( null, "tzq" , "123" , null );

boolean login = userService .login (user );

if (login ){

System . out. println( "登陆成功" );

else{

System . out. println( "登陆失败" );

}

}

@Test

public void testRegist() {

User user = new User( null, "tzqq", "123", "[email protected]" );

boolean regist = userService .regist (user );

if (regist ) {

System . out. println( "注册成功" );

else{

System . out. println( "注册失败" );

}

}

}


六、创建登陆以及注册Servlet

登陆处理逻辑:接受请求→处理请求→转发

public class LoginServlet extends HttpServlet {

private static final long serialVersionUID = 1L ;

protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

//1.获取请求参数

String userName = request. getParameter( "userName" );

String pwd = request .getParameter ("pwd" );

User user = new User( null, userName , pwd , null );

//2.处理请求参数

UserServiceImpl userServiceImpl = new UserServiceImpl ();

boolean login = userServiceImpl . login( user) ;

//3.派发页面

if (login ) {

//如果登录成功转发到loginSuccess.html

//①转发是服务器端完成,所以路径由服务器解析

//②第一个“/”代表当前Web应用的根目录

request . getRequestDispatcher( "/client/user/loginSuccess.html" ). forward( request , response );

else{

//如果登录失败重定向到loginError.html

//①重定向中指定的地址是浏览器解析

//②第一个“/”代表当前服务器,还需要进一步指定当前Web应用的虚拟路径,通常为当前Web工程的名字

response . sendRedirect( "/BookStore02/client/user/loginError.html" );

}

}

}

注册处理逻辑:接受请求→处理请求→转发

public class RegistServlet extends HttpServlet {

private static final long serialVersionUID = 1L ;

protected void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {

//1.获取请求参数

String userName = request. getParameter( "userName" );

String pwd = request .getParameter ("pwd" );

String email = request .getParameter ("email" );

User user = new User( null, userName , pwd , email) ;

//2.处理请求参数

UserServiceImpl userServiceImpl = new UserServiceImpl ();

boolean regist = userServiceImpl . regist( user) ;

//3.派发页面

if (regist ) {

//如果注册成功转发到registSuccess.html

request . getRequestDispatcher( "/client/user/registSuccess.html" ). forward( request , response );

else{

//如果注册失败重定向到registError.html

response . sendRedirect( "/BookStore02/client/user/registError.html" );

}

}

}

项目图展示:

时间: 2024-10-26 12:07:24

web书城项目-servlet实现的相关文章

网上书城项目总结(servlet_jsp+javaBean)

网上书城项目总结 1 项目大纲设计: 需求分析 系统设计 详细设计 权限设计 2 技术选型: Servlet+jsp+javaBean Listener+Filter+jstl+fileupload+c3p0+dbutils+mysql 3 开发顺序: 从dao层到service层再到web层 网上书城需求分析: 分别对管理员,普通用户,系统三个用户角色的各个功能的实现. 其中包括管理员对图书商城的后台图书以及图书的类别分类增删查改,以及订单的状态; 普通用户对于图书的选购,浏览,购物车的管理以

web开发之Servlet 一

因为最近在研究公司一套新的框架,发现这套框架的底层是对Struts2,Spring 封装后的WEB应用框架,而我发现如果仅仅是利用这个框架开发,确实很容易快速上手,做业务来说是没有问题的,但我觉得如果只对上层如何去用熟悉是不行,必须要学习其底层是如何玩的,而任何一套WEB应用框架的开发,肯定都是基于Servlet 对象中各个方法的生命周期来进行的,因此对Servlet的研究是有必要,虽然以前学过,但是很多原理都遗忘了,为此决定重新学习一下. 本人的开发工具和环境是:Myeclipse + Tom

网上书城项目

实习就要结束了,最终要上交的是网上书城项目和一份文档.接下来简要介绍一下项目. 项目是根据三层架构来写,数据访问层(DAO层).系统业务逻辑控制处理层(servlet层).和界面层(jsp). 首先在DAO层构造好SQL语句,对数据库进行操作,在servlet层调用Dao层相关方法进行相应的逻辑处理,JSP负责构造界面以及显示数据. 下面贴出代码,仅供参考,一些功能的具体实现在功能说明时有所介绍,只贴一些比较重要的部分的代码,大家主要重在理解. 此次项目,我感觉比较困难的部分是 加入购物车 部分

java web.xml listener servlet 和filter的加载顺序

在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是,加载顺序与它们在 web.xml 文件中的先后顺序无关.即不会因为 filter 写在 listener 的前面而会先加载 filter. 最终得出的结论是:listener -> filter -> servlet 同时还存在着这样一种配置节:context-param,它用于向 Servle

Java Web入门项目之“网络交友”的设计与实现

前言:这个小项目是我刚学习JSP时,参考"JSP程序设计"这本书写的.这里之所以说参考这本书而不是照着这本书写,主要是因为我自己完成的时候删掉了不少繁琐的写法(比如:文件上传):同时对书中容易产生SQL注入漏洞,XSS跨站脚本漏洞等地方的写法进行了修改过滤:登录页面加上了随机验证码.除此之外,还添加了文件管理功能 PS:整个项目没有特别的难点,可以分为一个个功能点实现,大神轻喷,个人认为对初学Java Web的童鞋还是有参考意义的 注:整个项目的完整源代码和sql文件我会在文末给出下载

JAVA Web学习篇--Servlet

Servlet由来 做过BS项目的人都知道,浏览器可以依据HTML静态标记语言来显示各式各样的网页.可是假设我们须要在网页上完毕一些业务逻辑:比方登陆验证.或者说网页显示的内容在server的数据库中.假设是这样,除了负责显示的HTML标记之外,必须还要有完毕这些业务功能的代码存在.这样的网页我们就叫做动态网页. 对于静态网页而言,server上存在的是一个个纯HTML文件.当client浏览器发出HTTP请求时,server能够依据请求的URL找到相应的HTML文件,并将HTML代码返回给cl

web请求:servlet处理请求

1 WEB服务器 |- Web Server |- Http Server |- Application Server |- Servlet Container |- CGI Server |- ...... 1.1 Http Server 运行在服务器之上,绑定服务器的IP地址并监听某一个tcp端口来接收并处理HTTP请求,浏览器就能够通过HTTP协议来获取服务器上的网页(HTML格式).文档(PDF格式).音频(MP4格式).视频(MOV格式)等等资源.一个HTTP Server关心的是HT

Web容器和Servlet生命周期

为何需要Web容器 Web服务器本身主要用于支持http协议,包括监听和相应http请求.web服务器一般处理静态的请求,如文件系统中的静态文件.web容器则是为web相关的组件提供运行环境,可以从'容器'一词稍微理解其含义. 简单说,web服务器和web容器本身只是一个平台的应用程序而已.因此,为了理解其作用,假设在没有web服务器和web容器的情况下,我们如何响应客户端请求.从网络编程的角度来看,我们需要: new一个ServerSocket监听在一个端口上 调用accept等待客户端连接

Java使用Jetty实现嵌入式Web服务器及Servlet容器

首先来介绍下 Jetty,根据 wiki 的介绍: Jetty 是一个纯粹的基于 Java 的网页服务器和 Java Servlet 容器.尽管网页服务器通常用来为人们呈现文档,但是 Jetty 通常在较大的软件框架中用于计算机与计算机之间的通信. Jetty 作为 Eclipse 基金会的一部分,是一个自由和开源项目.该网页服务器被用在 Apache ActiveMQ.Alfresco.Apache Geronimo.Apache Maven.Google App Engine.Eclipse