太多了把报告粘贴过来了,仅供参考
实习三 EL、JSTL及MVC
一、实习要求与目的
1.掌握标签库的使用
2.掌握EL及JSTL常用标签及方法
3.掌握MVC的编程模式,完成一个完整的信息管理系统
二、实习内容
使用EL、JSTL及MVC完成一个图书管理系统,要求完成图书信息的添加、修改、删除、查询与显示;并添加用户管理功能,只有登录用户才能完成图书的管理操作。
三、扩展
试着使用过滤器作为控制器完成实习内容。
四、实验代码
代码在最下面
工程结构如下图:
这个实验的工程结构中Model是cn.cie.dao和entity包中的dao层和实体类,Controller是一个过滤器和一个Servlet,其中Servlet主要是用作一个中间的统一控制,里面没有代码逻辑,代码逻辑主要都是通过过滤器实现,然后View就是几个jsp页面了。主要思路都比较清晰,其中有些细节需要注意,比如增加记录时id的自动设置等。
六、实验结果
1.登录控制
用户表中有一个用户
还未登录时直接访问/ctrl都会跳转到登录界面要求登录
登录成功后:
和数据库book表中的数据对应的上:
添加数据:
数据表中显示增加一条记录,id顺延:
修改图书信息:
把价格改为99
删除图书:
在图书对应的选项里点击删除选项即可删除图书信息:
数据表中的记录显示已经被删除
实在需要的也可以私信找我要工程。。
pom.xml
4.0.0 org.example shiyan3 1.0-SNAPSHOT war 8 8 javax.servlet javax.servlet-api 4.0.0 provided mysql mysql-connector-java 5.1.46 javax.servlet jstl 1.2 junit junit 4.13 test org.eclipse.jetty jetty-maven-plugin 9.2.11.v20150529 / 80
MyCtrlFilter.java
package cn.cie.controlles;
import cn.cie.dao.BookDao;
import cn.cie.dao.UserDao;
import cn.cie.entity.Book;
import cn.cie.entity.User;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
@WebFilter(filterName = "MyCtrlFilter",urlPatterns ={"/ctrl"})
public class MyCtrlFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void destroy() {
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request1=(HttpServletRequest) request;
HttpServletResponse response1=(HttpServletResponse) response;
String user = request.getParameter("user");
String password = request.getParameter("password");
String sessionuser=(String) request1.getSession().getAttribute("user");
UserDao userDao=new UserDao();
if(user==null)
{
if(sessionuser==null)//之前没有登录过
{
request1.getSession().setAttribute("err","还未登陆,请登陆");
response1.sendRedirect("login.jsp");
return;
}
}
else //从login.jsp访问
{
//是否勾选记住密码,写cookie
String memory=request.getParameter("memory");
if(memory!=null)
{
cookie c1=new cookie("user",user);
cookie c2=new cookie("password",password);
response1.addcookie(c1);
response1.addcookie(c2);
}
//判断用户名和密码
boolean flag=false;
try {
List users=userDao.listuser();
for (User u:users
) {
if (u.getUser().equals(user)){
if(u.getPassword().equals(password)){ //用户名和密码都正确
flag=true;
request1.getSession().setAttribute("user",user);
break;
}
}
}
} catch (Exception e) {
e.printStackTrace();
request1.setAttribute("errMsg",e.getMessage());
request1.getRequestDispatcher("error.jsp").forward(request1,response1);
}
if(flag==false)
{
request1.getSession().setAttribute("err","用户名或密码错误");
response1.sendRedirect("login.jsp");
return;
}
}
String act = request1.getParameter("act");
BookDao bookDaodao = new BookDao();
try{
if("list".equals(act)){
List books = bookDaodao.list();
request1.setAttribute("books",books);
request1.getRequestDispatcher("list.jsp").forward(request1,response1);
}
else if("add".equals(act)) {
request1.getRequestDispatcher("edit.jsp").forward(request1,response1);
}
else if("edit".equals(act)) {
String ids = request1.getParameter("id");
Integer id = Integer.parseInt(ids);
Book book = bookDaodao.getById(id);
request1.setAttribute("book",book);
request1.getRequestDispatcher("edit.jsp").forward(request1,response1);
}
else if("save".equals(act)) {
String tuh = request1.getParameter("tuh");
String name = request1.getParameter("name");
String className = request1.getParameter("book_type");
String scorces = request1.getParameter("price");
Float sc = Float.parseFloat(scorces);
Book book = new Book();
String id = request1.getParameter("id");
if(id != null && !"".equals(id)){//id非空是对已存在记录编辑的情况
Integer ids = Integer.parseInt(id);
book.setId(ids);
}
book.settuh(tuh);
book.setName(name);
book.setbook_type(className);
book.setprice(sc);
bookDaodao.insertOrUpdate(book);
response1.sendRedirect("ctrl?act=list");
}
else if("delete".equals(act)) {
String ids = request1.getParameter("id");
Integer id = Integer.parseInt(ids);
bookDaodao.deleteById(id);
response1.sendRedirect("ctrl?act=list");
}
else {
throw new Exception("非法请求!!");
}
}
catch (Exception e){
e.printStackTrace();
request1.setAttribute("errMsg",e.getMessage());
request1.getRequestDispatcher("error.jsp").forward(request1,response1);
}
//chain.doFilter(request1, response1);
}
}
Servlet.java
没啥东西,就是借他的路径中转一下
package cn.cie.controlles;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "Servlet", value = "/ctrl")
public class Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
baseDao.java
package cn.cie.dao;
import java.sql.*;
public class baseDao {
static String driverName = "com.mysql.jdbc.Driver";
static String url = "jdbc:mysql://localhost/mvc?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai";
static String userName = "root";
static String passwd = "";
static Connection con = null;
void getCon() throws ClassNotFoundException, SQLException {//ok
Class.forName(driverName);
if(con == null || con.isClosed()){
con = DriverManager.getConnection(url,userName,passwd);
}
}
protected ResultSet select(String sql) throws SQLException, ClassNotFoundException {//ok
getCon();
Statement stat = con.createStatement();
ResultSet rs = stat.executeQuery(sql);
return rs;
}
protected ResultSet select(String sql, Object[] params) throws SQLException, ClassNotFoundException {//ok
getCon();
PreparedStatement pstat = con.prepareStatement(sql);
for(int i = 1; i <= params.length; i++){
pstat.setObject(i,params[i - 1]);
}
ResultSet rs = pstat.executeQuery();
return rs;
}
protected int save(String sql,Object[] params) throws SQLException, ClassNotFoundException {//ok
getCon();
PreparedStatement pstat = con.prepareStatement(sql);
for(int i = 1; i <= params.length; i++){
pstat.setObject(i,params[i - 1]);
}
int rs = pstat.executeUpdate();
pstat.close();
return rs;
}
protected int getNewid()throws SQLException, ClassNotFoundException //zijixiede
{
getCon();
Statement stat = con.createStatement();
ResultSet rs = stat.executeQuery("select max(id) id from book ");
if(!rs.next()) return 1;//当前表中没有数据
return rs.getInt(1)+1;//取第一列的数据,即最大的id
}
void closeCon(){//ok
try {
con.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
BookDao.java
package cn.cie.dao;
import cn.cie.entity.Book;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BookDao extends baseDao {
static String SELECt = "select * from book";
static String SELECtBYID = "select * from book where id=?";
static String INSERT = "insert into book set tuh=?,name=?,book_type=?,price=?,id=?";
static String UPDATe = "update book set tuh=?,name=?,book_type=?,price=? where id=?";
static String DELETE = "delete from book where id = ?";
public List list() throws SQLException, ClassNotFoundException {
List books = new ArrayList<>();
ResultSet rs = select(SELECT);
while (rs.next()){
Book book = new Book();
book.setId(rs.getInt("id"));
book.settuh(rs.getString("tuh"));
book.setName(rs.getString("name"));
book.setbook_type(rs.getString("book_type"));
book.setprice(rs.getFloat("price"));
books.add(book);
}
rs.close();
return books;
}
public void insertOrUpdate(Book book) throws SQLException, ClassNotFoundException {
Object[] params = new Object[5];
params[0] = book.gettuh();
params[1] = book.getName();
params[2] = book.getbook_type();
params[3] = book.getprice();
if(book.getId() == null){//插入的情况,需要加id
params[4]=Integer.valueOf(getNewid());
save(INSERT,params);
}
else {//更新的情况
params[4]=book.getId();
save(UPDATE,params);
}
}
public void deleteById(Integer id) throws SQLException, ClassNotFoundException {
Object[] params = new Object[1];
params[0] = id;
save(DELETE,params);
}
public Book getById(Integer id) throws SQLException, ClassNotFoundException {//ok
Object[] params = new Object[1];
params[0] = id;
ResultSet rs = select(SELECTBYID,params);
rs.next();
Book book = new Book();
book.setId(rs.getInt("id"));
book.settuh(rs.getString("tuh"));
book.setName(rs.getString("name"));
book.setbook_type(rs.getString("book_type"));
book.setprice(rs.getFloat("price"));
return book;
}
}
UserDao.java
package cn.cie.dao;
import cn.cie.entity.User;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class UserDao extends baseDao {
static String SELECTUSER = "select * from usertable";
public List listuser() throws SQLException, ClassNotFoundException{
List users = new ArrayList<>();
ResultSet rs = select(SELECTUSER);
while (rs.next()){
User user = new User();
user.setUser(rs.getString("user"));
user.setPassword(rs.getString("password"));
users.add(user);
}
rs.close();
return users;
}
}



