精华内容
下载资源
问答
  • 手把手搭建一个完整的javaweb项目(适合新手)

    万次阅读 多人点赞 2017-06-23 07:27:04
    手把手搭建一个完整的javaweb项目 本案例使用Servlet+jsp制作,用MyEclipse和Mysql数据库进行搭建,详细介绍了搭建过程及知识点。 下载地址:http://download.csdn.net/detail/qq_23994787/9904842点击下载 主要...

    手把手搭建一个完整的javaweb项目

    本案例使用Servlet+jsp制作,用MyEclipse和Mysql数据库进行搭建,详细介绍了搭建过程及知识点。

     

    下载地址:http://download.csdn.net/detail/qq_23994787/9904842  点击下载

    主要功能有:

    1.用户注册

    2.用户登录

    3.用户列表展示

    4.用户信息修改

    5.用户信息删除

     

    涉及到的知识点有:   

    1.JDBC

    2.Servlet

    3.过滤器

    4..EL与JSTL表达式

     

    1.首先打开mysql数据库 新建一个数据库test,然后生成对应的表结构

     

    CREATE TABLE `user` (
      `id` int(11) NOT NULL auto_increment,
      `name` varchar(255) NOT NULL,
      `pwd` varchar(255) NOT NULL,
      `sex` varchar(255) NOT NULL,
      `home` varchar(255) NOT NULL,
      `info` varchar(255) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
    
    
    INSERT INTO `user` VALUES ('3', '123', '123', '123', '123', '123');
    INSERT INTO `user` VALUES ('4', '123123', '123123', '男', '北京', '123123');
    

     

    这里使用到了navicat for mysql    这是一种mysql的图形界面化工具,后期可以非常方便的操作数据库。

     

    需要的童鞋 给你们个连接     http://download.csdn.net/download/qq_23994787/10168988

    2.然后打开MyEclipse新建一个web项目

    3.在webroot下的WEB-INF下的lib中导入mysql的驱动jar包

    4.建立对应的包结构 
    com.filter   //过滤器 解决中文字符集乱码
    com.util     //数据库连接工具类
    com.entity   //实体类
    com.dao      //数据操作类
    com.servlet   //servlet类

    5.在filter下新建一个EncodingFilter用来解决中文字符集乱码,它需要实现Filter接口,并重写doFilter函数

     

    package com.filter;
    
    import java.io.IOException;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    
    public class EncodingFilter implements Filter{
    	public EncodingFilter(){
    		System.out.println("过滤器构造");
    	}
    	public void destroy() {
    		System.out.println("过滤器销毁");
    	}
    	public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
    		request.setCharacterEncoding("utf-8"); //将编码改为utf-8
    		response.setContentType("text/html;charset=utf-8");
    		chain.doFilter(request, response);
    	}
    
    	public void init(FilterConfig arg0) throws ServletException {
    		System.out.println("过滤器初始化");
    	}
    
    }
    

     


    6.到web.xml下进行对EncodingFilter相应的配置

     

     

     

    <?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">
      <display-name></display-name>	
      
      <filter>
      	<filter-name>EncodingFilter</filter-name>
      	<filter-class>com.filter.EncodingFilter</filter-class><!--全路径 从根包开始一直到类名-->
      </filter>
      <filter-mapping>
      	<filter-name>EncodingFilter</filter-name>
      	<url-pattern>/*</url-pattern> <!--*即为过滤所有-->
      </filter-mapping>
      
      
      <welcome-file-list>
        <welcome-file>denglu.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    

     


    7.在util下新建一个DBconn类用来处理对数据库的连接操作(用户名或密码按照自己的数据库更改)

     

     

     

    package com.util;
    
    import java.sql.*;
    
    public class DBconn {
    	static String url = "jdbc:mysql://localhost:3306/test?useunicuee=true& characterEncoding=utf8"; 
    	static String username = "root"; 
    	static String password = "root"; 
    	static Connection  conn = null;
    	static ResultSet rs = null;
    	static PreparedStatement ps =null;
    	public static void init(){
    		try {
    			Class.forName("com.mysql.jdbc.Driver");
    			conn = DriverManager.getConnection(url,username,password);
    		} catch (Exception e) {
    			System.out.println("init [SQL驱动程序初始化失败!]");
    			e.printStackTrace();
    		}
    	}
    	public static int addUpdDel(String sql){
    		int i = 0;
    		try {
    			PreparedStatement ps =  conn.prepareStatement(sql);
    			i =  ps.executeUpdate();
    		} catch (SQLException e) {
    			System.out.println("sql数据库增删改异常");
    			e.printStackTrace();
    		}
    		
    		return i;
    	}
    	public static ResultSet selectSql(String sql){
    		try {
    			ps =  conn.prepareStatement(sql);
    			rs =  ps.executeQuery(sql);
    		} catch (SQLException e) {
    			System.out.println("sql数据库查询异常");
    			e.printStackTrace();
    		}
    		return rs;
    	}
    	public static void closeConn(){
    		try {
    			conn.close();
    		} catch (SQLException e) {
    			System.out.println("sql数据库关闭异常");
    			e.printStackTrace();
    		}
    	}
    }
    

     


    8.在entity下新建一个User实体类(实体即抽象出来的用户对象,对应数据库中的user表,表中每个字段在实体中为一个属性,也可以理解为一个User对象对应数据库中的user表一条记录)

     

     

     

    package com.entity;
    
    public class User {
        private int id;
        private String name;
        private String pwd;
        private String sex;
        private String home;
        private String info;
    	public int getId() {
    		return id;
    	}
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    	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 String getHome() {
    		return home;
    	}
    	public void setHome(String home) {
    		this.home = home;
    	}
    	public String getInfo() {
    		return info;
    	}
    	public void setInfo(String info) {
    		this.info = info;
    	}
        
    }
    

     


    9.在dao下新建一个UserDao接口  以及对应的方法实现类(使用接口类是为了规范开发)

     

     

    UserDao.java

     

    package com.dao;
    
    import java.util.List;
    
    import com.entity.User;
    
    public interface UserDao {
    	public boolean login(String name,String pwd);//登录
    	public boolean register(User user);//注册
    	public List<User> getUserAll();//返回用户信息集合
    	public boolean delete(int id) ;//根据id删除用户
    	public boolean update(int id,String name, String pwd,String sex, String home,String info) ;//更新用户信息
    }
    

     

    新建UserDaoImpl.java     实现UserDao接口,及未实现的方法     (SQL语句建议在mysql中测试以下,没有问题然后在拿到实现类中使用,可以避免无必要的麻烦)

    本例子SQL使用字符串拼接的方式,其实还有一种预加载的方式,有兴趣的童鞋可以参考我的博客,了解预加载的方式处理SQL语句与字符串拼接方式的区别。

    package com.dao;
    
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.entity.User;
    import com.util.DBconn;
    
    public class UserDaoImpl implements UserDao{
    	
    	public boolean register(User user) {
    		boolean flag = false;
    		DBconn.init();
    		int i =DBconn.addUpdDel("insert into user(name,pwd,sex,home,info) " +
    				"values('"+user.getName()+"','"+user.getPwd()+"','"+user.getSex()+"','"+user.getHome()+"','"+user.getInfo()+"')");
    		if(i>0){
    			flag = true;
    		}
    		DBconn.closeConn();
    		return flag;
    	}
        public boolean login(String name, String pwd) {
    		boolean flag = false;
    		try {
    			    DBconn.init();
    				ResultSet rs = DBconn.selectSql("select * from user where name='"+name+"' and pwd='"+pwd+"'");
    				while(rs.next()){
    					if(rs.getString("name").equals(name) && rs.getString("pwd").equals(pwd)){
    						flag = true;
    					}
    				}
    				DBconn.closeConn();
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return flag;
    	}
    	public List<User> getUserAll() {
    		List<User> list = new ArrayList<User>();
        	try {
    		    DBconn.init();
    			ResultSet rs = DBconn.selectSql("select * from user");
    			while(rs.next()){
    				User user = new User();
    				user.setId(rs.getInt("id"));
    				user.setName(rs.getString("name"));
    				user.setPwd(rs.getString("pwd"));
    				user.setSex(rs.getString("sex"));
    				user.setHome(rs.getString("home"));
    				user.setInfo(rs.getString("info"));
    				list.add(user);
    			}
    			DBconn.closeConn();
    			return list;
    		} catch (SQLException e) {
    			e.printStackTrace();
    		}
    		return null;
    	}
    	public boolean update(int id,String name, String pwd,String sex, String home,String info) {
    		boolean flag = false;
    		DBconn.init();
    		String sql ="update user set name ='"+name
    				+"' , pwd ='"+pwd
    				+"' , sex ='"+sex
    				+"' , home ='"+home
    				+"' , info ='"+info+"' where id = "+id;
    		int i =DBconn.addUpdDel(sql);
    		if(i>0){
    			flag = true;
    		}
    		DBconn.closeConn();
    		return flag;
    	}
    	public boolean delete(int id) {
    		boolean flag = false;
    		DBconn.init();
    		String sql = "delete  from user where id="+id;
    		int i =DBconn.addUpdDel(sql);
    		if(i>0){
    			flag = true;
    		}
    		DBconn.closeConn();
    		return flag;
    	}
        
    }
    

     

     

     

    10.在servlet下创建DengluServlet用来实现对用户登录的操作(Servlet有两种方式创建,一种手工创建。另一种程序自动生成。前者自己创建java类,实现Servlet具体内容,然后需要去WEB_INF下的web.xml去配置servlet  . 而后者则直接由程序替我们配置好了Servlet)本例子使用第二种方式生成Servlet

     

     

     

    DengluServlet.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    
    public class DengluServlet extends HttpServlet {  //需要继承HttpServlet  并重写doGet  doPost方法
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);  //将信息使用doPost方法执行   对应jsp页面中的form表单中的method
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String name = request.getParameter("name"); //得到jsp页面传过来的参数
    		String pwd = request.getParameter("pwd");
    		
    		UserDao ud = new UserDaoImpl();
    		
    		if(ud.login(name, pwd)){
    			request.setAttribute("xiaoxi", "欢迎用户"+name); //向request域中放置信息
    			request.getRequestDispatcher("/success.jsp").forward(request, response);//转发到成功页面
    		}else{
    			response.sendRedirect("index.jsp"); //重定向到首页
    		}
    	}
    
    }
    

     

    有两点要注意的地方:

    一:getParameter与getAttribute两者的区别

    request.setAttribute("xiaoxi", "欢迎用户"+name);//向request域中放置信息 ( 键值对的形式)  名字为xiaoxi  内容为"欢迎用户"+name

    request.getAttribute("xiaoxi");//得到request域中放置名字为xiaoxi的信息

    request.getParameter("name");//得到request域的参数信息(得到jsp页面传过来的参数)

    getAttribute表示从request范围取得设置的属性,必须要先setAttribute设置属性,才能通过getAttribute来取得,设置与取得的为Object对象类型 。

    getParameter表示接收参数,参数为页面提交的参数,包括:表单提交的参数、URL重写(就是xxx?id=1中的id)传的参数等,因此这个并没有设置参数的方法(没有setParameter),而且接收参数返回的不是Object,而是String类型

    二:转发与重定向的区别

    (1).重定向的执行过程:Web服务器向浏览器发送一个http响应--》浏览器接受此响应后再发送一个新的http请求到服务器--》服务器根据此请求寻找资源并发送给浏览器。它可以重定向到任意URL,不能共享request范围内的数据。
    (2).重定向是在客户端发挥作用,通过新的地址实现页面转向。
    (3).重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。
    (4).转发过程:Web服务器调用内部方法在容器内部完成请求和转发动作--》将目标资源发送给浏览器,它只能在同一个Web应用中使用,可以共享request范围内的数据。
    (5).转发是在服务器端发挥作用,通过forward()方法将提交信息在多个页面间进行传递。
    (6).转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。

     

    11.在servlet下创建一个ZhuceServlet用来实现用户注册的操作

     

    ZhuceServlet.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    import com.entity.User;
    
    public class ZhuceServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String name = request.getParameter("name"); //获取jsp页面传过来的参数
    		String pwd = request.getParameter("pwd");
    		String sex = request.getParameter("sex");
    		String home = request.getParameter("home");
    		String info = request.getParameter("info");
    		
    		User user = new User(); //实例化一个对象,组装属性
    		user.setName(name);
    		user.setPwd(pwd);
    		user.setSex(sex);
    		user.setHome(home);
    		user.setInfo(info);
    		
    		UserDao ud = new UserDaoImpl();
    		
    		if(ud.register(user)){
    			request.setAttribute("username", name);  //向request域中放置参数
    			//request.setAttribute("xiaoxi", "注册成功");
    			request.getRequestDispatcher("/denglu.jsp").forward(request, response);  //转发到登录页面
    		}else{
    			
    			response.sendRedirect("index.jsp");//重定向到首页
    		}
    	}
    }
    

     


    12.在servlet下创建SearchallServlet用来返回数据库中所有用户信息

     

     

    Searchall.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.List;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    import com.entity.User;
    
    public class Searchall extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		UserDao ud = new UserDaoImpl();
    		List<User> userAll = ud.getUserAll();
    		request.setAttribute("userAll", userAll);
    		request.getRequestDispatcher("/showall.jsp").forward(request, response);
    	}
    }
    

     


    13.在servlet下创建DeleteServlet用来删除用户操作

     

     

    DeleteServlet.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    
    public class DeleteServlet extends HttpServlet {
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String id = request.getParameter("id");
    		int userId = Integer.parseInt(id);
    		
    		UserDao ud = new UserDaoImpl();
    		
    		if(ud.delete(userId)){
    			request.setAttribute("xiaoxi", "删除成功");
    			request.getRequestDispatcher("/Searchall").forward(request, response);
    		}else{
    			response.sendRedirect("index.jsp");
    		}
    	}
    
    }
    

     


    14.在servlet下创建UpdateServlet操作用来更新用户信息

     

     

    UpdateServlet.java

     

    package com.servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.dao.UserDao;
    import com.dao.UserDaoImpl;
    import com.entity.User;
    
    public class UpdateServlet extends HttpServlet {
    
    	public void doGet(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		doPost(request, response);
    	}
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		
    		String id = request.getParameter("id");
    		int userId = Integer.parseInt(id);
    		
    		String name = request.getParameter("name");
    		String pwd = request.getParameter("pwd");
    		String sex = request.getParameter("sex");
    		String home = request.getParameter("home");
    		String info = request.getParameter("info");
    		
    		System.out.println("------------------------------------"+userId);
    		
    		UserDao ud = new UserDaoImpl();
    		
    		if(ud.update(userId, name, pwd, sex, home, info)){
    			request.setAttribute("xiaoxi", "更新成功");
    			request.getRequestDispatcher("/Searchall").forward(request, response);
    		}else{
    			response.sendRedirect("index.jsp");
    		}
    	}
    }
    
    


    15.配置servlet       如果非手打而用MyEclipse生成则不用配置  附完整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">
      <display-name></display-name>	
      
      <filter><!--过滤器配置-->
      	<filter-name>EncodingFilter</filter-name>
      	<filter-class>com.filter.EncodingFilter</filter-class>
      </filter>
      <filter-mapping>
      	<filter-name>EncodingFilter</filter-name>
      	<url-pattern>/*</url-pattern>
      </filter-mapping>
      
      
      
      <servlet><!--servlet类路径配置-->
        <servlet-name>DengluServlet</servlet-name>
        <servlet-class>com.servlet.DengluServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ZhuceServlet</servlet-name>
        <servlet-class>com.servlet.ZhuceServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>Searchall</servlet-name>
        <servlet-class>com.servlet.Searchall</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>DeleteServlet</servlet-name>
        <servlet-class>com.servlet.DeleteServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>UpdateServlet</servlet-name>
        <servlet-class>com.servlet.UpdateServlet</servlet-class>
      </servlet>
    
    
    
      <servlet-mapping><!--servlet类映射配置-->
        <servlet-name>DengluServlet</servlet-name>
        <url-pattern>/DengluServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ZhuceServlet</servlet-name>
        <url-pattern>/ZhuceServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>Searchall</servlet-name>
        <url-pattern>/Searchall</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>DeleteServlet</servlet-name>
        <url-pattern>/DeleteServlet</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>UpdateServlet</servlet-name>
        <url-pattern>/UpdateServlet</url-pattern>
      </servlet-mapping>
      
      
      
      <welcome-file-list><!--默认首页地址-->
        <welcome-file>denglu.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
    


    16.新建jsp页面

     

    denglu.jsp 用户登录页面      默认页面进入项目后  先进入该页面(web.xml中配置)    

    form表单中需要注意的是<form action="DengluServlet"  method="post">

    其中action即为要跳转的servlet路径(即在web.xml中配置的servlet-mapping   :<url-pattern>/DengluServlet</url-pattern>   ,)写  /  后的内容。

    method="post"为传递值得方法类型有两种,第一种get,第二种post。网上介绍这两种的区别有很多,阐述的又是百家争鸣。而我觉得那个方便就用那个,一般使用post传递,可避免乱码。

    另一个需要注意的是   用户名:<input type="text" name="name" value="">  input标签  一定要起个名字  如name="name"  

    起名的作用就是让后台通过request.getParterment("name");来取值

     

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>登录注册页面</title>
      </head>
      <body >
             <form action="DengluServlet"  method="post"  style="padding-top:-700px;">
    		用户名:<input type="text" name="name"value=""><br><br>
     		密码:  <input type="password" name="pwd"value=""><br><br>
    	                <input type="submit"value="登录"name="denglu"><input type="reset"value="重置"><br>
    	 </form>
    	 <form action="zhuce.jsp">
    	 	<input type="submit"value="新用户注册">
             </form>
        
      </body>
    </html>
    


    zhuce.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'BB.jsp' starting page</title>
      </head>
      <body >
      <form action="ZhuceServlet"method="post" style="padding-top:-700px;">
    	   输入用户名:<input name="name" type="text"><br><br>
    	   输入密码:<input name="pwd" type="password"><br><br>
    	   选择性别:<input type="radio"name="sex"value="男"checked>男
    	        <input type="radio"name="sex"value="女">女<br><br>
    	   选择家乡:
    	   <select name="home">
    		   <option value="上海">上海</option>
    		   <option value="北京" selected>北京</option>
    		   <option value="纽约">纽约</option>
       		</select><br>
                   填写个人信息:<br>
    	   <textarea name="info" row="5"cols="30"></textarea><br>
    	   <input type="reset"value="重置"><input type="submit"value="注册">
       </form>
      </body>
    </html>
    

     
    index.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 PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'index.jsp' starting page</title>
      </head>
      <body>
        		<h1>失敗</h1>
      </body>
    </html>
    

     

    success.jsp  成功页面

     

     

    ${xiaoxi}为EL表达式  获取request域中的键名为xiaoxi的值

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <title>My JSP 'success.jsp' starting page</title>
      </head>
      <body>
    			${xiaoxi} <br>  
    			<a href="Searchall">查看所有用户</a>
      </body>
    </html>

    showall.jsp   展现所有用户页面

    页面使用的到JSTL表达式 即c标签。使用c标签需要引入头文件<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 。

    需要注意的的是El标签配合JSTl标签的使用,<c:forEach var="U" items="${userAll}"  >   例子foeEach标签的遍历内容即为EL表达式获取的${userAll}

    而且当指定别名后var="U"  ,别名可以随便起,为了方便一般是小写类名命名。  

    C标签内遍历的属性也是需要用${  }获取。此时别名U即为当前集合中的User对象,想得到属性只需要用 ${ U.属性名 }     即可

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
    <%
    String path = request.getContextPath();
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        <base href="<%=basePath%>">
        <title>所有用户页面</title>
      </head>
      
      <body>
      <h1>${xiaoxi}</h1>
      <table  width="600" border="1" cellpadding="0" >
      		<tr>
      			<th>ID</th>
    	  		<th>姓名</th>
    	  		<th>性别</th>
    	  		<th>密码</th>
    	  		<th>家乡</th>
    	  		<th>备注</th>
    	  		<th>操作</th>
      		</tr>
         <c:forEach var="U" items="${userAll}"  > 
          <form action="UpdateServlet" method="post"> 
           <tr>
    	       <td><input type="text" value="${U.id}" name="id" ></td>
    	       <td><input type="text" value="${U.name}" name="name"></td>
    	       <td><input type="text" value="${U.sex}" name="sex"></td>
    	       <td><input type="text" value="${U.pwd}" name="pwd"></td>
    	       <td><input type="text" value="${U.home}" name="home"></td>
    	       <td><input type="text" value="${U.info}" name="info"></td>
    	       <td><a href="DeleteServlet?id=${U.id}">删除</a>  <input type="submit" value="更新"/></td>
    	   </tr>
        </form> 
        </c:forEach>  
        </table>
      </body>
    </html>
    

     

     

    项目结构

    最后要说的话

    1.编程不是看会的,是敲会的。只要敲敲敲,才可以深刻的记忆,当然这只能称之为会用,之后深入了解其实现原理才能将其吸收融会贯通。

    2.要养成良好的代码习惯,整洁干净,命名规范,以及详细的注释。这对帮助你成长都大有裨益。

    3.要阅读大牛写的代码,一个人的力量终究是有限的,经常阅读高质量的源码,无形之中就会改变我们的思路,就好比自己琢磨武功,与拥有武林秘籍者相比...

     

    -----------附------------------2018.8.12-------------------------------------------------------

    该文是我几年前进行编辑的一篇文章,其中不乏出现一些不规整的错误,比如命名规范,代码冗余等,可能对于一些小伙伴们来说造成了一些困扰,不过相对来说,本文在一定程度上对javaweb的入门还是具有一定程度上的帮助。但是作为一名严谨的Java开发工程师(码猿)为了大家不再入门时就走弯路,顾我决定重新讲解javaweb方面的知识与内容,并以企业开发规范为标准来实现一个基于javaweb的小系统给大家进行参考。系统开发以完成后续我会整理发布到我的博客中。

     

     

    展开全文
  • Javaweb项目

    2019-05-08 10:33:08
    Jsp+spring+springmvc+maven,附带数据库脚本,基于b\s架构的电商项目项目挺好的可参考
  • javaweb项目

    2019-02-21 16:31:04
    在网上下载的一些项目,里面有三个项目用来学习和锻炼自己的
  • Eclipse开发JavaWeb项目配置Tomcat,详细教程

    万次阅读 多人点赞 2018-01-23 15:22:40
    首先介绍eclipse开发JavaWeb项目需要配置的相关环境,使用tomcat软件在本地搭建服务器,然后再在eclipse环境下配置tomcat: 第一步:使用tomcat软件在本地搭建服务器,这个本地的tomcat服务器与eclipse环境下配置...

    以下都经过本人自学时一一自己动手配置实验。

    首先介绍eclipse开发JavaWeb项目需要配置的相关环境,使用tomcat软件在本地搭建服务器,然后再在eclipse环境下配置tomcat:

    第一步:使用tomcat软件在本地搭建服务器,这个本地的tomcat服务器与eclipse环境下配置tomcat服务器都可以使用,但是只能启动一个,否则会报端口冲突,到时安装好环境会介绍

    tomcat软件是apache旗下的一个开源项目。软件下载链接:http://tomcat.apache.org/,如图,我选择的是7.0的环境,并且选择的安装板,不需要配置相关的环境变量,zip版各种环境变量配置麻烦死了,这些个环境软件会在我的结束语中给一个下载地址,也可以根据自己的环境需求下载需要的版本

    安装版教程链接可参考:https://wenku.baidu.com/view/869562cd58f5f61fb736668f.html),网上也有很多安装教程链接,介绍下安装成功之后,在计算机管理-应用中就可以看到tomcat的服务如图第三个图标:


    打开该图标出现如下窗口:


    该窗口中有一个start按钮,点击start按钮,tomcat本地服务器就开启了,点击stop按钮,服务就关闭了

    只有在服务开启的情况下,在浏览器中输入http://localhost:8080 进入如下页面表示安装成功。


    这里本地tomcat安装成功了。

    第二步:eclipse环境下如何配置tomcat服务器:

    打开Eclipse,单击“Window”菜单,选择下方的“Preferences”,看是否存在“Server”选项,我目前使用的是eclipse版,不带额外插件,一些使用的Myeclipse集成了J2EE可以忽略此过程。我使用的EclipsePreferences下是没有Server选项,此时需要安装server插件,我的上一篇博客介绍了如何安装server插件,我这里就不详细叙述了,安装了server之后;如图


    上图中,点击“add”的添加按钮,弹出如下界面:


    上图中,选择对应的Tomcat版本,点击next,如图:


    上图中,选择Tomcat的路径,以及JRE(使用工作平台默认的,不用做额外添加修改),点击“完成”,配置完毕。

    第三步:建立一个web项目

    File → New → Dynamic Web Project ,一路next,在该窗口时如图,勾选Gernerate web.xml deployment descriptor ,finish 就ok了


    让tomcat服务器显示在控制台上,将web应用部署到tomcat中,Window → Show View → Servers如图


    点击链接No servers are available. Click ths link to create a new server. ,在弹出的对话框中选择Tomcat版本 如图:


    点击“Next”,添加我们的项目 如图:,点击finish


    返回eclipse控制台下方的“Servers”面板,右键单击该面板中的“Tomcat v7.0 Server at localhost”节点,在弹出的快捷菜单中单击“Start”,即可启动指定的Web服务器,这里要说明一下就是:很重要,尤其对于不懂的初学者,我也是搞了很久查资料才弄明白,在快捷菜单中单击“Start”启动Web服务器时,弹出如图窗口:


    这个是由于你开启了本地tomcat服务器,又开启eclipse集成的tomcat服务器,引起端口冲突,可以先关掉本地tomcat服务器,如图点击stop之后

    在操作快捷菜单中单击“Start”启动Web服务器就不会有端口冲突窗口出现了,控制台出现如下提示就ok啦。

    测试下,建立一个jsp文件放在webcontent目录下,如图,关于javaweb项目结构,以及建立jsp文件中文乱码就不详细叙述了,网上文档太多了,如图:


    随便运行一个jsp文件,右键——>Run As ——>Run on Server, 效果如图:整个过程就ok了


    再看下一个细节:

    看下一 根据前面的介绍,上图表明,我们新建的项目已经部署到Tomcat服务器上去了,也就是看到了javaweb这个工程发布出去了,双击“Tomcat v7.0 Server at localhost”节点,出现如图信息


    上图的红框部分表明,服务的部署是在eclipse里面(默认是放在工作空间里的.metadata文件夹下),而不是在Tomcat里面。我们来改一下,前提是工程并没有发布到Tomcat中去,那我们先把之前发布的版本删了吧(稍后重新发布):


    这时再次双击“Tomcat v7.0 Server at localhost”节点,使用Tomcat的安装目录作为部署的位置,并修改部署的路径Deploy path(建议改成Tomcat的webapps目录下),然后保存即可。

    这时,重新运行程序。现在来到Tomcat的webapps目录下,发现多了一个javaweb文件夹(即工程文件名),并且文件夹下包含了工程文件中WebContent的内容:


    上图说明,说明这才是真正将程序发布到服务器上。

    我们再来到Tomcat的work目录中,看一下编译之后的文件:


    上图表明,Tomcat会先将jsp文件转为java文件,然后再把java文件编译为class文件,最终执行的是class文件。现在来看一下JSP运行的原理。

    到这里总结以下:上面的整个过程,让我们学会了如何配置Tomcat和部署工程文件,明白了jsp文件是怎样发布到服务器上并最终显示出来。关于JSP的进一步学习可以参考网上的教程自学

































    展开全文
  • JavaWeb快速入门(一)——新建JavaWeb项目

    万次阅读 多人点赞 2018-07-04 20:01:33
    下午开始将JavaWeb服务器端程序开发,包含:处理请求和展示返回回来的数据。其中,处理请求分为四步:1、创建javaweb工程,2、开启服务器,3、编写处理请求的代码,4、运行。(一)创建javaweb工程 在创建之前,电脑...

        今天是暑期实训的第三天,上午继续昨天未讲完的任务java,比如:java的异常处理、java的集合等其它java常用知识,具体讲解链接如下。下午开始将JavaWeb服务器端程序开发,包含:处理请求和展示返回回来的数据。其中,处理请求分为四步:1、创建javaweb工程,2、开启服务器,3、编写处理请求的代码,4、运行。

    (一)创建javaweb工程

        在创建之前,电脑需要有myeclipse或者eclipse,在这里我用了myeclipse。具体的下载和安装请自行百度。

        除此以外,需要用到apache-tomcat,链接:链接:https://pan.baidu.com/s/1IHx29L2k3xikgNDvhGGfJg 密码:r3t9

        准备工作完成后,现在就可以开始创建javaweb工程了。

        启动myeclipse,点击Browse以选择自己的即将所建工程的工作空间。选择完成后,点击ok。

     

     
     
        导航栏File->New->Project,在wizards中输入web来搜索Web选项,以选中Dynamic Web Project。
    然后点击next,在1处输入自己的工程名,2处选择存储位置,
    3处点击New Runtime,选择Apache Tomcat v8.0.。然后点击next
    1处选择在准备工作时,保存的apache tomcat的文件夹。2处,我选择了默认的JRE。然后点击finish。

        现在,又回到了这个对话框。不要急于点击这里的finish,必须选择点击next两次。

       两次next后,到达下图, 一定要选择Generate web.xml deployment descriptor。现在就可以点击finish。

        现在,我们就可以在myeclipse工作空间看到我们新建的javaweb项目了。

        我们可以知道,在WebRoot文件夹下为html页面,即前端的内容;而在src中为java后台的内容。在WebRoot文件夹下我们可以看到一个index.jsp,其中body部分内容为 <body>This is my JSP page. <br> </body>,我们可以猜测当运行该工程后,应该在页面上显示This is my JSP page.

        下面,我们需要部署一个服务器。在如下地方选择Servers,

     

     
     
     
     
     
     
        在空白处右键,点击New->Server,按照如下选择
        点击next,选中刚才新建的项目名,点击中间的ADD,然后点击finish。
        现在,我们可以在下图看到新建的项目服务器部署成功。

        选中下图所示,点击运行

        在控制台下,我们可以看到,运行成功。

     

     
        现在可以在浏览器中,输入网址http://localhost:8088/JavaWebDemo/。其中8088为端口号,默认为8080,JavaWebDemo为所建项目的项目名称。我们可以看到现在在页面上显示的内容与我们预期的内容一致,证明新建JavaWeb项目成功。                                                                                                                                                                             

     

     

    展开全文
  • javaweb项目实例

    2020-12-31 01:00:18
    javaweb项目实例,适合新手,超级详细,内含笔记与详细实现步骤 javaweb项目实例,适合新手,超级详细,内含笔记与详细实现步骤
  • 教务管理系统JavaWeb项目

    万次阅读 多人点赞 2018-03-25 16:35:06
    刚学完javaweb,做个项目练手与巩固所学的知识,...所以非常适合javaweb初学者教务管理系统javaweb项目运行环境:window系统,Apache Tomcat v7.0.84、JDK1.8开发环境:J2EE eclipse、navicat for mysql运用的技术...

    刚学完javaweb,做个项目练手与巩固所学的知识,同时分享自己写的这个教务管理系统,同样也是为自己记下笔记。

    为以后复习有帮助。

    该系统没有用到框架的知识,一共花了7天写出来。所以非常适合javaweb初学者

    教务管理系统javaweb项目
     

    运行环境:window系统,Apache Tomcat v7.0.84、JDK1.8

    开发环境:J2EE eclipse、navicat for mysql
     

    运用的技术:MVC设计模式、DAO模式、Servlet、JSP、Filter、EL表达式、jstl、MySQL数据库

    项目代码的下载:

    点击打开链接下载源码

    下载回来后首先看文件夹下的README.txt文件

    一、需求分析:

    教务管理系统首先需要完成登录的基本功能,主要分为四部分:学生、教师、教务员、管理员。

    学生用户可以查看自己的学籍信息,并可以修改自己的一些信息(比如联系电话、家庭地址);查看自己的成绩,不同学期的成绩查询;查看自己的课表和考试安排;以及选课。

    教师用户可以查看自己的个人信息并能修改自己的一些信息(比如联系电话、家庭地址),录入成绩和修改成绩。

    教务员可以查看全部成绩和条件(学院、专业、学号)查询成绩,以及查看成绩统计分析情况(总分、平均分、绩点等等),查看学生选课报名的情况(报名名单),考级成绩,以及学籍管理(修改学生的学籍信息)

    管理员是进行用户管理(增删改查),系统维护

    二、设计思想

    先把整个系统的架构搭好,然后再一个一个地往系统里添加功能

    首先写好登录的功能,根据用户的身份不同登录到不同的页面,也就是学生、教师、教务员页面、管理员页面。

    然后就可以分开完成各个用户的自己的各种功能。

    以下是系统主要结构:

    1.登录(全部已实现)
    (1)验证码
    (2)找回密码
    (3)修改密码
    (4)注销


    2.学生用户(全部已实现)
    (1)选课报名
    -选修报名
    -考级报名


    (2)业务办理
    -缓考申请
    -免修申请


    (3)信息查询
    -学籍信息
    -课表查询
    -成绩查询
    -考试安排


    3.教师用户
    (1)信息查询
    -个人信息(已实现)
    -班级信息(待实现)
    -课程信息(待实现)


    (2)成绩管理
    -录入成绩(待实现)
    -修改成绩(待实现)


    4.教务员用户(全部已实现)
    (1)学籍管理


    (2)考级管理
    -考级报名学生
    -考级学生成绩


    (3)教务管理
    -成绩管理
    -选修报名学生

    (4)个人事务
    -个人信息
    5.管理员用户
    (1)用户管理(已实现)

    (2)系统维护(待实现)

    为使用户体验比较好,每个页面都添加返回上一步的链接。

    三、设计步骤

    整个设计步骤比较多,太啰嗦了。总的来说,先完成登录的功能,然后完成四种用户的主页面,最后再一个一个完成每个用户的功能。

    四、完成成果截图:

    1.登录页面:

    2.找回密码:

    3.学生用户的主页面:

    4.教务员用户:

    5.教师用户:

    五、遇到的问题以及解决方法

    1.问题:账号过期,需要返回登录页面,重新登录

    解决方法:为每种用户设一个过滤器Filter,访问该用户下的所有页面都需要经过这个过滤器。这个过滤器的功能就是检验session中属性user是否还在,若存在,则放行,若不存在,返回登录页面,并携带信息告知用户:账号已过期,请重新登录。

    2.问题:生成验证码的代码

    解决方法:查找之前学习中遇到生成验证码的java代码。

    3.问题:查询时需要用到下拉列表。如:教务员查询成绩时,需要通过条件查询学生成绩,条件有学院、专业、班级、学号与姓名。而学院、专业与班级需要就可以用到下拉列表。当然,也可以用输入文本框text。但是为了追求更完美,使用下拉列表是最好的。

    解决方法:由于没有正式学过html,所以查看W3school.chm参考文档,文档有所有的html标签的参考知识。

    六、可优化的地方

    1.管理员的功能太少,可以继续添加其他功能,目前想不到。

    2.可继续添加新功能,比如教务员的排课管理、缓考免修申请处理等等,学生用户的班级课表查询、休退学申请等等

    3.数据库中各表的信息联系很少,可以优化数据库中的数据管理,分组查询等。

    4.考级显示那里,目前实现可以显示四六级成绩,可优化根据不同的考试显示不同的成绩表格,比如计算机等级水平考试。

    5.教务员用户的成绩管理,查询成绩,还可优化添加导出成绩文件到本地电脑的功能。

    七、优点

    最大的优点就是这个系统框架已经构好,现在可以不断往其中完善和添加新的功能应用。

    八、缺点:

    显示使用jsp,没有用CSS,页面比较简陋。

    学习完前端后,继续对该系统完善

    分享给java初学者参考学习。

    也欢迎各路大神指导和建议。谢谢!

     

    展开全文
  • javaweb项目实(含笔记与详细实现步骤)

    千次下载 热门讨论 2017-07-20 10:50:02
    javaweb项目实例,适合新手,超级详细,内含笔记与详细实现步骤
  • JavaWeb项目实战

    2018-12-31 16:58:57
    JavaWEB 项目实战(图书商城),全套项目开发视频源码以及开发文档。
  • javaweb项目实战

    2018-12-13 19:29:29
    javaweb项目实例,适合新手,超级详细,内含笔记与详细实现步骤,值得一看
  • 12306Javaweb项目源码

    2019-03-16 15:27:25
    12306Javaweb项目源码,两套Javaweb项目,带答辩视频、ppt、数据库脚本,可直接运行
  • 资源名称:Java web项目开发案例精粹资源目录:【】JavaWeb项目开发案例精粹01【】JavaWeb项目开发案例精粹02【】JavaWeb项目开发案例精粹03【】JavaWeb项目开发案例精粹04【】JavaWeb项目开发案例精粹05【】JavaWeb...
  • javaweb项目源码

    2017-12-21 17:23:21
    水下传感网络平面部署系统,残废品,是一种新型的Javaweb项目开发
  • javaWeb项目说明

    2019-07-30 12:13:22
    JavaWeb项目包括实践JavaWeb项目的前置知识学习,在实践过程中的实践指南,JavaWeb项目的结果 JavaWeb项目学为三部分: 1,javaWeb项目学习笔记 HTML学习笔记 CSS学习笔记 JS学习笔记 Servlet学习笔记 JSP...
  • javaweb项目_1

    2018-06-20 18:56:14
    javaweb项目,实现了基础的增删改查操作,适合新手参考。
  • JavaWeb项目上线教程

    2018-07-02 18:09:43
    JavaWeb项目上线教程,教你如何將自己本机的java web项目挂到服务器上。JavaWeb项目上线教程,教你如何將自己本机的java web项目挂到服务器上
  • 教务管理系统javaweb项目
  • javaweb项目开发案例

    2015-04-10 17:18:41
    javaweb项目开发案例
  • JavaWEB项目开发案例精粹,包含大量实际项目开发案例,附带源码,适合拿来巩固Javaweb及框架知识
  • 这个是一个javaweb项目,是一个现代的婚恋相亲网站,是现在的年轻人恋爱更加的方便。是一个功能完整,很好的一个JavaWeb项目,可以用来做毕业设计,这个本人自己写的

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 20,424
精华内容 8,169
关键字:

javaweb项目

java 订阅