Maven+ssm+tomcat+Oracle学生管理系统

学生管理系统:实现了本机下登录、注册以及登录后对数据库的增删改查。

工具:eclipse,tomcat7.0,PLSQL。

技术:ssm框架,Ajax,js,jquery。

1.配置文件。先上两张我的项目结构图

         

接下来是导入相关jar包,需要在Maven的官网上查找依赖然后再pom.xml中导入。

              <dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
			<scope>test</scope>
		</dependency>

		<!-- 1、servlet相关的配置 begin -->
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.2.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.0.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- 1、servlet相关的配置 end -->


		<!-- 2、springmvc相关的配置 begin -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aspects</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- 2、springmvc相关的配置 end -->


		<!-- 3、数据库连接池、oracle数据库驱动程序 begin -->
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.2.2</version>
		</dependency>
		<dependency>
			<groupId>oracle.jdbc.driver</groupId>
			<artifactId>OracleDriver</artifactId>
			<version>6</version>
		</dependency>
		<!-- 3、数据库连接池、oracle数据库驱动程序 end -->
然后是WEB-INF下web.xml的配置
<!-- 配置使用SpringMVC框架 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:config/spring_mvc.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<!--  -->
		<url-pattern>*.action</url-pattern>
		<!-- 如果是RESTful的使用,则值配置为“/” 
		<url-pattern>/</url-pattern>-->
	</servlet-mapping>  
<!-- 1、引入spring框架 begin -->	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!--<param-value>/WEB-INF/classes/config/spring_beans.xml</param-value>-->
		<param-value>classpath:config/spring.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
<!-- 1、引入spring框架 end -->	
<!-- 配置使用SpringMVC框架 -->
	<servlet>
		<servlet-name>springmvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:config/spring_mvc.xml</param-value>
		</init-param>
	</servlet>
	<servlet-mapping>
		<servlet-name>springmvc</servlet-name>
		<!--  -->
		<url-pattern>*.action</url-pattern>
		<!-- 如果是RESTful的使用,则值配置为“/” 
		<url-pattern>/</url-pattern>-->
	</servlet-mapping>  
<!-- 1、引入spring框架 begin -->	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<!--<param-value>/WEB-INF/classes/config/spring_beans.xml</param-value>-->
		<param-value>classpath:config/spring.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
<!-- 1、引入spring框架 end -->	


       spring.xml中配置数据库连接池,以及Mybatis中最重要的sqlSessionFactory,当然还有sqlsession。

 

<!-- 指定数据源信息文件的位置 -->
	<context:property-placeholder location="classpath:config/db.properties"/>

	<!-- 配置数据源 -->
	<p:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
		<p:property name="username" value="${jdbc.username}" />
		<p:property name="password" value="${jdbc.password}" />
		<p:property name="url" value="${jdbc.url}" />
		<p:property name="driverClassName" value="${jdbc.driver}" />
	</p:bean>

	<!-- 配置sqlSessionFactory,需要使用dataSource和mybatis的配置文件 -->
	<p:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<p:property name="dataSource" ref="dataSource" />
		<p:property name="configLocation" value="classpath:config/mybatis.xml"/>
	</p:bean>
springMVC.xml,拦截器的作用会在后面讲到。
<!-- 注解方式开发,只需要配置下面的标记 -->
	<mvc:annotation-driven /> 
	<context:component-scan base-package="com.neusoft" />
	<!-- 配置全局拦截器  实现 不登录不能访问-->
	<mvc:interceptors>
	<mvc:interceptor>
	<mvc:mapping path="/**"/>
	<bean class="com.neusoft.controller.PowerInterCeptor"/>
	</mvc:interceptor>
	</mvc:interceptors> 

Mybatis.xml,设置settings属性为空NULL时,才知道在根目录下放什么标签是有顺序的,长记性了。

 

<configuration>
	<!--设置Oracle数据库中数据空值,顺序不能随便放  -->
	<settings>
		<setting name="jdbcTypeForNull" value="NULL"/>  
	</settings> 

	<typeAliases>
		<package name="com.neusoft.entity" />
	</typeAliases>

	<!-- 引入映射文件的路径 -->
	<mappers>
		<mapper resource="com/neusoft/entity/UserMapper.xml" />
	</mappers>
</configuration>

2.好了,配置好环境后,接下来就是在jsp中做设计了,说实话,js,jQuery在网上能查到的资源我都能写出来,比如说我后面讲到的数据js效验,Bootstrap3,layuideng就CV大法。下面是我设计的简约大方的界面。

     

实现的功能2.1:单击会改变的验证码,我在网上找了一个生成验证码的类,把它放到控制层了,总觉得就我一个人会这么做

<div id="code">	验证码:<input type="text" name="code" placeholder="请输入后面图片中的验证码"/>
			<img src="${pageContext.request.contextPath }/codeServlet.action" 
				onclick="this.src=this.src+'?dump='+new Date()"" id="codeImg"/></div><br/>

实现的功能2.2:Ajax时间,在焦点用户名框时,触发时间,后台查到此用户用户名会提示验证码登录,否则,登陆按钮无效,隐藏验证码,只能注册。

$(function(){
			$("[name='uname']").blur(function(){
				$.ajax({
					method:"post",
					data:"uname="+$(this).val(),
					url:"<%=request.getContextPath()%>/user.action?act=queryByUname",
					success:function(data){
						//alert("data=" +data);
						if(data=="true"){//重复
							var uspan = document.getElementById("uspan");
							uspan.innerHTML = "可直接登录 ";
							$("#code").show();
						}else{
							var uspan = document.getElementById("uspan");
							$("#login").attr("disabled","true");//
							uspan.innerHTML = "需要注册 ";
							$("#code").hide();
						}
					}
				});
			});
		})

实现的功能2.3:对的,就是对用户名和密码进行控制。通过js(jQuery)实现,直接贴代码

<script src="<%=request.getContextPath()%>/js/jquery-3.2.1.min.js"></script>//这个千万不能忘了哦
<script type="text/javascript">
//前台效验和验证码功能算是基本实现。明天实现注册功能,和注册后修改资料
	function run(){
		//效验用户名
		var uname = $("[name='uname']").val();
		if(uname == "" || uname.length == null){
			var uspan = document.getElementById("uspan");
			uspan.innerHTML = "用户名不能为空";
			return false;
		}
		//效验密码
		var pass = $("[name='pass']").val();
		if(pass == null || pass.length <3){
			var pspan = document.getElementById("pspan");
			pspan.innerHTML = "密码必须大于3位";
			return false;
		}
	}
</script>

3.MVC的一次完整的过程,这里我就拿一个修改过程做例子。上图上代码。

    首先我先模糊查询含有t的uname,接着直接单击操作中修改,跳转到修改页面,删除会让你确认是否确定,下面先给jsp代码

<td>
		<fmt:formatDate value="${u.birthdate }" pattern="yyyy-MM-dd"/> <!-- x显示的日期格式,需要引入fmt标签-->
</td>
<td>
		<a href="${pageContext.request.contextPath }/user.action?act=toUpdate&id=${u.id}">修改</a>
		<a href="${pageContext.request.contextPath }/user.action?act=delete&id=${u.id}" 
		onclick="return confirm('您确认要删除记录么?')">删除</a>
</td>

@Controller层接受并处理,在这里说下方法的三种返回值,void做跳转(转发、重定向),String直接返回jsp或者下一个方法,还有ModelAndView类型,通过对象方法进行操作等,在这里,我显示利用传过来的id值回显给修改界面,让用户更直观的直到要修改的是什么信息(jsp页面隐藏了id值)。

	@RequestMapping(value = "/user", params = "act=toUpdate")
	public String doToUpdate(HttpServletRequest req, User u) {
		String str = "/user/update.jsp";
		User u2 = service.queryById(u.getId());
		req.setAttribute("u", u2);
		return str;
	}
	@RequestMapping(value = "/user", params = "act=update")
	public String doUpdate(HttpServletRequest req, User u) {
		String str = "/user/update.jsp";
		int i = service.update(u);
		if (i > 0) {
			req.setAttribute("msg", "update ok");
			str = "/user/query.jsp";
		} else {
			req.setAttribute("msg", "update error");
			req.setAttribute("u", u);
		}
		return str;
	}

@Controller层调用了@Service层再进入@Repository层,dao层在连接了Mybatis后不需要在方法中再连接数据库。如下所示。

@Repository
public class UserDAO extends SqlSessionDaoSupport implements UserDAOI {
	//注意:需要手动在这里覆盖 setSQLSessionFactory()的方法,并手动@Autowired
	@Override @Autowired
	public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
		// TODO Auto-generated method stub
		super.setSqlSessionFactory(sqlSessionFactory);
	}
	@Override
	public int update(User u) {
		return getSqlSession().update("user.update", u);
	}

然后再Mapper中写sql语句,下面是我的。

<mapper namespace="user">
<update id="update">
		update t_user 
		<set>
			<if test="uname!=null and uname!=''">
				uname=#{uname},
			</if>
			<if test="pass!=null and pass!=''">
				pass=#{pass},
			</if>
			<if test="realname!=null and realname!=''">
				realname=#{realname},
			</if>
			<if test="birthdate!=null">
				birthdate=#{birthdate},
			</if>
		</set>
		where id=#{id}

     </update>
</mapper>

总结下吧。这是我的第一个博客,主要是想展示一下自己的成果,毕竟在没接触之前,ssm框架对我来说是那么高大上,在浏览器上展现的很少,在后台真的做了很多,比如说忘了放的拦截器,不登录就不能访问,利用登录后在session中存用户名判断。

public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1,
			Object arg2) throws Exception {
		// TODO Auto-generated method stub
		//1.获取请求路径,判断是否为公共url  如果是,放行,
		String  path=arg0.getRequestURI();
		//System.out.println("path="+path);
		if(path.indexOf("/login.action")!=-1){
			return true;
		}
		if(path.indexOf("/codeServlet.action")!=-1){
			return true;
		}
		if(path.indexOf("/zhuce.action")!=-1){
			return true;
		}
		if(path.indexOf("/user.action")!=-1){
			return true;
		}
		//2.获取session中的uname 如果非空 放行
		Object uname=arg0.getSession().getAttribute("uname");
		if(uname!=null&uname!=""){
			return true;
		}else{
		
		//3.拦截  前两个没return true
		arg0.setAttribute("msg", "不登录不能访问");
		arg0.getRequestDispatcher("/login.jsp").forward(arg0, arg1);}
		return false;
	}

}

还有非常方便的EL表达式。学了ssm框架后,接下来的目标是ssh框架,还有spring Boot,接触的越多就越知道自己的不足。

还有希望能找到一份8个月左右的全职实习。最完美的结局就是我的能力和潜力被公司认可。加油!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值