JavaWeb中注意的点

 

目录

1.book_manager.jsp页面

2.添加图书和修改图书

3.增加图书

4.为什么要加manager/bookServlet?

5.关于参数

6.baseservlet程序


<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>编辑图书</title>

	<%-- 静态包含 base标签、css样式、jQuery文件 --%>
	<%@ include file="/pages/common/head.jsp"%>


	<style type="text/css">
	h1 {
		text-align: center;
		margin-top: 200px;
	}
	
	h1 a {
		color:red;
	}
	
	input {
		text-align: center;
	}
</style>
</head>
<body>
		<div id="header">
			<img class="logo_img" alt="" src="static/img/logo.gif" >
			<span class="wel_word">编辑图书</span>

			<%-- 静态包含 manager管理模块的菜单  --%>
			<%@include file="/pages/common/manager_menu.jsp"%>


		</div>
		
		<div id="main">
			<form action="manager/bookServlet" method="post">
				<input type="hidden" name="action" value="${empty requestScope.book ?"add":"update"}">
<%--
					我们是根据id来修改的所以要加上这条,如果你没有这条,后台servlet程序就找不到id,
					webUtil虽然是获取对象,但是他只是获取提交过去的对象,他就无法获取ID的值从而无法进行修改
					你在book_manager.jsp修改里传过来的id是提交到book_edit.jsp页面而不是manager/bookServlet页面
					所以有必要加这条
--%>
				<input type="hidden" name="id" value="${param.id}">
				<table>
					<tr>
						<td>名称</td>
						<td>价格</td>
						<td>作者</td>
						<td>销量</td>
						<td>库存</td>
						<td colspan="2">操作</td>
					</tr>		
					<tr>
						<td><input name="name" type="text" value="${requestScope.book.name}"/></td>
						<td><input name="price" type="text" value="${requestScope.book.price}"/></td>
						<td><input name="author" type="text" value="${requestScope.book.author}"/></td>
						<td><input name="sales" type="text" value="${requestScope.book.sales}"/></td>
						<td><input name="stock" type="text" value="${requestScope.book.stock}"/></td>
						<td><input type="submit" value="提交"/></td>
					</tr>	
				</table>
			</form>
			
	
		</div>


		<%--静态包含页脚内容--%>
		<%@include file="/pages/common/footer.jsp"%>


</body>
</html>

   book_manager.jsp页面

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" import="pojo.Book" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>图书管理</title>

	<%-- 静态包含 base标签、css样式、jQuery文件 --%>
	<%@ include file="/pages/common/head.jsp"%>


</head>

<script>
$(function (){
	<%--确定删除提示框--%>
	$("a.deleteClass").click(function (){
		return confirm("你确定要删除["+$(this).parent().parent().find("td:first").text()+"]吗?");

	})
})
</script>
<body>
	
	<div id="header">
			<img class="logo_img" alt="" src="static/img/logo.gif" >
			<span class="wel_word">图书管理系统</span>

		<%-- 静态包含 manager管理模块的菜单  --%>
		<%@include file="/pages/common/manager_menu.jsp"%>


	</div>
	
	<div id="main">
		<table>
			<tr>
				<td>名称</td>
				<td>价格</td>
				<td>作者</td>
				<td>销量</td>
				<td>库存</td>
				<td colspan="2">操作</td>
			</tr>
			<c:forEach items="${requestScope.book}" var="book">
			<tr>
				<td>${book.name}</td>
				<td>${book.price}</td>
				<td>${book.author}</td>
				<td>${book.sales}</td>
				<td>${book.stock}</td>
				<td><a href="manager/bookServlet?action=select&id=${book.id}">修改</a></td>
				<td><a class="deleteClass" href="manager/bookServlet?action=delete&id=${book.id}">删除</a></td>
			</tr>
			</c:forEach>

			<tr>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td></td>
				<td><a href="pages/manager/book_edit.jsp">添加图书</a></td>
			</tr>	
		</table>
	</div>


	<%--静态包含页脚内容--%>
	<%@include file="/pages/common/footer.jsp"%>


</body>
</html>

添加图书和修改图书

 增加图书

为什么要加manager/bookServlet?

通过地址区分是普通人还是管理员,赋予相应权限

<%--    为什么要加action=list? 我们servlet程序用反射得到action值 通过这个值去调用对应方法 所以要加参数--%>
<%--    前台是不需要登录就可以看的信息,地址为cilent/bookServlet?action=list--%>
<%--    为什么加manager 而后台则可以修改价格等东西 manager/bookServlet?action=list--%>

 

<%--    为什么要加action=list? 我们servlet程序用反射得到action值 通过这个值去调用对应方法 所以要加参数--%>
<%--    前台是不需要登录就可以看的信息,地址为cilent/bookServlet?action=list--%>
<%--    为什么加manager 而后台则可以修改价格等东西 manager/bookServlet?action=list--%>
    <a href="manager/bookServlet?action=list">图书管理</a>
    <a href="pages/order/order.jsp">订单管理</a>
    <a href="index.jsp">返回商城</a>

关于参数

method=add 你设置这个参数的时候

它会保存到param这个(参数对象中,不知道叫啥) 可以通过${param.method}使用 . 的过程没有提示

baseservlet程序

下面是基础的servlet程序,下面的代码可能会运用广泛,避免重复写,所以写成一个类,当需要使用的时候继承它

 

package web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.Method;

//优化baseServlet 在多个模块需要运用到这个代码的时候 可以不用重复写
public class BaseServlet extends HttpServlet {
    //解决a标签提交过来的数据
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        doPost(req,resp);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        String action = req.getParameter("action");
        System.out.println(action);
        try {
            Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class, HttpServletResponse.class);
            method.invoke(this,req,resp);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

增,删,改,查图书的servlet

package web;

import pojo.Book;
import service.BookService;
import service.impl.BookServiceImpl;
import utils.WebUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Map;

public class BookServlet extends BaseServlet {
    private BookService book = new BookServiceImpl();
    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        Map<String, String[]> parameterMap = req.getParameterMap();
        Book param = WebUtils.getParam(parameterMap, new Book());
        book.addBook(param);
        //这里如果用转发 则会有BUG 应该转发是一次请求,一直刷新页面会一直添加数据,所以要用重定向
//        req.getRequestDispatcher("/manager/bookServlet?action=list").forward(req,resp);
        //重定向/表示到端口号  所以要加个工程名
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");
    }
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String id = req.getParameter("id");
        System.out.println(id);
        book.deleteBookyById(Integer.parseInt(id));
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");
    }
    protected void update(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Map<String, String[]> parameterMap = req.getParameterMap();
        Book param = WebUtils.getParam(parameterMap, new Book());
        book.updateBook(param);
        resp.sendRedirect(req.getContextPath()+"/manager/bookServlet?action=list");
    }
    //通过这个查询所有图书
    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        List<Book> books = book.queryAllBook();
        req.setAttribute("book",books);
        req.getRequestDispatcher("/pages/manager/book_manager.jsp").forward(req,resp);
    }

    protected void select(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //获取请求的参数图书编号
        String id = req.getParameter("id");
        //调用查询方法
        Book book = this.book.queryBookById(Integer.parseInt(id));
        //将查询得到的book对象设置到Request域中
        req.setAttribute("book",book);
        //请求转发到修改页面
        req.getRequestDispatcher("/pages/manager/book_edit.jsp").forward(req,resp);
    }

}

登录注册:

package web;

import pojo.User;
import service.UserServcive;
import service.impl.UserServiceImpl;
import utils.WebUtils;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

public class UserServlet extends BaseServlet {
    private UserServcive user =new UserServiceImpl();

    public void login(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        //一次性把所有请求的参数注入到javaBean对象中
        Map<String, String[]> parameterMap = req.getParameterMap();
        User user1 = WebUtils.getParam(parameterMap, new User());
        if (user.login(user1)==null){
            req.setAttribute("msg","用户不存在或密码错误");
            req.setAttribute("username",username);
            req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);
        }else{
            System.out.println("登录成功");
            req.getRequestDispatcher("/pages/user/login_success.jsp").forward(req,resp);
        }
    }

    public void regist(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException{
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        String repasw =req.getParameter("repwd");
        String email = req.getParameter("email");
        String code = req.getParameter("code");
        //一次性把所有请求的参数注入到javaBean对象中
        Map<String, String[]> parameterMap = req.getParameterMap();
        User user1 = WebUtils.getParam(parameterMap,new User());
        System.out.println(user1);
        if ("6n6np".equals(code)){
            if (user.existUsername(username)){
                req.setAttribute("msg","用户名已存在");
                req.setAttribute("email",email);
                req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
            }else{
                if(repasw.equals(password)){
                    user.register(user1);
                    System.out.println("注册成功!!");
                    req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req,resp);
                }else {
                    req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
                }
            }
        }else{
            req.setAttribute("username",username);
            req.setAttribute("password",password);
            req.setAttribute("repwd ",repasw);
            req.setAttribute("email",email);
            req.setAttribute("msg","验证码错误");
            req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
        }
    }
}

关于回显数据:

Servlet 程序端需要添加回显信息到 Request 域中

以书城登录为例子:

jsp 页面,需要输出回显信息 

反射优化(if~~else if)

 我们在实现业务的时候可能会有很多if,elseif这时候很麻烦

数据的封装和抽取 BeanUtils 的使用

BeanUtils 工具类,它可以一次性的把所有请求的参数注入到 JavaBean 中。

BeanUtils 工具类,经常用于把 Map 中的值注入到 JavaBean 中,或者是对象属性值的拷贝操作。 BeanUtils 它不是 Jdk 的类。而是第三方的工具类。所以需要导包。

1、导入需要的 jar 包: commons-beanutils-1.8.0.jar commons-logging-1.1.1.jar

2、编写 WebUtils 工具类使用: WebUtils 工具类:

package utils;

import org.apache.commons.beanutils.BeanUtils;

import java.util.Map;

public class WebUtils {
    //一次性把所有请求的参数注入到javaBean对象中
//    使用BeanUtils.populate(Object bean, Map properties)方法将前台jsp或者html页面的数据属性映射到bean中,
//    也就相当于将数据封装到bean中。随后,我们就可以通过bean.getXxx()方法来获取相应属性的值了。
     public static <T> T getParam(Map valua,T bean){
         try {
             BeanUtils.populate(bean,valua);
         } catch (Exception e) {
             e.printStackTrace();
         }
         return bean;
     }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hyong~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值