一、实现的功能
1.项目介绍:
项目名称:
尚学堂后台管理系统
项目需求:
实现用户登录;
实现用户退出;
实现用户注册;
2.功能介绍:
用户登录:
根据用户名和密码查询用户信息。查到则登录成功,查不到则登录失败。
用户退出:
用户退回到登录页面,销毁session。
用户户注册:
将用户注册信息插入数据库
3.数据库的设计:
用户表:t_user
用户id:uid
用户名:uname
用户密码:pwd
用户性别:sex
用户年龄:age
出生日期:birthday
4.SQL语句设计:
用户登录:
select * from t_user where uname=? and pwd=?;
用户注册:
insert into t_user values(default,?,?,?,?,?);
- 代码实现:
使用的MySQL数据库。
可以使用语句或者客户端工具直接创建。
二、实现步骤
1.用户登录:
(1)用户点击登录发送请求到UserServlettomcat服务器接收到请求后调用UserServlet中service方法进行请求处理,并将封存了相关数据的request对象和response对象作为实参传递给service方法。
(2)在UserServlet中调用业务层方法进行登录业务处理。
(3)在业务层方法中调用Dao层方法完成数据库操作。
(4)完成功能跳转。
- 登录的界面
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!--
添加前端代码书写插件
插件在资料中,将查询包放到myEclipse的安装目录中的drops文件中,然后重启myEclipse即可。
安装后快捷键为:ctrl+E
模版套用:
在自己的项目中创建模版对应的jsp文件
将jsp文件中的basepath代码移动到其他位置
然后将模版中的HTML代码整个复制到对应的jsp中
然后将basepath在移动会head标签中
将模版中的前端资源文件复制到webRoot下。
-->
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="renderer" content="webkit">
<title>登录</title>
<link rel="stylesheet" href="css/pintuer.css">
<link rel="stylesheet" href="css/admin.css">
<script src="js/jquery.js"></script>
<script src="js/pintuer.js"></script>
</head>
<body>
<div class="bg"></div>
<div class="container">
<div class="line bouncein">
<div class="xs6 xm4 xs3-move xm4-move">
<div style="height:150px;"></div>
<div class="media media-y margin-big-bottom"></div>
<form action="user" method="post">
<div class="panel loginbox">
<div class="text-center margin-big padding-big-top">
<h1>尚学堂后台管理中心</h1>
</div>
<!-- 声明java代码块 -->
<%
//获取session中 的标记
Object obj = session.getAttribute("flag");
if (obj != null) {
if ("loginFalse".equals((String) obj)) {
%>
<div style="text-align: center;color:red;">用户名或密码错误</div>
<%
} else if ("regSuccess".equals((String) obj)) {
%>
<div style="text-align:center;color:red;">用户注册成功</div>
<%
}
}
session.invalidate();
%>
<div class="panel-body"
style="padding:30px; padding-bottom:10px; padding-top:10px;">
<div class="form-group">
<div class="field field-icon-right">
<input type="text" class="input input-big" name="uname"
placeholder="登录账号" data-validate="required:请填写账号" /> <span
class="icon icon-user margin-small"></span>
</div>
</div>
<div class="form-group">
<div class="field field-icon-right">
<input type="password" class="input input-big" name="pwd"
placeholder="登录密码" data-validate="required:请填写密码" /> <span
class="icon icon-key margin-small"></span>
</div>
</div>
<div class="form-group">
<div class="field">
<input type="text" class="input input-big" name="code"
placeholder="填写右侧的验证码" data-validate="required:请填写右侧的验证码" />
<img src="images/passcode.jpg" alt="" width="100" height="32"
class="passcode" style="height:43px;cursor:pointer;"
onclick="this.src=this.src+'?'">
</div>
</div>
</div>
<div style="padding:30px;">
<input type="submit"
class="button button-block bg-main text-big input-big"
value="登录">
</div>
<div style="font-size:15px;position: relative;left:350px ;top:-20px ;"><a href="reg.jsp">注册</a></div>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
jsp实现的登录界面
- UserServlet
package com.zlw.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zlw.pojo.User;
import com.zlw.service.UserService;
import com.zlw.service.impl.UserServiceImpl;
/**
* 用户登录:
* 1、 用户点击登录发送请求到UserServlet
* tomcat服务器接收到请求后调用UserServlet中service方法进行请求处理,并将封存了相关数据的
* request对象和response对象作为实参传递给service方法
* 2、在UserServlet中调用业务层方法进行登录业务处理
* 3、在业务层方法中调用Dao层方法完成数据库操作
* 4、完成功能跳转
* MVC分层开发:
* M:model service层和dao层和实体类层
* V:view 视图层 jsp页面等
* C:controller 控制层 servlet
* @author zhang
*
*/
public class UserServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应编码格式
response.setContentType("text/html;charset=utf-8");
//获取请求信息
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//处理请求信息
// System.out.println(uname+":"+pwd);
//处理业务逻辑层
UserService us = new UserServiceImpl();
User user=us.getUserInfoService(uname, pwd);
// System.out.println(user);
//处理响应结果
//创建session对象
HttpSession hs = request.getSession();
if (user!=null) {//登录成功
//将用户信息存储在session中
hs.setAttribute("user", user);
//重定向到main.jsp
response.sendRedirect("/project/main.jsp");
} else {//登录失败
hs.setAttribute("flag", "loginFalse");
//重定向到login.jsp
response.sendRedirect("/project/login.jsp");
}
}
}
- JDBC数据库连接:
(1)Dao
package com.zlw.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import com.zlw.dao.UserDao;
import com.zlw.pojo.User;
import com.zlw.util.DBUtil;
public class UserDaoImpl implements UserDao{
/**
* 查询用户信息
*/
@Override
public User getUserInfoDao(String uname, String pwd) {
//声明jdbc变量
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
//声明变量
User us= null;
try {
//创建连接
conn = DBUtil.getConnection();
//创建sql语句
String sql="select * from t_user where uname=? and pwd=?";
//创建slq命令对象
ps=conn.prepareStatement(sql);
//给占位符赋值
ps.setString(1, uname);
ps.setString(2, pwd);
//执行sql命令
rs = ps.executeQuery();
//遍历rs
while(rs.next()){
//给变量赋值
us=new User();
us.setUid(rs.getInt("uid"));
us.setUname(rs.getString("uname"));
us.setPwd(rs.getString("pwd"));
us.setSex(rs.getString("sex"));
us.setAge(rs.getInt("age"));
us.setBirthday(rs.getString("birthday"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DBUtil.closeAll(rs, ps, conn);
}
return us;
}
/**
* 用户注册
*/
@Override
public int regUserInfoDao(String uname, String pwd, String sex, int age, String birthday) {
//创建sql语句
String sql = "insert into t_user values(default,?,?,?,?,?)";
return DBUtil.executeDML(sql, uname,pwd,sex,age,birthday);
}
}
(2)pojo:
package com.zlw.pojo;
public class User {
private int uid;
private String uname;
private String pwd;
private String sex;
private int age;
private String birthday;
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "User [uid=" + uid + ", uname=" + uname + ", pwd=" + pwd + ", sex=" + sex + ", age=" + age
+ ", birthday=" + birthday + "]";
}
}
(3)Service业务处理:
package com.zlw.service.impl;
import com.zlw.dao.UserDao;
import com.zlw.dao.impl.UserDaoImpl;
import com.zlw.pojo.User;
import com.zlw.service.UserService;
public class UserServiceImpl implements UserService {
//创建Dao层对象
UserDao ud= new UserDaoImpl();
//用户登录
@Override
public User getUserInfoService(String uname, String pwd) {
//处理登录业务
return ud.getUserInfoDao(uname,pwd);
}
//用户注册
@Override
public int regUserInfoService(String uname, String pwd, String sex, int age, String birthday) {
//处理注册业务
return ud.regUserInfoDao(uname,pwd,sex,age,birthday);
}
}
(4)Util工具类:
package com.zlw.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class DBUtil {
//声明全局变量记录jdbc参数
private static String driver;
private static String url;
private static String username;
private static String password;
//使用静态代码块,在类加载时即完成对属性文件的读取
static{
//动态获取属性配置文件的流对象
InputStream in=DBUtil.class.getResourceAsStream("/jdbc.properties");
//创建Properties对象
Properties p=new Properties();
//加载
try {
p.load(in);//会将属性配置文件的所有数据存储到Properties对象中
//将读取的jdbc参数赋值给全局变量
driver=p.getProperty("driver");
url=p.getProperty("url");
username=p.getProperty("username");
password=p.getProperty("password");
//加载驱动
Class.forName(driver);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//创建连接对象并返回
public static Connection getConnection(){
Connection conn=null;
try {
conn = DriverManager.getConnection(url, username, password);
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
//关闭资源
public static void closeAll(ResultSet rs,Statement stmt,Connection conn){
try {
if(rs!=null){
rs.close();
}
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//封装增加删除修改的通用工具方法
/**
* @param sql SQL语句
* @param objs SQL语句占位符实参,如果没有参数则传入null
* @return 返回增删改的结果,类型为int
*/
public static int executeDML(String sql,Object...objs){
// 声明jdbc变量
Connection conn = null;
PreparedStatement ps = null;
int i = -1;
try {
// 获取连接对象
conn = DBUtil.getConnection();
// 开启事务管理
conn.setAutoCommit(false);
// 创建SQL命令对象
ps = conn.prepareStatement(sql);
// 给占位符赋值
if(objs!=null){
for(int j=0;j<objs.length;j++){
ps.setObject(j+1,objs[j]);
}
}
// 执行SQL
i = ps.executeUpdate();
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally {
DBUtil.closeAll(null, ps, conn);
}
return i;
}
}
(5)jdbc.properties:配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/project
username=root
password=root
- 登录成功的页面会跳转到mian.jsp: 登录成功
- 登录失败会跳转到登录页面: 登录失败
2.退出登录:
- OutServlet:
package com.zlw.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class OutServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应的编码格式
response.setContentType("text/html;charset=utf-8");
//获取请求信息
//处理请求信息
//获取session对象
HttpSession hs = request.getSession();
//销毁session
hs.invalidate();
//相应处理结果
//重定向
response.sendRedirect("/project/login.jsp");
}
}
3.用户注册
package com.zlw.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zlw.service.UserService;
import com.zlw.service.impl.UserServiceImpl;
public class RegServlet extends HttpServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应编码格式
response.setContentType("text/html;charset=utf-8");
//获取请求信息
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("age"));
String birthday = request.getParameter("birthday");
//处理请求信息
//获取业务层对象
UserService us= new UserServiceImpl();
int i = us.regUserInfoService(uname, pwd, sex, age, birthday);
//处理响应结果
//获得Session对象
HttpSession hs = request.getSession();
if(i>0){//注册成功
//给注册成功添加标记到session中
hs.setAttribute("flag","regSuccess");
//重定向到登录页面
response.sendRedirect("/project/login.jsp");
}else{//注册失败
//重定向到注册页面
response.sendRedirect("/project/reg.jsp");
}
}
}
- 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>
<html lang="zh-cn">
<head>
<base href="<%=basePath%>">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport"
content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<meta name="renderer" content="webkit">
<title></title>
<link rel="stylesheet" href="css/pintuer.css">
<link rel="stylesheet" href="css/admin.css">
<script src="js/jquery.js"></script>
<script src="js/pintuer.js"></script>
<!-- 声明js代码域 -->
<script type="text/javascript">
$(function(){
//给男添加单机按钮
$("#man").click(function(){
//给男的span添加选择样式
$("#manSpan").addClass("icon-check");
//将女的选择状态去掉
$("#womanSpan").removeClass("icon-check");
//给女添加单机事件
$("#woman").click(function(){
//给女的span添加选择样式
$("#womanSpan").addClass("icon-check");
//将男的选择状态去掉
$("#manSpan").removeClass("icon-check");
})
})
})
</script>
</head>
<body>
<div class="panel admin-panel">
<div class="panel-head">
<strong><span class="icon-key"></span> 会员注册</strong>
</div>
<div class="body-content">
<form method="post" class="form-x" action="reg">
<div class="form-group"></div>
<div class="form-group">
<div class="label">
<label for="sitename">用户名:</label>
</div>
<div class="field">
<input type="text" class="input w50" id="uname" name="uname"
size="50" placeholder="请输入用户名" data-validate="required:请输入用户名" />
</div>
</div>
<div class="form-group">
<div class="label">
<label for="sitename">密码:</label>
</div>
<div class="field">
<input type="password" class="input w50" name="pwd" size="50"
placeholder="请输入新密码"
data-validate="required:请输入密码,length#>=5:密码不能小于5位" />
</div>
</div>
<div class="form-group">
<div class="label">
<label for="sitename">确认密码:</label>
</div>
<div class="field">
<input type="password" class="input w50"
size="50" placeholder="请再次输入密码"
data-validate="required:请再次输入密码,repeat#pwd:两次输入的密码不一致" />
</div>
</div>
<div class="form-group">
<div class="label">
<label for="sitename">年龄:</label>
</div>
<div class="field">
<input type="" class="input w50" id="age" name="age"
size="50" placeholder="请输入年龄" data-validate="required:请输入年龄,length#<=3:年龄不不合法""/>
</div>
</div>
<div class="form-group">
<div class="label">
<label for="sitename">出生日期:</label>
</div>
<div class="field">
<input type="date" class="input w50" id="birthday" name="birthday"
size="50" data-validate="required:请输入出生日期" />
</div>
</div>
<!-- 性别 -->
<div class="form-group">
<div class="label">
<label>性别:</label>
</div>
<div class="field">
<div class="button-group radio">
<label class="button active" >
<span class="icon-check" id="manSpan"></span> <input name="sex" value="1" id="man"type="radio" checked="checked">男
</label>
<label class="button active" >
<span class="" id="womanSpan"></span> <input name="sex" value="0" id="woman"type="radio">女
</label>
</div>
</div>
<div class="form-group">
<div class="label">
<label></label>
</div>
<div class="field">
<button class="button bg-main icon-check-square-o" type="submit">
提交</button>
</div>
</div>
</form>
</div>
</div>
</body>
</html>
-
实现效果
注册页面
注册成功
三、实现动态调用请求处理
1.实现动态调用请求:
- 问题:
现在我们一个请求或者一个独立的业务逻辑都单独进行一个Servlet的创建进行请求处理。但是一个网站的功能是非常的多,如果每个都创建单独的Servlet进行处理,这样造成Servlet过多。造成资源浪费。
- 解决:
服务器在接收到浏览器发送的请求后,会调用对应的Servlet进行请求处理。
然后调用Servlet中的Service方法进行处理。
我们将不同功能的处理封装成对应的方法。
在service方法中调用其对应的功能处理方法进行请求处理。
这样Servlet我们只需要一个。
使用反射。
- 注意:
请求中需要附带要执行的方法名称。
package com.zlw.servlet;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zlw.pojo.User;
import com.zlw.service.UserService;
import com.zlw.service.impl.UserServiceImpl;
/**
* servlet创建一个,在service方法中动态的调用请求处理方法。
* 注意:
* 请求中需要附带要调用的方法名
* @author zhang
*
*/
public class DataServlet extends BaseServlet {
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应编码格式
response.setContentType("text/html;charset=utf-8");
//获取请求信息
String methodName = request.getParameter("method");
System.out.println("DataServlet.service(当前请求的方法名:)"+methodName);
//调用方法处理请求(根据动态方法名调用方法---->反射)
try {
//反射获取方法所在的类的对象
Class cs = this.getClass();
//反射获取要被调用的方法对象
Method m = cs.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//反射执行方法
m.invoke(this,request,response);
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
public void userLogin(HttpServletRequest request, HttpServletResponse response) throws IOException{
//获取请求信息
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//处理请求信息
// System.out.println(uname+":"+pwd);
//处理业务逻辑层
UserService us = new UserServiceImpl();
User user=us.getUserInfoService(uname, pwd);
// System.out.println(user);
//处理响应结果
//创建session对象
HttpSession hs = request.getSession();
if (user!=null) {//登录成功
//将用户信息存储在session中
hs.setAttribute("user", user);
//重定向到main.jsp
response.sendRedirect("/project2/main.jsp");
} else {//登录失败
hs.setAttribute("flag", "loginFalse");
//重定向到login.jsp
response.sendRedirect("/project2/login.jsp");
}
}
public void userOut(HttpServletRequest request, HttpServletResponse response) throws IOException{
//处理请求信息
//获取session对象
HttpSession hs = request.getSession();
//销毁session
hs.invalidate();
//相应处理结果
//重定向
response.sendRedirect("/project2/login.jsp");
}
public void userReg(HttpServletRequest request, HttpServletResponse response) throws IOException{
//获取请求信息
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("age"));
String birthday = request.getParameter("birthday");
//处理请求信息
//获取业务层对象
UserService us= new UserServiceImpl();
int i = us.regUserInfoService(uname, pwd, sex, age, birthday);
//处理响应结果
//获得Session对象
HttpSession hs = request.getSession();
if(i>0){//注册成功
//给注册成功添加标记到session中
hs.setAttribute("flag","regSuccess");
//重定向到登录页面
response.sendRedirect("/project2/login.jsp");
}else{//注册失败
//重定向到注册页面
response.sendRedirect("/project2/reg.jsp");
}
}
}
2.抽取BaseServlet类:
将Servlet中的Service方法抽取出来。
package com.zlw.servlet;
import java.io.IOException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BaseServlet extends HttpServlet{
@Override
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置请求编码格式
request.setCharacterEncoding("utf-8");
//设置响应编码格式
response.setContentType("text/html;charset=utf-8");
//获取请求信息
String methodName = request.getParameter("method");
System.out.println("DataServlet.service(当前请求的方法名:)"+methodName);
//调用方法处理请求(根据动态方法名调用方法---->反射)
try {
//反射获取方法所在的类的对象
Class cs = this.getClass();
//反射获取要被调用的方法对象
Method m = cs.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);
//反射执行方法
m.invoke(this,request,response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
- Servlet
package com.zlw.servlet;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.zlw.pojo.User;
import com.zlw.service.UserService;
import com.zlw.service.impl.UserServiceImpl;
/**
* servlet创建一个,在service方法中动态的调用请求处理方法。
* 注意:
* 请求中需要附带要调用的方法名
* @author zhang
*
*/
public class DataServlet extends BaseServlet {
public void userLogin(HttpServletRequest request, HttpServletResponse response) throws IOException{
//获取请求信息
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
//处理请求信息
// System.out.println(uname+":"+pwd);
//处理业务逻辑层
UserService us = new UserServiceImpl();
User user=us.getUserInfoService(uname, pwd);
// System.out.println(user);
//处理响应结果
//创建session对象
HttpSession hs = request.getSession();
if (user!=null) {//登录成功
//将用户信息存储在session中
hs.setAttribute("user", user);
//重定向到main.jsp
response.sendRedirect("/project2/main.jsp");
} else {//登录失败
hs.setAttribute("flag", "loginFalse");
//重定向到login.jsp
response.sendRedirect("/project2/login.jsp");
}
}
public void userOut(HttpServletRequest request, HttpServletResponse response) throws IOException{
//处理请求信息
//获取session对象
HttpSession hs = request.getSession();
//销毁session
hs.invalidate();
//相应处理结果
//重定向
response.sendRedirect("/project2/login.jsp");
}
public void userReg(HttpServletRequest request, HttpServletResponse response) throws IOException{
//获取请求信息
String uname = request.getParameter("uname");
String pwd = request.getParameter("pwd");
String sex = request.getParameter("sex");
int age = Integer.parseInt(request.getParameter("age"));
String birthday = request.getParameter("birthday");
//处理请求信息
//获取业务层对象
UserService us= new UserServiceImpl();
int i = us.regUserInfoService(uname, pwd, sex, age, birthday);
//处理响应结果
//获得Session对象
HttpSession hs = request.getSession();
if(i>0){//注册成功
//给注册成功添加标记到session中
hs.setAttribute("flag","regSuccess");
//重定向到登录页面
response.sendRedirect("/project2/login.jsp");
}else{//注册失败
//重定向到注册页面
response.sendRedirect("/project2/reg.jsp");
}
}
}
四、总结和项目缺陷
1.套用模板进行页面快速构建
(1)在自己的项目中创建jsp文件。
(2)然后将模板中的前端相关代码赋值到自己的jsp文件中。
(3)将静态资源复制到webRoot下。
2.MCV的开发模式:
M:model service dao pojo
V:view jsp css html
C: controller servlet
3.Servlet+jsp+jdbc的功能开发流程
1.浏览器发起页面请求直接给jsp
2.浏览器发起功能请求给Servlet,Servlet调用service方法,service进行业务逻辑处理,service调用dao,dao层进行数据库操作(jdbc),dao层将处理结果返回给service,service再将结果返回给Servlet,(或者继续请求转发或者重定向)请求转发或者重定向给jsp,jsp作出页面响应。
4.request和session作用域的使用
request:请求转发的数据流转的载体。
session:重定向的数据流转的载体(但是session可以解决同一个用户的不同请求的数据共享问题)。
5.浏览器发起请求到服务器请求发起的方式
非ajax请求:
form表单提交:action数据提交地址,method:数据提交方式;
超链接标签:href为数据提交地址,可以直接使用“?”拼接请求数据,类似于form表单的get方式。
js中的Windows.location.herf:为数据提交地址,可以直接使用“?”拼接请求数据,类似于form表单的get方式。
- 注意:
使用以上请求方式发起的请求,浏览器在接收到相应内容后,会将原有内容覆盖,显示响应结果。
6.BaseServlet的抽取和使用:
反射机制
抽象类
不希望该Servlet类被调用和响应。
7.项目缺陷:
(1)在jsp中获取从Servlet流转过来的数据特别麻烦;
(2)在jsp页面中使用java代码块进行逻辑处理书写和阅读极不方便;
(3)使用session进行数据流转是很方便的,但是session失效了,所有依赖session实现的功能都会出问题。
(4)响应结果都是覆盖原有内容显示给用户的
网友评论