java 调用servlet_JAVA WEB之Servlet使用

packagecom.servlet;importcom.dao.UserDao;importcom.test.JDBconne;importjava.io.IOException;importjava.sql.Connection;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;public class LoginServlet extendsHttpServlet

{privateConnection connection;public void init() throwsServletException

{super.init();//获得数据库连接

connection=JDBconne.getConnetion();

}public voiddestroy()

{super.destroy();//关闭数据库连接

JDBconne.closeConnection();

}protected voiddoGet(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException

{

doPost(request, response);

}protected voiddoPost(HttpServletRequest request, HttpServletResponse response)throwsServletException, IOException

{//获得界面中输入数据

String username=request.getParameter("Username");

String password=request.getParameter("Password");

UserDao userDao= newUserDao();//check方法 进行数据库比较 判断有没该用户

boolean value =userDao.check(connection, username, password);if(value)

{

request.getSession().setAttribute("username", username);

request.getRequestDispatcher("userMain.jsp").forward(request, response);

}else{

request.getRequestDispatcher("loginfaild.jsp").forward(request, response);

}

}

}

Servlet生命周期有:

初始化,init()方法实现;第一次被访问时,Servlet被创建,然后执行init方法,可以进行初始化工作,如连接数据库。

服务阶段,service()方法实现;用于处理doGet()和doPost()方法。

销毁,destroy()方法实现;回收资源,Servlet服务器正常关闭时,执行destroy方法,只执行一次。

而HTTPServlet是一般自定义Servlet去继承的,它以实现init(),destroy()和service()方法,因此只需继承即可,若想进行资源的初始化或者释放,可以重写inti()和destroy(0方法。而重写doPost()和doGet()方法几乎是必须的。我们以doPost()为例熟悉他的流程。

首先用

request.getParameter("Username")

request.getParameter("Password")

获取JSP传递的数据,参数是表单中元素的name!

接下来dao部分之后在说,作用主要是判断是否存在这对用户名和密码在数据库中是否存在并且返回bool值,如果正确:

request.getSession().setAttribute("username", username);

request.getRequestDispatcher("userMain.jsp").forward(request, response);

前一句代码与Session有关,前面提到了JSP传递数据可以使用url,表单和Session等,这里使用Session设置一个属性保存用户名,并且进入新的页面,而且新页面能够通过getAttribute()方法获取,这都是后话。如果错误:

request.getRequestDispatcher("loginfaild.jsp").forward(request, response);

直接进入登陆失败的界面。getRequestDispatcher()和sendRedirect()方法的区别,前者是服务器内部的跳转,后者是页面重定向,可以跳转至任意网址;前者是request调用,后者是response调用。

4. DAO和javabean的设计

UserDao具体作用是用户类与数据库交互的类,而用户类即User类,是Javabean的组成部分。

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.dao;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.sql.Statement;importjava.util.ArrayList;public classUserDao

{//insert方法 向数据库中插入用户信息

public intinsert(Connection connection, User user)

{int value=-1;

PreparedStatement statement=null;

String sql="insert into user(Username,Password,Name,Sex,Tel,Email) values(?,?,?,?,?,?)";try{

statement=connection.prepareStatement(sql);

statement.setString(1,user.getUsername());

statement.setString(2,user.getPassword());

statement.setString(3,user.getName());

statement.setString(4,user.getSex());

statement.setString(5,user.getTel());

statement.setString(6,user.getEmail());

value=statement.executeUpdate();

}catch(SQLException ex)

{

ex.printStackTrace();

}finally{try{if(statement != null) statement.close();

}catch(SQLException ex)

{

}

}returnvalue;

}//check方法 根据登录界面传输的用户名和密码与数据库进行比较//如果有这用户名则返回真,每有责返回假

public booleancheck(Connection connection, String username, String password)

{boolean value = false;

PreparedStatement statement= null;

ResultSet resultSet= null;

String sql= "select Username from user where Username = ? and Password = ?";try{//获得PreparedStatement对象,并填充

statement =connection.prepareStatement(sql);

statement.setString(1,username);

statement.setString(2,password);

resultSet=statement.executeQuery();while(resultSet.next())

{

value= true;

}returnvalue;

}catch(SQLException e)

{

}finally{try{if(resultSet != null) resultSet.close();if(statement != null) statement.close();

}catch(SQLException e)

{

}

}returnvalue;

}//getUser方法 根据username 进行数据库查询操作//将查询出的值放入User对象中 并返回该对象

publicUser getUser(Connection connection, String username)

{

User user=newUser();

String sql="select Username,Password,Name,Sex,Tel,Email from user where Username=?";

PreparedStatement statement=null;

ResultSet result=null;try{

statement=connection.prepareStatement(sql);

statement.setString(1,username);

result=statement.executeQuery();while(result.next())

{

user.setUsername(result.getString("Username"));

user.setPassword(result.getString("Password"));

user.setName(result.getString("Name"));

user.setSex(result.getString("Sex"));

user.setTel(result.getString("Tel"));

user.setEmail(result.getString("Email"));

}returnuser;

}catch(SQLException e)

{

}finally{try{if(statement!=null)statement.close();if(result!=null)result.close();

}catch(SQLException e)

{

}

}returnuser;

}//Update 获得用户修改后的信息 进行数据库的修改操作

public intUpdate(Connection connection, User user)

{int value = -1;

PreparedStatement statement= null;

String sql= "update user set Name = ?, Sex = ?, Tel = ?, Email = ? where Username = ?";try{//获得PreparedStatement对象

statement =connection.prepareStatement(sql);//填充statement的参数

statement.setString(1, user.getName());

statement.setString(2, user.getSex());

statement.setString(3, user.getTel());

statement.setString(4, user.getEmail());

statement.setString(5, user.getUsername());//执行修改操作

value =statement.executeUpdate();

}catch(SQLException e)

{

}finally{try{if(statement != null) statement.close();//if(connection != null) connection.close();

}catch(SQLException e)

{

}

}returnvalue;

}//UpdatePass 根据用户输入的密码 进行输入密码修改操作

public intUpdatePass(Connection connection,String Password,String username)

{int value = -1;

PreparedStatement statement= null;

String sql= "update user set Password = ? where Username = ?";try{//获得PreparedStatement对象

statement =connection.prepareStatement(sql);//填充statement的参数

statement.setString(1, Password);

statement.setString(2, username);//执行修改操作

value =statement.executeUpdate();

}catch(SQLException e)

{

}finally{try{if(statement != null) statement.close();//if(connection != null) connection.close();

}catch(SQLException e)

{

}

}returnvalue;

}

}

UserDao

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.dao;importjava.io.Serializable;public class User implementsSerializable

{//JavaBean//用于储存用户信息

private static final long serialVersionUID = 1L;privateString username;private transientString password;privateString name;privateString sex;privateString tel;privateString email;publicString getEmail()

{returnemail;

}public voidsetEmail(String email)

{this.email =email;

}publicString getName()

{returnname;

}public voidsetName(String name)

{this.name =name;

}publicString getPassword()

{returnpassword;

}public voidsetPassword(String password)

{this.password =password;

}publicString getTel()

{returntel;

}public voidsetTel(String tel)

{this.tel =tel;

}publicString getSex()

{returnsex;

}public voidsetSex(String sex)

{this.sex =sex;

}publicString getUsername()

{returnusername;

}public voidsetUsername(String username)

{this.username =username;

}

}

User

其中的代码均已复习过,至此,一个的完整MVC架构已经呈现,其实现在Servlet技术已落后于潮流,这两篇博客也不是要进行相关语法的学习,而是大致了解web开发的基础知识,能够理解其中的开发思想,这也是永远不会落后过时的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值