精华内容
下载资源
问答
  • JavaWeb课设 自动贩卖机系统 内附详细代码项目 +数据库 +答辩PPT
  • 燕山大学计算机专业javaweb课设(大学师生交流论坛) 2018年的课设
  • 购物商城javaWeb课设

    2021-01-10 13:10:54
    含有完整项目思路,项目结构图以及代码截图,心得体会
  • 内科大javaweb课设

    2020-12-30 16:19:32
    书城项目报告+代码
  • JavaWeb课设--高校人事管理系统系统界面代码MVC模式代码解析前端界面后端界面结尾 系统界面 此系统主要采用java+mysql+servlet技术,第一次做这种项目,先放图 能看到主页index有登录注册两个功能,进入功能页面后...

    系统界面

    此系统主要采用java+mysql+servlet技术,第一次做这种项目,先放图
    在这里插入图片描述
    能看到主页index有登录注册两个功能,进入功能页面后如下图所示
    在这里插入图片描述
    系统前端界面方面采用了HTML+CSS+JS,图中所有图片样式均可自己替换。

    代码

    MVC模式

    此系统也采用了最常用的MVC开发模式,那首先我们得了解一下什么是MVC,

    1、M 即model模型是指模型表示业务规则。在MVC的三个部件中,模型拥有最多的处理任务。被模型返回的数据是中立的,模型与数据格式无关,这样一个模型能为多个视图提供数据,由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。
    2、V 即View视图是指用户看到并与之交互的界面。比如由html元素组成的网页界面,或者软件的客户端界面。MVC的好处之一在于它能为应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,它只是作为一种输出数据并允许用户操纵的方式。
    2、C 即controller控制器是指控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。

    有些人看了还是不理解,这里放一张图在这里插入图片描述
    还有不懂不理解的可以多百度一下或者多实践几个小项目,就能体验到这个模式的好处。

    代码解析

    使用的软件环境:
        1.原码编译使用IDEA2019.3.3(当然使用更高版本也可以)
        2.JDK采用的是10版本,直接下载原码运行时要注意修改配置文件中的jdk版本,否则会报错
        3.数据库及使用的是MySQL5.5.36(建议使用5版本)和Navicat(这是一个很好的数据库软件,推荐大家使用,网上破解方法也很多)
    话不多说,直接放代码。
        4.Tomcat使用的是9,百度都是可以直接下载,或者点击此处去下载

    下图是原码中所有代码大纲

    这个大纲能更好的有助于理解MVC模式
    所有代码目录

    前端界面

    下面展示 登录主界面代码

    <div class="wrap" id="wrap">
    		<div class="logGet">
    			<!-- 头部提示信息 -->
    			<div class="logD logDtip">
    				<p class="p1">登录</p>
    			</div>
    				<!-- 输入框 -->
    		<form id="frmLOGIN" name="frmLOGIN">
    			<div class="lgD">
    				<img src="img/用户名.png" width="20" height="20" alt=""/>
    				<input id="userid" name="userid" type="text" placeholder="输入帐号" AUTOCOMPLETE="OFF"/>
    			</div>
    			<div class="lgD">
    				<img src="img/密码.png" width="20" height="20" alt=""/>
    	<input id="password" name="password" type="password" placeholder="输入用户密码" />
    			<img id="pwVisible" src="img/密码可见.png" width="20" height="20" alt=""
    				style="type:text/css; margin-left: 90%; cursor:pointer" />
    			</div>
    			<div class="logC">
    				<a href="files/register.jsp" target="_self">
    					<button type="button" style="cursor:pointer">注册</button></a>
    				<a target="_self">
    			<button type="button" id="btnLogin" style="cursor:pointer">登 录</button></a>
    

    下面是 注册界面代码

    <body background="主页.jpg">
    	<hr>
        <h1>用户注册</h1>
    	<hr>
    	<form id="frmREGISTER" name="frmREGISTER" AUTOCOMPLETE="OFF" action="/RegisterServlet">
    		<table>
                <tr height="35px">
                    <td>登录帐号:</td>
                    <td>
                        <input type="text" name="reguser" id="reguser" placeholder="输入帐号"/>
                    </td>
                    <td id="tduser"></td>
                </tr>
                
                <tr height="35px">
                    <td >密码:</td>
                    <td>
                        <input type="password" name="regpw0" id="regpw0" placeholder="输入用户密码"/>
                    </td>
                </tr>
                <tr height="35px">
                    <td >确认密码:</td>
                    <td>
                        <input type="password" name="regpw1" id="regpw1" placeholder="确认用户密码"/>
                    </td>
                    <td id="tdpw1"></td>
                </tr>
            </table>
            <a target="_blank">
            <input type="submit" value="注册">
    		<a href="index.jsp" target="_self">
    		<button type="button" id="btnCancel" style="cursor:pointer">取 消</button></a>
    		<a><input type="reset" value="重 置" title="清空输入框" id="reSet"/></a>
    	</form>
    <h1 style="color: red">${message}</h1>
      </body>
    

    下面展示 功能页面代码

    <body id="body0">
      	<%
      		//HttpSession session1 = request.getSession();
      		response.setHeader("Cache-Control","no-cache");
    		response.setHeader("Cache-Control","no-store"); 
    		response.setDateHeader("Expires", 0);
    		response.setHeader("Pragma","no-cache");
      	 %>
      	  <input type="hidden" name="hsession" id="hsession" value="<%=session.getAttribute("userid")%>"/>
    	  <script type="text/javascript">
    	     	document.write(new Date().toLocaleTimeString());   // 将本地时间转换成字符串返回
    	  </script>
    	  
      	<div>
      		<ul style="margin:0; padding:0">
    	  		<li id="liQuit" style="display:inline; margin:0; padding:0; cursor:pointer"><a>退出</a></li>
           	</ul>
      	</div>
        <form id="frmALLDATA" name="frmALLDATA" AUTOCOMPLETE="OFF">
        	<label>员工编号</label>
        	<input type="text" id="emid" name="emid" required="required" placeholder="请输入员工编号"/>
        	<label>姓名</label>
        	<input type="text" id="name" name="name" required="required" placeholder="请输入姓名"/>
        	<label>性别</label>
        	<input type="text" id="sex" name="sex" required="required"  placeholder="请输入性别"/>
        	<label>年龄</label>
        	<input type="text" id="age" name="age" required="required"  placeholder="请输入年龄"/>
        	<label>职位</label>
        	<input type="text" id="post" name="post" required="required"  placeholder="请输入职位"/>
    
        	<br>
        	<label>身份证号</label>
        	<input type="text" id="idnum" name="idnum" required="required"  placeholder="请输入身份证号"/>    	
        	<label>籍贯</label>
        	<input type="text" id="place" name="place" required="required"  placeholder="请输入籍贯"/>
        	<label>联系方式</label>
        	<input type="text" id="phonenum" name="phonenum" required="required"  placeholder="请输入联系方式"/>
        	<label>部门</label>
        	<input type="text" id="department" name="department" required="required"  placeholder="请输入部门"/>
        	<label>工资</label>
        	<input type="text" id="wage" name="wage" required="required"  placeholder="请输入工资"/>
    
    		<input type="hidden" id="time" name="time" required="required" />
    		<input type="hidden" id="index" name="index" required="required" />
    		<br>
        	<input id="reset" type="reset" value="重置" title="清空输入框"/>
        	<button type="button" id="btnAllInsert" title="增加一条新数据">新增</button>
        	<button type="button" id="btnAllSelectAll" title="查询数据库中所有数据">全部查看</button>
        	<button type="button" id="btnAllSelectCon" title="查询数据库中满足输入条件的数据(无条件默认不输出)">筛选查看</button>
        	<button type="reset" id="btnAllUpdate" title="点击编辑中的更新后,对数据进行修改">更新</button>
     		<div id="div0">
    		<img id="img0" src="img/信息表头.jpg"/></div>
        	
        </form>
    
        <table class="table table-bordered table-hover" id="table1">
        	<thead>
        		<tr>
        			<th>员工编号</th>
        			<th>姓名</th>
        			<th>性别</th>
        			<th>年龄</th>
        			<th>职位</th>
        			<th>身份证号</th>
        			<th>籍贯</th>
        			<th>联系方式</th>
        			<th>部门</th>
        			<th>工资</th>
        			<th>记录时间</th>
        			<th>编辑</th>
      
        		</tr>
        	</thead>
        	<tbody id="tbody0">
        	</tbody>
        </table>
        <!-- 引入jQuery -->
        <script type="text/javascript" src="js/jquery-1.11.3.js"></script>
        <script type="text/javascript" src="js/jsAlldata.js"></script>
      </body>
    

    后端界面

            由于后端代码较多,这里不一一展示,只展示部分代码。详细代码请看文末源码。
    下面是UserServlet代码,处在servlet层,在MVC中属于控制(controller)层,这一层的Java代码都会继承HttpServlet,主要有doGet和doPost两种方法,在页面代码写的是get方法跳转,那么就运行servlet里doGet方法里面的代码(post同理)。
            当然使用最多的是doGet方法,一般首先用特定方法获得页面提交的姓名和密码,然后进行处理(判断是否合法等等),处理玩之后,决定是直接显示信息,还是跳转到其他页面。

    servlet就是接受页面信息,然后进行逻辑处理的一个java类。

    // 登录界面
    package ucas.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    import ucas.po.UserData;
    import ucas.service.impl.UserServiceImpl;
    
    @WebServlet("/UserServlet")
    public class UserServlet extends HttpServlet {
    	private static final long serialVersionUID = 1L;
    	public static Map<String, HttpSession> userid_Session = new HashMap<String, HttpSession>();  // 键为帐号,值为session
    	public static Map<String, String> sessionid_Userid = new HashMap<String, String>();  // 键为sessionid,值为帐号
    	public static HttpSession tmpS;  // 用于获取当前登录帐号前面登录的session
    	private UserData userData;
    	private UserServiceImpl userSerciImpl;
    	// 接收各变量
        private String strUserId;
        private String strPassword;
        private String strMethod;
        
        private HttpSession session;
        private PrintWriter out;
        /**
         * @see HttpServlet#HttpServlet()
         */
        public UserServlet() {
            super();
            // TODO Auto-generated constructor stub
            userData = new UserData();
            userSerciImpl = new UserServiceImpl();
        }
    
    	public void init(ServletConfig config) throws ServletException {
    		// TODO Auto-generated method stub
    	}
    	
    	public void destroy() {
    		super.destroy(); // Just puts "destroy" string in log
    	}
    	/**
    	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		doPost(request, response);
    	}
    
    	/**
    	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
    	 */
    	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    		// TODO Auto-generated method stub
    		response.setContentType("text/html");
    		//语言编码
    		request.setCharacterEncoding("utf-8");
    		response.setCharacterEncoding("utf-8");
    		out = response.getWriter();
    		
    		// 接收参数
    		strUserId = request.getParameter("userid");
    		strPassword = request.getParameter("password");
    		strMethod = request.getParameter("method");  // 获取方法名
    		session = request.getSession();
    		
    		switch (strMethod) {
    		case "userLogin":
    			mUserLogin();
    			break;
    		default:
    			break;
    		}
    		out.flush();
    		out.close();
    	}
    	
    	// 验证能否登录
    	private void mUserLogin() {
    		// TODO Auto-generated method stub
    		tmpS = null;
    		String strUser = "";
    		userData = userSerciImpl.userSelectOne(strUserId);
    		if(!strPassword.equals(userData.getPassword())){  // 帐号与密码不匹配
    			out.println(-1);
    		}
    
    		else if(strPassword.equals(userData.getPassword())){
    				tmpS = userid_Session.get(strUserId);
    				strUser = sessionid_Userid.getOrDefault(session.getId(), "");
    				if(strUser != "") //该客户端登录其他帐号
    					out.println(-2);
    				if(tmpS == null){  // 该账号未在其他处登录
    					setSession();
    					userid_Session.put(strUserId, session);
    					sessionid_Userid.put(session.getId(), strUserId);
    				}
    				else{   // 该账号在其他处登录
    					tmpS.setAttribute("message", "yes");  // 设置标志信息
    					setSession();
    					userid_Session.put(strUserId, session);
    					sessionid_Userid.put(session.getId(), strUserId);
    				}
    				out.println(1);
    			}
    
    		else
    			out.println(-1);
    	}
    	// 设置session
    	private void setSession(){
    		session.setAttribute("userid", strUserId);
    		session.setAttribute("password", strPassword);
    		session.setAttribute("message", "no");  //  设为no表示为当前登录帐号,变为yes时表示该账号被迫下线
    	}
    }
    

    下面是 UserDao接口代码片。属于DAO(Data Access Object)层代码,是一个数据访问接口,数据访问:顾名思义就是与数据库打交道。夹在业务逻辑与数据库资源中间,是MVC模式中Model层。

    一开始的时候想着需不需要接口,对于此项目来说,若只进行到这里,有没有接口都是可以的,但若要是以后要将这个代码完善、升级,那这时候接口就显得格外有优点,他不需要你再重新写一遍用户实体类,只需要继承这个接口在实现重写就可以达到很方便的效果。

    package ucas.dao;
    
    import java.util.ArrayList;
    
    import ucas.po.UserData;
    
    public interface UserDao {
    	// 0增加新用户
    	public int userInsert(UserData user);
    	// 1删除用户
    	public int userDelete(String userid);
    	// 2修改用户信息
    	public int userUpdate(UserData user);
    	// 3查看指定用户信息
    	public UserData userSelectOne(String userid);
    	// 4全部用户
    	public ArrayList<UserData> userSelectAll();
    }
    
    

    下面是 UserDaoImpl代码片,此代码实现了上面的UserDao接口,将该接口方法重写。

    package ucas.dao.impl;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.text.ParsePosition;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    
    import ucas.dao.UserDao;
    import ucas.po.UserData;
    import ucas.util.ConnectDB;
    
    public class UserDaoImpl implements UserDao{
    	static PreparedStatement sql;  // Statement对象
    	private String sqlString;  //  sql代码字符串
    	static ConnectDB conn = new ConnectDB();
    	private Connection con = conn.myGetConnection("talentmanagedb"); // 连接数据库
    	private String tableName; // 数据库所用表的名称
    	private int resultID = -1;  // 判断操作状态,操作失败为-1
    	
    	// 构造方法
    	public UserDaoImpl() {
    		// TODO Auto-generated constructor stub
    		super();
    		this.tableName = "usertable";
    	}
    	public UserDaoImpl(String tableName){
    		super();
    		this.tableName = tableName;
    	}
    	@Override
    	public int userInsert(UserData user) {
    		// TODO Auto-generated method stub
    		sqlString = "insert into "+tableName+"(userid, password, `time`) values(?,?,?)";
    		try {
    			sql = con.prepareStatement(sqlString);
    			sql.setString(1, user.getUserid());
    			sql.setString(2, user.getPassword());
    			sql.setString(3, user.getTime());
    			resultID = sql.executeUpdate();
    			System.out.println("已成功注册, 用户名为"+user.getUserid()+"!");
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return resultID;
    	}
    
    	@Override
    	public int userDelete(String userid) {
    		// TODO Auto-generated method stub
    		sqlString = "delete from "+tableName+" where userid = ?";
    		try {
    			sql = con.prepareStatement(sqlString);
    			sql.setString(1, userid);
    			resultID = sql.executeUpdate();
    			System.out.println("用户"+userid+"已删除!");
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return resultID;
    	}
    
    	@Override
    	public int userUpdate(UserData user) {
    		// TODO Auto-generated method stub
    		sqlString = "update "+tableName+" set password = ? where userid = ?";
    		try {
    			sql = con.prepareStatement(sqlString);
    			sql.setString(1, user.getPassword());
    			//sql.setString(2, user.getMproof());
    			sql.setString(2, user.getUserid());
    			resultID = sql.executeUpdate();
    			System.out.println("用户"+user.getUserid()+"的数据修改成功!");
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return resultID;
    	}
    
    	@Override
    	public UserData userSelectOne(String userid) {
    		// TODO Auto-generated method stub
    		UserData result = new UserData();
    		sqlString = "select * from "+tableName+" where userid = ?";
    		try {
    			sql = con.prepareStatement(sqlString);
    			sql.setString(1, userid);
    			ResultSet resSql = sql.executeQuery();
    			if(resSql.next()){
    				result.setUserid(userid);
    				result.setPassword(resSql.getString("password"));
    				//result.setMproof(resSql.getString("mproof"));
    				// 将字符串时间转换为Date对象
    				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    				ParsePosition pos = new ParsePosition(0);
    				Date dateTime = format.parse(resSql.getString("time"), pos);
    				result.setTime(dateTime);
    				System.out.println("已完成用户"+userid+"的信息查询!");
    			}
    			else{
    				return null;
    			}
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return result;
    	}
    
    	@Override
    	public ArrayList<UserData> userSelectAll() {
    		// TODO Auto-generated method stub
    		ArrayList<UserData> result = new ArrayList<UserData>();
    		sqlString = "select * from "+tableName+"";
    		try {
    			sql = con.prepareStatement(sqlString);
    			ResultSet resSql = sql.executeQuery();
    			while(resSql.next()){
    				UserData tmp = new UserData();
    				tmp.setUserid(resSql.getString("userid"));
    				tmp.setPassword(resSql.getString("password"));
    				// 将字符串时间转换为Date对象
    				SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    				ParsePosition pos = new ParsePosition(0);
    				Date dateTime = format.parse(resSql.getString("time"), pos);
    				tmp.setTime(dateTime);
    				result.add(tmp);
    			}
    			System.out.println("已完成所有用户信息查询!");
    		} catch (SQLException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		return result;
    	}
    
    	public static void main(String[] args){  // 测试代码
    		UserDaoImpl test = new UserDaoImpl("usertable");
    		ArrayList<UserData> result = new ArrayList<UserData>();
    		result = test.userSelectAll();
    		System.out.println(result);
    		UserData user1 = new UserData();
    		
    		user1 = test.userSelectOne("sun123");
    		System.out.println(user1);
    		//UserData user2 = new UserData("24351234", "35431", "哈哈", "24243@qq.com",new Date());
    		//test.userInsert(user2);
    //		user2.setMproof("修改1");
    //		test.userUpdate(user2);
    //		test.userDelete("12432");
    	}
    }
    

    下面是 UserData代码片。此代码片是属于PO(Persistent Object)即持久对象,它们是由一组属性和属性的get和set方法组成。可以看成是与数据库中的表相映射的java对象

    package ucas.po;
    
    import java.text.SimpleDateFormat;
    import java.util.Date;
    // 一个登录用户
    public class UserData {
    	// 定义成员变量
    	private String userid;  // 用户名
    	private String password;  // 登录密码
    
    	private Date time; // 注册时间
    	// 构造方法
    	public UserData(){
    		
    	}
    	public UserData(String userid, String password, Date time){
    		super();
    		this.userid = userid;
    		this.password = password;
    		this.time = time;
    	}
    	// 成员方法  getter和setter
    	public String getUserid() {
    		return userid;
    	}
    	public void setUserid(String userid) {
    		this.userid = userid;
    	}
    	public String getPassword() {
    		return password;
    	}
    	public void setPassword(String password) {
    		this.password = password;
    	}
    	public String getTime(){
    		SimpleDateFormat mytimeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    		String mytime = mytimeFormat.format(time);
    		return mytime;
    	}
    	public void setTime(Date time){
    		this.time = time;
    	}
    	// 重写toString
    	public String toString(){
    		return "UserData[用户名: "+userid+", 密码: "+password+", 注册时间: "+this.getTime()+"]";
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    	}
    	
    }
    

    下面是 UserService接口代码片。属于Service层,service层是在mcv三层模式中新添加一层,能够更加清晰的定义应用程序的边界,需要操作数据的时候,通过service层访问DAO层来实现。service层做的事情,不仅仅是调用DAO操作数据,还会包含了一定的业务逻辑。整个程序的设计,也变成了针对服务进行设计。

    package ucas.service;
    
    import ucas.po.UserData;
    
    public interface UserService {
    	// 0增加新用户
    		public int userInsert(UserData user);
    		// 1修改用户信息
    		public int userUpdate(UserData user);
    		// 2查看指定用户信息
    		public UserData userSelectOne(String userid);
    }
    

    下面是 UserServiceImpl代码片。此代码实现了上面的UserService接口,原理和DAO层下接口的类似,都是为了后期代码改进使用。

    package ucas.service.impl;
    
    import java.util.ArrayList;
    import java.util.Date;
    
    import ucas.dao.impl.UserDaoImpl;
    import ucas.po.UserData;
    import ucas.service.UserService;
    
    public class UserServiceImpl implements UserService {
    	private UserDaoImpl udi;
    	public UserServiceImpl() {
    		// TODO Auto-generated constructor stub
    		super();
    		this.udi = new UserDaoImpl();
    	}
    
    	@Override
    	public int userInsert(UserData user) {
    		// TODO Auto-generated method stub
    		return udi.userInsert(user);
    	}
    
    	@Override
    	public int userUpdate(UserData user) {
    		// TODO Auto-generated method stub
    		return udi.userUpdate(user);
    	}
    	@Override
    	public UserData userSelectOne(String userid) {
    		// TODO Auto-generated method stub
    		return udi.userSelectOne(userid);
    	}
    	
    }
    

    下面展示一些 ConnectDB代码片。这是一个负责连接数据库的代码片,所有的DAO层中的代码会实现这个类的方法,因为DAO层是负责数据库操作,所以一定会调用ConnectDB的方法。

    // 连接数据库
    package ucas.util;
    
    import java.sql.*;
    
    public class ConnectDB {
    	Connection con;  // 生命Connection对象
    	// 功能:建立数据库连接
    	public Connection myGetConnection(String dbName){  
    		try{
    			Class.forName("com.mysql.jdbc.Driver");  // 启动驱动
    			System.out.println("数据库驱动加载成功!");
    		}catch(ClassNotFoundException e){
    			e.printStackTrace();
    		}
    		try{  //连接数据库 talentmanageDB-数据库名
    			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/"+dbName+"?useSSL=false", 
    					"root", "123");
    			System.out.println("数据库连接成功!");
    		}catch(SQLException e){
    			e.printStackTrace();
    		}
    	return con;	
    	}
    	public static void main(String[] args){
    		ConnectDB mycon = new ConnectDB();
    		mycon.myGetConnection("talentmanagedb");
    	}
    }
    

    结尾

    此系统也是参考了一位博主的原码进行改进,点击此处查看原博主
    若有侵权,请联系本人删除文章

    查看源码如下链接:https://pan.baidu.com/s/163WgZsS7pTs7YrA6_iuKxg
    提取码:xiao

    展开全文
  • 环境配置:eclipse、MySQL、Navicat、apache-tomcat-7.0.40。该程序基于三层架构编写的一个简单的网上购物平台。
  • 把开源的变成自己的,把自己的变成祖传的 一.要求 二.技能树 三.思路 四.代码 五.总结

    把开源的变成自己的,把自己的变成祖传的

    一.要求

    做一个web项目 , 超市管理系统 , 实现增删改查各种信息

    二.技能树

    1.HTML+CSS : div+input框
    2.JSP+Servlet : request + response
    3.Ajax+JavaScript(验证各种信息)
    4.MySQL数据库及JDBC

    三.思路

    在这里插入图片描述

    四.代码

    链接:https://pan.baidu.com/s/139bHry1oOwqFKMJz2rmE7g
    提取码:0psk

    五.总结

    没啥技术含量 , 注意别打错字就OK
    Servlet中不要写太多的逻辑

    六.界面

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • javaweb 课设采坑总结

    2019-01-23 15:28:42
    乱码问题: form 提交方式为post 否则存入数据库字段乱码 jsp page指令设置utf-8 request.setcharacter( ) 只对post方式有效 response.setContentType 必须设置 可能MySQL中命令行的问题会出现乱码,设置指令: ...
    • 乱码问题:
    1. form 提交方式为post 否则存入数据库字段乱码
    2. jsp page指令设置utf-8
    3. request.setcharacter( ) 只对post方式有效
    4. response.setContentType 必须设置
    5. 可能MySQL中命令行的问题会出现乱码,设置指令:
      set names gbk;
    • 如果出现500问题发现未找到字段,首先检查两处
      1.Post,get方法是否都有填写
      2.xml是否已配置url-pattern
      3.检查字段名称!!!

    • 处理一个表单中多组字段同时上传时的接收问题:

            String[] gradeLists = request.getParameterValues("gradeList");
            String[] gradeSidList = request.getParameterValues("gradeSidList");
            String[] sTime = request.getParameterValues("sTime");
            ArrayList<Grade> list = new ArrayList<Grade>();
            for (int i = 0; i < gradeLists.length; i++) {
                Grade grade = new Grade();
                grade.setTime(Float.valueOf(sTime[i]));
                grade.setsId(gradeSidList[i]);
                grade.setId(gradeLists[i]);
                if (!new GradeDao().update(grade)) {
                    request.setAttribute("isupdate", false);
                }
            }
    

    前端问题:

    • previousSibling和previousElementSibling nextSibling和nextElementSibling的区别:
      通常要用previousElementSibling,nextElementSibling,因为previousSibling会把空格当作相邻节点

    • 抑制a标签的跳转:绑定onclick事件并返回return false

    • onsubmit事件放在form表单里,并且使用 return

    tomcat安装问题:

    • 老早以前的问题了,一直在桌面旁放着,就写在这里吧:
      报错:Could not contact localhost:8005. Tomcat may not be running.
      解决:因为在未启动时就关闭了tomat 占用了8005端口

    • 杀掉8005的指令
      netstat -ano|findstr “8005”
      tasklist|findstr "进程号"
      如要杀nginx.exe进程,命令如下:
      taskkill /im nginx.exe /f
      NOTE: /f在这里意为强制结束进程
      C:\Users\lfy>taskkill /f /pid 12692
      成功: 已终止 PID 为 12692 的进程。
      也可以使用pid杀:
      taskkill /pid {pid}

    展开全文
  • 有关javaweb的小东西 **小知识: 1.<% %>叫做脚本片段,其中写的内容会翻译在Servlet的Service方法中,显然我们可以在Service方法中定义局部变量或者调用其他方法。 但是您不能在Service中定义其他方法,也...
    # 小知识:
    

    Java

    1…next()方法的作用:

    指针指向下一条记录,有记录(有值)返回true并把记录内容存入到对应的对象中,也就是obj.next()的obj中。如果没有返回false。
    next()方法返回的是boolean型,用来确认有没有数据,执行一次游标后移一位,用来遍历用的。所以if(rs.next()只遍历一次,即一条数据,或者说是确认是否存在数据,while(rs.next()遍历每一条数据。

    2. Vector的作用

    //获取购物车对象
    Vector cart = (Vector) session.getAttribute(“cart”);

    综上:Vector 类提供了实现可增长数组的功能

    3. length() 方法,length 属性和 size() 方法的区别

    1、length() 方法是针对字符串来说的,要求一个字符串的长度就要用到它的length()方法;
    2、length 属性是针对 Java 中的数组来说的,要求数组的长度可以用其 length 属性;
    3、Java 中的 size() 方法是针对泛型集合说的, 如果想看这个泛型有多少个元素, 就调用此方法来查看!

    顺便延伸一下,什么是泛型!
    Java泛型设计原则:只要在编译时期没有出现警告,那么运行时期就不会出现ClassCastException异常.
    泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型。
    参数化类型:
    把类型当作是参数一样传递,
    <数据类型> 只能是引用类型。
    相关术语:ArrayList<E>中的E称为类型参数变量
    ArrayList<Integer>中的Integer称为实际类型参数
    整个称为ArrayList<E>泛型类型
    整个ArrayList<Integer>称为参数化的类型ParameterizedType
    详情可见:
    https://www.zhihu.com/question/272185241

    这个例子来演示这两个方法和一个属性的用法:

    
    import java.util.ArrayList; import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
            String array[] = { "First", "Second", "Third" };
            String a = "HelloWorld";
            List<String> list = new ArrayList<String>();
            list.add(a);
            System.out.println("数组array的长度为" + array.length);
            System.out.println("字符串a的长度为" + a.length());
            System.out.println("list中元素个数为" + list.size());
    
        } }
    

    输出的值为: 数组array的长度为3 字符串a的长度为10 list中元素个数为1

    Web项目中各个目录的作用:

    在这里插入图片描述

    JavaWeb

    1.<% %>叫做脚本片段

    其中写的内容会翻译在Servlet的Service方法中,显然我们可以在Service方法中定义局部变量或者调用其他方法。
    但是您不能在Service中定义其他方法,也就是说,我们可以在<%%>中定义局部变量或调用方法,但不能定义方法。 一个jsp页面中可以有多个脚本片段,但是多个脚本片段的结构必须完整。**

    PS:<%! 在%>中 声明方法,属性和变量。

    <%=%>常量jsp表达式,用于在网页上方输出声明的变量或表达式。

    可以以模板方式简单有效地添加动态Web内容。可以与JavaBean和标记库技术一起附加的通用功能代码(设计的组件易于重用并减少重复)。

    2.JSTL(Java server pages standarded tag library,即JSP标准标签库)

    原来jsp是java server pages (Java服务器页面)

    3.JSP

    (1)<c:forEach>标签

    迭代一个集合中的对象

    <c:forEach
        items="<object>"
        begin="<int>"
        end="<int>"
        step="<int>"
        var="<string>"
        varStatus="<string>">
    

    在这里插入图片描述

    4.EL表达式

    表示你另外一个页面传过来的参数的值,比如从另外一个页面传了一个name为name,value为value的参数,在本页面写${name }就会显示value。

    即它会从page,request,session,application中取值。比如:${name}它的意思就从以上4个对象中去取到名为name的值。

    5.jsp:useBean标签用来在jsp页面中创建一个Bean实例,定义语法如下:

    先谈谈javabean的作用
    https://blog.csdn.net/a327736051/article/details/49557435

    一:jsp:useBean语法

    <jsp:useBean id=“id” scope=“page|request|session|application” typeSpec/>

    二:jsp:setProperty语法

    <jsp:setProperty name=“beanName” propertyDetail />其中,propertyDetail可以是以下中的一个:

    1,property="*"

    2,property=“propertyName” param=“parameterName”

    3,property=“propertyName”

    4,property=“propertyName” value=“property value”

    三:jsp:getProperty语法

    <jsp:getProperty name=“beanName” property=“propertyName”/>

    程序例子:

    一共有三个文件:TestBean.java,register.jsp,register.html

    TestBean.java
    
    package com.jsp.ch3;
    
    public class TestBean {
        private String userName;
        private String password;
        private int age;
        public String getUserName() {
            return userName;
        }
        public void setUserName(String userName) {
            this.userName = userName;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
    }
    
    register.html
    
    <html>
      <body>
        <form action="register.jsp" method="post">
            <table>
                <tr>
                    <td>
                        姓名:<input type="text" name="userName">
                    </td>
                </tr>
                <tr>
                    <td>
                        密码:<input type="text" name="password">
                    </td>
                </tr>
                <tr>
                    <td>
                        年龄:<input type="text" name="age">
                    </td>
                </tr>
                <tr>
                    <td>
                        <input type="submit">
                    </td>
                </tr>
            </table>
        </form>
      </body>
    </html>
    
    register.jsp
    
    <%@ page language="java"  pageEncoding="gb2312"%>
    <jsp:useBean id="user" scope="page" class="com.jsp.ch3.TestBean"/>
    <jsp:setProperty name="user" property="*"/>
    或者用以下,param可以不填写,其中param对应的是提交页面的表单name
    <jsp:setPro                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       perty property="userName" name="user" param="userName"/>
    <jsp:setProperty property="password" name="user" param="password"/>
    <jsp:setProperty property="age" name="user" param="age"/>
    <html>
      <body> 
          注册成功:<br>
          <hr>
          使用Bean的属性方法<br>
          用户名: <%=user.getUserName()%><br>
          密码: <%=user.getPassword()%><br>
          年龄: <%=user.getAge()%><br>
          <hr>
          使用getProperty<br>
          用户名:<jsp:getProperty name="user" property="userName"/><br>
          密码:  <jsp:getProperty name="user" property="password"/><br>
          年龄:  <jsp:getProperty name="user" property="age"/>
          客户端名称:<%=request.getRemoteAddr() %>
      </body>
    </html>
    

    6.jsp 中 include 的两种用法(老实说没看懂)

    我们都知道在jsp中include有两种形式,分别是
    Include指令:<%@ include file=””%>
    和include动作:<jsp:include page=”” flush=”true”/>
    前者是指令元素、后者是行为元素。具体它们将在何处用?如何用及它们有什么区别?这应该是很多人看到它都会想到的问题。下面一起来看看吧。
    通常当应用程序中所有的页面的某些部分(例如标题、页脚和导航栏)都相同的时候,我们就可以考虑用include。
    具体在哪些时候用<%@ include file=””%>,哪些时候用<jsp:include page=”” flush=”true”/>。这种形式。首先要明白的是它们之间的区别。只有了解了它们用法的不同才理解该在何时去用以及如何选择。

    两者最重要的区别:JSP指令<%@ include file=””%>,是将被引入的JSP与原JSP融合到一起,而这个融合过程是在翻译阶段进行的。

    两者的区别,前者是静态包含,后者是动态包含。

    总结一下两种include 两种用法的区别,主要有两个方面的不同

    一、执行时间上:

    <%@ include file=”relativeURI”%> 是在翻译阶段执行

    <jsp:include page=”relativeURI” flush=”true” /> 在请求处理阶段执行。

    二、引入内容的不同:

    <%@ include file=”relativeURI”%>
    引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。

    <jsp:include page=”relativeURI” flush=”true” />
    引入执行页面或servlet所生成的应答文本。

    7.Vector类

    可实现自动增长的对象数组。
    java.util.vector提供了向量类(vector)以实现类似动态数组的功能。

    Vector 和ArrayList都是存放数据的
    Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的
    当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
    详情可见:
    https://www.runoob.com/java/java-vector-class.html

    8.什么是cookie?

    cookie 是一小段文本信息,伴随用户请求,在web服务器和浏览器之间传递。用户每次访问站点的时候,

    web应用程序都可以读取cookie包含的信息。 假设在用户请求您的网站的某个页面时,您的应用程序不仅是返回请求的页面。同时也返回一个包含日期

    和时间的cookie。用户的浏览器在获得页面的同时也获得了cookie.并且cookie保存在客户端的cookie文件夹中
    设置cookie的最大生命周期时,超过这个最大值时,浏览器会自动删除该cookie .

    cookie.setMaxAge(0);//如果cookie.setmaxage设置为0时,会马上在浏览器上删除指定的cookie
    cookie.setPath("/");//可在同一应用服务器内共享方法

    9.response.sendRedirect()与request.getRequestDispatcher().forward(request,response)的作用

    sendRedirect()函数的作用是重定向网页,向浏览器发送一个特殊的Header,然后由浏览器来做重定向,转到指定的页面。
    response.sendRedirect(request.getContextPath() + “/index.jsp”);//这里是转到 index.jsp
    request.getRequestDispatcher(url).forward(request,response);//请求转发到指定URL

    response.sendRedirect(url)跳转到指定的URL地址,产生一个新的request,所以要传递参数只有在url后加参数,如:
    url?id=1. request.getRequestDispatcher(url).forward(request,response)
    是直接将请求转发到指定URL,所以该请求能够直接获得上一个请求的数据,也就是说采用请求转发,request对象始终存在,不会重新创建。而
    sendRedirect()会新建request对象,所以上一个request中的数据会丢失。

    10.Java EE

    (1)Java EE三大组件技术是什么?

    Servlet,JSP,EJB
      Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
      Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
      JSP 全名为Java Server Pages,中文名叫java服务器页面,其根本是一个简化的Servlet设计,它[1] 是由Sun Microsystems公司倡导、许多公司参与一起建立的一种动态网页技术标准。JSP技术有点类似ASP技术,它是在传统的网页HTML(标准通用标记语言的子集)文件(.htm,.html)中插入Java程序段(Scriptlet)和JSP标记(tag),从而形成JSP文件,后缀名为(*.jsp)。 用JSP开发的Web应用是跨平台的,既能在Linux下运行,也能在其他操作系统上运行。
      EJB 是sun的JavaEE服务器端组件模型,设计目标与核心应用是部署分布式应用程序。简单来说就是把已经编写好的程序(即:类)打包放在服务器上执行。凭借java跨平台的优势,用EJB技术部署的分布式系统可以不限于特定的平台。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定义了一个用于开发基于组件的企业多重应用程序的标准。其特点包括网络服务支持和核心开发工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。

    11.getAttribute() 与setAttribute()

    getAttribute()方法返回Servlet环境对象中指定的属性对象。如果该属性对象不存在,返回空值。
    setAttribute()给予Servlet环境对象中所指定的对象一个名称

    12.request.getParameter和request.getAttribute

    (1)request.getParameter是获取请求参数,可以获取get和post提交的参数request;而getAttribute是获取请求属性。
    (2)后台使用request.getParameter获取用户提交的参数然后进行了数据库存储;而页面要显示搜索的关键字,使用了request.getParameter。
    (3)request.getAttribute用来获取属性的值,这个属性需要提前用request.setAttribute来设定,相当于设置了一个变量并赋值。
    (4)request.getParameter一般用来获取页面的参数值,例如GET、POST请求,request.getAttribute可用来获取对象,可获取servlet传来的值等。

    > 例子如下
    > (第一个例子是直接调用购物车数据进行判断)
    > <% 	if (session.getAttribute("cart") == "") {						//判断购物车对象是否为空
    > 		out.println(
    > 				"<script language='javascript'>alert('您还没有购物!');"
    >  				+"window.location.href='index.jsp';</script>"); 	} 	%> 	
    >  *~~对比~~ *(第二个例子是直接在页面上显示)
    > <%            //获取输入的收货人姓名
    > 				String recevieName = chStr.chStr(request.getParameter("recevieName")); 
    >  				//获取输入的收货人地址
    > 				String address = chStr.chStr(request.getParameter("address"));  %>
    
    
    

    HTML

    1.<%@ page language=“java” import="java.util." pageEncoding=“UTF-8”%>*

    import java.util.*;导入 java.util包中的类接口。
    Java中import的作用是导入要用到的包中的类接口。import就是在java文件开头的地方,先说明会用到那些类别。 接着我们就能在代码中只用类名指定某个类,也就是只称呼名字,不称呼他的姓。这其中包的作用就是给java类进行分拣分类,不同业务逻辑的java类放在同一个包中。比如实体包,工具包。

    在高级编程语言中,如果你想使用某个类或接口,那就要用import导入这个类,如在Java中编写servlet,使用httpServlet,那就要在文件的开头(包之后)写上,import javax.servlet.http.*;表示导入javax.servlet.http这个包中所有的文件。

    2.<%@taglib prefix=“c” uri=“http://java.sun.com/jsp/jstl/core”%>

    这句话将JSTL core标签库引入jstltest.jsp(该jsp的name)。
    prefix="c"是为了使用方便而给该标签库起的一个别名,这样在使用时就不用每次都要把较长的标签库名写出来。

    当你在某个标签库引入jsp文件时,<%@ taglib prefix=“c” uri=“myjstl” %>中的uri有两种写法,因每一次创建jsp文件后,会自动生成这些信息,故而不多做解释。

    3. DOCTYPE的作用

    在这里插入图片描述
    为页面添加正确的DOCTYPE
    很多设计师和开发者都不知道什么是DOCTYPE,DOCTYPE有什么用。DOCTYPE是document type的简写。主要用来说明你用的XHTML或者HTML是什么版本。浏览器根据你DOCTYPE定义的DTD(文档类型定义)来解释页面代码。所以,如果你不注意设置了错误的DOCTYPE,结果会让你大吃一惊。XHTML1.0提供了三种DOCTYPE可选择:
    (1)过渡型(Transitional )

    (2)严格型(Strict )

    (3)框架型(Frameset )

    对于我们初级改善来说,只要选用过渡型的声明就可以了。它依然可以兼容你的表格布局、表现标识等,不至于让你觉得变化太大,难以掌握。
    其次,对于web文档来说,DOCTYPE又有点不一样,如

    > <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    > "http://www.w3.org/TR/html4/loose.dtd">
    

    详情可见
    https://blog.csdn.net/wuliquan1023/article/details/7286609?locationNum=3

    4. <link rel="stylesheet" href="${pageContext.request.contextPath }/css/style.css" type="text/css" media="screen" />的作用

    CSS样式分为:内联式css样式、嵌入式css样式、外部式css样式。

    对CSS三种样式定义及其实例:

    内联式css样式。
    内联式css样式表就是把css代码直接写在现有的HTML标签中,如下面代码:
    <p style="color:red">这里文字是红色。</p>
    css样式代码要写在style=""双引号中,如果有多条css样式代码设置可以写在一起,中间用分号隔开(英文状态下;)。

    嵌入式css样式。
    嵌入式css样式,就是可以把css样式代码写在标签之间。如下面代码实现把三个标签中的文字设置为红色:
    <style type="text/css">span{color:red;}</style>
    嵌入式css样式必须写在之间,并且一般情况下嵌入式css样式写在之间。

    外部式css样式。
    外部式css样式(也可称为外联式)就是把css代码写一个单独的外部文件中,这个css样式文件以“.css”为扩展名(也可以为调用其他网站CSS)。

    <link href="style.css" rel="stylesheet" type="text/css" />   
    

    注意事项: 1、css样式文件名称以有意义的英文字母命名,如 main.css。 2、rel=”stylesheet” type=”text/css” 是固定写法不可修改。 3、标签位置一般写在标签之内。
    掌握好三种CSS三种样式使用方法在Web开发中将节省很多时间。

    media="screen"的作用什么?
    是相对于媒介来进行设置的,这里其实就是提交到计算机屏幕

    5.document.getElementById(id)

    getElementById() 方法可返回对拥有指定 ID 的第一个对象的引用。
    document是对象

    6.JavaScript中 function语句

    声明一个函数,函数调用时在 id=“demo” 的元素上输出 “Hello World” :
    function myFunction() { // 声明一个函数,括号里面可以有多个参数,也可无参数;参数是在下方进行使用的
    document.getElementById(“demo”).innerHTML = “Hello World!”;
    }

    myFunction(); // 调用函数

    7.JavaScript 可以通过不同的方式来输出数据:

    使用 window.alert() 弹出警告框。
    使用 document.write() 方法将内容写到 HTML 文档中。
    使用 innerHTML 写入到 HTML 元素。
    使用 console.log() 写入到浏览器的控制台。

    8.table

    是定义一个表格 table data cell 是定义表格中的一行 table row 是定义单元格中的一个单元格 table head

    9.span标签

    标签被用来组合文档中的行内元素。
    如果不对 span 应用样式,那么 span 元素中的文本与其他文本不会任何视觉上的差异。
    可以对同一个 元素应用 class 或 id 属性,但是更常见的情况是只应用其中一种。这两者的主要差异是,class 用于元素组(类似的元素,或者可以理解为某一类元素),而 id 用于标识单独的唯一的元素。

    在HTML里

    <p class="tip"><span>提示:</span>... ... ...</p>
    

    在CSS里

    p.tip span {
    	font-weight:bold;
    	color:#ff9955;
    	}
    

    10.<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

    meta是html中的元标签,其中包含了对应html的相关信息,客户端浏览器或服务器端的程序会根据这些信息进行处理。
    HTTP-EQUIV类似于HTTP的头部协议,它回应给浏览器一些有用的信息,以帮助正确和精确地显示网页内容。

    content(内容类型):重要!!这个网页的格式是文本的,网页模式
    charset(编码):特别重要!!!这个网页的编码是utf-8,中文编码,需要注意的是这个是网页内容的编码,而不是文件本身的,其他类型的编码中文可能会出现乱码。

    展开全文
  • 前言 做完课设很久了,做课设的过程中遇到了很多问题,有些问题很沙雕,有些问题坑很深,但是不论什么,解决他们花费了很长时间和精力,...在此,我打算把做课设过程中遇到的问题进行一下汇总,如果你也在做javaweb的课
  • ❝需要项目完整源码的小伙伴请往下看~❞前言又是一年课设时,看到这个熟悉的封面,就知道是新的课设项目了。这次课设题目为仿天猫电商系统。不知道大家有没有遇到这个问题,课设的时候想从网络上找一些...
  • Javaweb课程设计,也可以作为毕业设计的点餐系统(前后端+sql文件+图片介绍)

空空如也

空空如也

1 2 3 4 5 6
收藏数 112
精华内容 44
关键字:

javaweb课设

java 订阅