两小时项目–从前端到后台
1 应用到的开发工具
- 声明:在本项目之前请看“上一篇”
- 数据库:Oracle Database 10g Express Edition 入门(XE免费版)
- Java开发工具:MyEclipse 10
- 浏览器:Google Chrome
- 服务器:apache-tomcat-7.0.70
2 项目背景
近期公司要我等开发一个能够实现数据存储的网页app,在很久没有接触数据库的情况下,刚上手还是有点手生,项目开发完成后,为了记录整体框架,并且方便各位一线战友查阅,特在此记录。
3 项目概述
- 1、项目名称 :是自己的名字简写 √
- 2、项目的编码:utf-8 √
- 3、涉及的表格 :user emp (简化后的表格,重在记录整体开发框架)√
- 4、涉及到的功能:
a)登录:√
b)注册: √
c)展示所有:在登录成功的页面中点击”显示所有员工”,把所有的员工信息展示出来 √
d)在登录成功的界面中,添加一个超链接 “添加员工” √
e)删除功能 :在显示所有员工的页面中,每一条数据上都会有一个删除操作,删除完成,跳转到显示所有 √
f)修改:每一条后面显示”修改的超链接” 进入独立的修改界面
g) 在显示所有的界面中展示登录成功的用户名
h) 强制用户登录:对emp表的CRUD相关操作都需要强制用户登录
l) 安全退出:配合强制用户登录一起测试,对emp表的CRUD相关操作页面中都有
4 整理开发思路
4.1 该项目涉及到三个部分
- View部分:是HTML代码的编写,以网页形式与用户进行交互,本项目运用servlet服务,把html编码嵌入在Java中
- 服务器:servlet服务以来的开发环境–tomcat
- 数据处理:数据的操作与存储
4.2 开发步骤
遵循由后台想前端的开发步骤,逐层开发,逐层测试,以免错误堆积。
1. 后台的开发,DAO层,完成数据库的连接和 sql语句的提交和执行,Service层完成需要的功能,可以同时操作多个DAO层的方法,能够完成数据回滚。
2. 服务器:servlet运行在服务器上的一个小程序,接收Client的请求,处理请求,并把处理好的数据回应到Client。要注意的是web.xml文件的书写
3.客户端的开发,本文中的客户端仅是简单的HTML网页,完成与用户的交互。
5 项目开发
5.1 DAO层与service层的开发
DAO层要要完成的任务是连接数据库和对数据库的操作。
在上一篇写的分享中我介绍了DAO层与Service层的开发步骤与用法,在本篇分享中直接上代码。
5.1.1 DAO层的开发
com.util 包
JDBCUtil.java文件
package com.nyist.lfw.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtil {
//创建一个map集合下的实现类 用来处理文件
private static Properties p = new Properties();
//创建线程
private static final ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
//加载配置文件
static{
InputStream is = null;
try {
//输入流 读取配置文件
is = JDBCUtil.class.getResourceAsStream("/com/nyist/lfw/config/db.properties");
//附属类加载的配置文件
p.load(is);
} catch (Exception e) {
// TODO: handle exception
}finally{
try {
is.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//获取客户端
public static Connection getConn(){
Connection conn = tl.get();
//判断当前线程是否有客户端
//没有 创建 ---有 直接返回
if(conn == null){
try {
//申请驱动
Class.forName(p.getProperty("jdbc.driver"));
//连接数据库
conn = DriverManager.getConnection(p.getProperty("jdbc.url"), p.getProperty("jdbc.user"), p.getProperty("jdbc.pass"));
//存入tl
tl.set(conn);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return conn;
}
//释放资源
public static void close(Connection conn,Statement stmt,ResultSet rs){
if(rs != null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(stmt != null){
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null){
try {
conn.close();
tl.remove();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
com.config 包
db.properties文件
jdbc.driver=oracle.jdbc.OracleDriver
jdbc.url=jdbc:oracle:thin:@localhost:1521:xe
jdbc.user=hr
jdbc.pass=sys
————–
com.dao 包 —- DAO层的操作
com.dao
IBossDAO.java文件
public interface IBossDAO {
//登陆查询操作
public String selectByName(String user);
}
BossDAO.java文件
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.nyist.lfw.util.JDBCUtil;
import com.sun.corba.se.spi.orbutil.fsm.Guard.Result;
public class BossDAO implements IBossDAO{
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
@Override
public String selectByName(String user) {
// TODO Auto-generated method stub
String pass = null;
String sql = "select * from t_boss where users = ?";
try {
//获取conn
conn = JDBCUtil.getConn();
//sql预编译
pstmt = conn.prepareStatement(sql);
//执行sql
pstmt.setString(1, user);
rs = pstmt.executeQuery();
//结果集
if(rs.next()){
pass = rs.getString(3);
System.out.println("在DAO中获取到的密码是i"+pass);
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(null, pstmt, rs);
}
return pass;
}
}
IBossDAO.java文件
import java.util.List;
import com.nyist.lfw.entity.User;
public interface IUserDAO {
//存一条 注册
public int registUser(User u);
//查找一条数据
public String selectUser(String username);
//查全部数据
public List<User> selectAll();
//删除一条员工信息
public void deleteUser(String username);
//修改一条员工信息
public void updateUser(User u);
}
com.nyist.lfw.dao
UserDAO.java文件
public class UserDAO implements IUserDAO {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
//注册
@Override
public int registUser(User u) {
// TODO Auto-generated method stub
int j = 0;
String sql = "insert into t_user (id,username,password) values (user_seq.nextval,?,?)";
try {
//获取conn
conn = JDBCUtil.getConn();
//预编译sql
pstmt = conn.prepareStatement(sql);
//? 绑定值 执行SQL
pstmt.setString(1, u.getUsername());
pstmt.setString(2, u.getPassword());
int i = pstmt.executeUpdate();
if(i != 0 ){
System.out.println("注册成功");
j++;
}else{
System.out.println("注册失败!!---");
}
} catch (Exception e) {
j--;
// TODO: handle excepti on
System.out.println("在创建用户的实现DAO中出错");
}finally{
JDBCUtil.close(null, pstmt, rs);
}
return j;
}
//查询一个
@Override
public String selectUser(String username) {
// TODO Auto-generated method stub
String sql = "select password from t_user where username = ?";
String passw = "";
try {
//获取conn
conn = JDBCUtil.getConn();
//sql
pstmt = conn.prepareStatement(sql);
//执行sql
pstmt.setString(1, username);
rs = pstmt.executeQuery();
//结果集
if(rs.next()){
passw=rs.getString(1);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(null, pstmt, rs);
}
return passw;
}
//查询全部
@Override
public List<User> selectAll() {
// TODO Auto-generated method stub
List<User> list = new ArrayList<User>();
String sql = "select * from t_user";
try {
//获取conn
conn = JDBCUtil.getConn();
//sql
pstmt = conn.prepareStatement(sql);
//执行sql
rs = pstmt.executeQuery();
//结果集处理
while(rs.next()){
User u = new User(rs.getInt(1), rs.getString(2), rs.getString(3));
list.add(u);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(null , pstmt, rs);
}
return list;
}
//通过用户名 删除一个
@Override
public void deleteUser(String username) {
// TODO Auto-generated method stub
String sql = "delete from t_user where username = ?";
try {
//获取conn
conn = JDBCUtil.getConn();
//预编译sql
pstmt = conn.prepareStatement(sql);
//执行sql
pstmt.setString(1, username);
int i = pstmt.executeUpdate();
if(i>0){
System.out.println("在DAO中删除成功");
}else{
System.out.println("在DAO中删除失败");
}
} catch (SQLException e) {
System.out.println("DAO中删除 抛出异常");
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(null, pstmt, rs);
}
//
}
@Override
public void updateUser(User u) {
// TODO Auto-generated method stub
String sql = "update t_user set username = ?, password = ? where id= ?";
try {
//1获取conn
conn = JDBCUtil.getConn();
//2 sql预编译
pstmt = conn.prepareStatement(sql);
//3执行sql
pstmt.setString(1, u.getUsername());
pstmt.setString(2, u.getPassword());
pstmt.setInt(3, u.getId());
int i = pstmt.executeUpdate();
//4结果集处理
if(i!=0){
System.out.println("在DAO层修改成功!");
}else{
System.out.println("在DAO层修改失败");
}
//5释放资源
JDBCUtil.close(null, pstmt, rs);
} catch (Exception e) {
// TODO: handle exception
}
}}
5.2.2 Service层的开发
com.service 包中
IBossService.java文件
public interface IBossService {
//通过用户名查找密码
public String selectByName(String user);
}
BossService.java文件
package com.nyist.lfw.service;
import java.sql.Connection;
import java.sql.SQLException;
import com.nyist.lfw.dao.*;
import com.nyist.lfw.util.JDBCUtil;
public class BossService implements IBossService{
private static Connection conn = null;
@Override
public String selectByName(String user) {
// TODO Auto-generated method stub
String pass = null;
try {
//获取conn客户端
conn = JDBCUtil.getConn();
//关闭自动提交
conn.setAutoCommit(false);
//DAO操作
IBossDAO ibs = new BossDAO();
pass = ibs.selectByName(user);
//提交
conn.commit();
System.out.println("Service层查找密码提交成功!");
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO: handle exception
}finally{
//释放资源
JDBCUtil.close(conn, null, null);
}
return pass;
}
}
IUserService.java文件
public interface IUserService {
//注册
public int addUser(User u);
//查询一个
public String selectUser(String username);
//查询全部
public List<User> selecAll();
//删除一个
public void delete(String username);
//修改一个 员工
public void updateUser(User u);
}
UserService.java文件
import java.sql.*;
import java.util.*;
import com.nyist.lfw.dao.*;
import com.nyist.lfw.entity.User;
import com.nyist.lfw.util.JDBCUtil;
public class UserService implements IUserService{
private static Connection conn = null;
private static IUserDAO dao = new UserDAO();
private static List<User> list = new ArrayList<User>();
@Override
public int addUser(User u) {
int j = 0;
// TODO Auto-generated method stub
try {
//获取conn
conn = JDBCUtil.getConn();
//关闭自动提交
conn.setAutoCommit(false);
//dao操作
j = dao.registUser(u);
//提交
conn.commit();
System.out.println("service层提交数据成功");
} catch (SQLException e) {
try {
conn.rollback();
System.out.println("service层提交失败");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(conn, null, null);
}
return j;
}
//登陆
@Override
public String selectUser(String username) {
// TODO Auto-generated method stub
String str = "";
try {
//获取conn
conn = JDBCUtil.getConn();
//关闭自动提交
conn.setAutoCommit(false);
//dao操作
str = dao.selectUser(username);
//提交
conn.commit();
System.out.println("登陆操作在service层提交成功!");
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(conn, null, null);
}
return str;
}
@Override
public List<User> selecAll() {
// TODO Auto-generated method stub
try {
//获取conn
conn= JDBCUtil.getConn();
//关闭自动提交
conn.setAutoCommit(false);
//dao
list = dao.selectAll();
//提交
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(conn, null, null);
}
return list;
}
@Override
public void delete(String username) {
// TODO Auto-generated method stub
try {
//获取conn
conn = JDBCUtil.getConn();
//关闭自动提交
conn.setAutoCommit(false);
//dao操作
dao.deleteUser(username);
//提交
conn.commit();
System.out.println("service层 删除提交");
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(conn, null, null);
}
}
@Override
public void updateUser(User u) {
// TODO Auto-generated method stub
try {
//获取conn
conn = JDBCUtil.getConn();
//关闭自动修提交
conn.setAutoCommit(false);
//DAO层操作
dao.updateUser(u);
//提交
conn.commit();
} catch (Exception e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
//释放资源
JDBCUtil.close(conn, null, null);
}
}}
—————-
到此为止底层基本已经写完了
我们可以在这时候进行数据的测试。
我个人的测试思路是直接写一个测试的主函数,在Java中进行测试,当然也可以用@Test 方法进行测试。
5.2 服务器与客户端的实现—-servlet |html
本项目运用到的服务器是servlet服务,它的功能主要是就收客户端的请求,处理请求并给予回应。
在这里,我的书写顺序是一项一项业务的实现,比如说我要实现登陆功能,就先把登陆功能的服务器与客户端一并书写完成。
5.2.1 登陆数据的处理
HTML文件–构建简单的登陆页面
为了完成数据的简单测试,在这里我简单的勾勒了一个HTML的用户登陆界面。
代码如下:
<html>
<head>
<style type="text/css">
body{text-align:center;}
span{ color:red; font-size:200% }
hr{ margin-bottom:30px }
</style>
</head>
<body>
<span> 登录 </span>
<hr color="red"/>
<form action="http://localhost:8999/lfw_emp/admAction" method="post">
<table border="1" bordercolor="blue" width="40%" cellspacing="0" align="center">
<tr>
<td>请输入用户名:</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>请输入密码:</td>
<td><input type="password" name="password"/></td>
</tr>
<tr align="center">
<td colspan="2">
<input type="submit" value="登陆"/> <input type="reset" value="重置"/>
<!-- a href="RegistView.html">注册</a-->
<!-- a href="http://localhost:8999/lfw_emp/SelectAll">查询所有</a -->
</td>
</tr>
</table>
</form>
</body>
</html>
com.action 包
完成登陆数据的处理:
public class admAction extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException{
//IO编码格式
req.setCharacterEncoding("utf-8");
res.setContentType("text/html");
res.setCharacterEncoding("utf-8");
//收集数据
String user = req.getParameter("username");
String pass = req.getParameter("password");
//服务层操作
IBossService ibs = new BossService();
String selepass = ibs.selectByName(user);
//存入跳转
if("".equals(selepass)){
System.out.println("错误");
}else if(pass.equals(selepass)){
System.out.println("登陆成功");
//session操作 执行
HttpSession session = req.getSession(true);
session.setAttribute("loginuser", user);
res.sendRedirect("http://localhost:8999/lfw_emp/admView");
}else{
System.out.println("执行错误操作!");
res.sendRedirect("http://localhost:8999/lfw_emp/LoginErrorView");
}
}
}
- 注意点
- 编码格式:国际统一的”UTF-8”格式
- 收集数据步骤中双引号引起来的内容是HTML文件中的name属性命名的数据。
- 跳转的路径是” /项目名/web.xml中的命名”或者”/项目名/……/.HTML文件”
- HttpSession session = req.getSession(true);
session.setAttribute(“loginuser”, user);
操作是为了把”user”的数据存在session方法中,并且命名为”loginuser”。session方法可以存一次(set),用多次(get),但是需要注意的是session有自己的生命周期,并且在用户退出的时候需要手动关闭session(!!session的知识点不太理解的可以参见本人的其他文章!!)。
com.view 包
完成登陆以后显示的管理员用户操作的界面,注意此时已经要做强制登陆(不允许在没有登陆的情况下直接访问该页面)操作。
public class admView extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
//设置响应
res.setContentType("text/html;charset=utf-8;");
//获取输出流
PrintWriter out = res.getWriter();
//获取session
HttpSession session = req.getSession();
Object o = session.getAttribute("loginuser");
if(o==null){
//当前没有绑定用户 跳转登陆
System.out.println("当前用户为 空跳转");
res.sendRedirect(req.getContextPath()+"/html/LoginView.html");
}else{
String str = (String)o;
//显示页面
out.print("<h1 color = 'red' align = 'center'>管理员登陆成功!</h1><hr/>");
out.print("<h3>当前管理员:"+str+"</h3>");
out.print("<a href = '/lfw_emp/AllView' >查看所有员工信息</a><br>");
out.print("<a href = 'http://localhost:8999/lfw_emp/html/RegistView.html' >添加信息</a><br>");
out.print("<a href = 'http://localhost:8999/lfw_emp/html/LoginView.html' >返回登陆界面</a><br>");
out.print("<a href = '/lfw_emp/Exit'>安全退出</a>");
//使用流
out.flush();
}
}
}
- 注意点
- req(Request)对请求进行处理(即接收到用户发出的信息)
- res(Response)对设置回应(即返回给用户的信息)
- res.setContentType(“text/html;charset=utf-8;”);设置返回到网页上的形式与文本显示的编码类型。
- 强制登陆操作,实际是session中存储的对象进行查验,如果session中无法获取到对象,则跳转到登陆界面,在这里没有做视觉的优化。
- PrintWriter out = res.getWriter();获取输出流,即获取到一个要打印在网页上的引用。
- out.print(str);str是任意字符串,字符串的内容可以是HTML编码。
- out.flush();提交输出流。
在这里我设置了“查看所有员工信息”和“添加员工信息”两个超链接,在超链接中“href”方法实现跳转功能。
显示所有员工信息AllView.java文件
public class AllView extends HttpServlet{
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
//设置中文的输入输入编码格式
//设置响应类型
req.setCharacterEncoding(“utf-8”);
resp.setContentType(“text/html;charset=utf-8;”);
resp.setCharacterEncoding(“utf-8”);
//获取session
HttpSession session = req.getSession();
Object o = session.getAttribute(“loginuser”);
if(o==null){
//当前没有绑定用户 跳转登陆
System.out.println(“当前用户为 空跳转”);
resp.sendRedirect(req.getContextPath()+”/html/LoginView.html”);
}else{
String str = (String)o;
//获得输出流
PrintWriter out = resp.getWriter();
out.print(“所有员工信息
“);
out.print(“
”);
out.print(“当前管理员:”+str+”
“);
//表单格式
out.print(“http://localhost:8999/lfw_emp/deleteAction’ method=’post’>”
+”“);
//查询所有用户
IUserService ius = new UserService();
List userAll = ius.selecAll();
//遍历
for (User user : userAll) {
System.out.println(user);
out.print( ““);
out.print( ““);
out.print( ““);
out.print( ““);
out.print( ““);
out.print( “ID user pass delete update “+user.getId()+” “+user.getUsername()+” “+user.getPassword()+”
6 附录文件
6.1 sql建表文件
t_user.sql
create sequence user_seq;
create table t_user(
id number(6) primary key,-- 主键id
username varchar2(15) unique,--不能重复的用户名
password varchar2(16) --check(length(password) >5)--密码 6-16位数字
);
t_boss.sql
create sequence boss_seq;
create table t_boss(
id number(6) primary key,-- 主键id
users varchar2(15) unique,--不能重复的用户名
passs varchar2(16) --check(length(password) >5)--密码 6-16位数字
);
6.2 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">
<servlet>
<servlet-name>Add</servlet-name>
<servlet-class>com.nyist.lfw.test.Add</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Add</servlet-name>
<url-pattern>/Add</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AddUser</servlet-name>
<servlet-class>com.nyist.lfw.test.AddUser</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddUser</servlet-name>
<url-pattern>/AddUser</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginUser</servlet-name>
<servlet-class>com.nyist.lfw.test.LoginUser</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginUser</servlet-name>
<url-pattern>/LoginUser</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>SelectAll</servlet-name>
<servlet-class>com.nyist.lfw.test.SelectAll</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SelectAll</servlet-name>
<url-pattern>/SelectAll</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>DeleteUser</servlet-name>
<servlet-class>com.nyist.lfw.test.DeleteUser</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DeleteUser</servlet-name>
<url-pattern>/DeleteUser</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>addAction</servlet-name>
<servlet-class>com.nyist.lfw.action.addAction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>addAction</servlet-name>
<url-pattern>/addAction</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>AllView</servlet-name>
<servlet-class>com.nyist.lfw.view.AllView</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AllView</servlet-name>
<url-pattern>/AllView</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginOkView</servlet-name>
<servlet-class>com.nyist.lfw.view.LoginOkView</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginOkView</servlet-name>
<url-pattern>/LoginOkView</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>admView</servlet-name>
<servlet-class>com.nyist.lfw.view.admView</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>admView</servlet-name>
<url-pattern>/admView</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>LoginErrorView</servlet-name>
<servlet-class>com.nyist.lfw.view.LoginErrorView</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginErrorView</servlet-name>
<url-pattern>/LoginErrorView</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>Exit</servlet-name>
<servlet-class>com.nyist.lfw.action.Exit</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Exit</servlet-name>
<url-pattern>/Exit</url-pattern>
</servlet-mapping>
<!-- 删除-操作 -->
<servlet>
<servlet-name>deleteAction</servlet-name>
<servlet-class>com.nyist.lfw.action.deleteAction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>deleteAction</servlet-name>
<url-pattern>/deleteAction</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>admAction</servlet-name>
<servlet-class>com.nyist.lfw.action.admAction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>admAction</servlet-name>
<url-pattern>/admAction</url-pattern>
</servlet-mapping>
<!-- 修改 -操作 -->
<servlet>
<servlet-name>UpdateView</servlet-name>
<servlet-class>com.nyist.lfw.view.UpdateView</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UpdateView</servlet-name>
<url-pattern>/UpdateView</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>UpdateAction</servlet-name>
<servlet-class>com.nyist.lfw.action.UpdateAction</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UpdateAction</servlet-name>
<url-pattern>/UpdateAction</url-pattern>
</servlet-mapping>
</web-app>
注:为了项目保密性,此处记录是简化代码,仅供学习参考!。
如果有问题请联系本人 :lfw615@foxmain.com