Spring MVC简单实例,含所有代码,Mark之后可运行

来源:互联网 发布:编程游戏软件 编辑:程序博客网 时间:2024/06/07 03:45

  这两天在学Spring MVC,感觉不懂的还是很多。不过好歹自己搭出了一个简单的demo。程序的主要目录如下:

  【图片被吃了。。。】

  下面的内容包括了所有的XML配置文件,Java文件,JSP界面,使用的包的话如下,大家可以自己去百度找找。

 【图片又被吃了。。。】

有些包好像没用到的说。。。先不管了。

下面开始demo。

 嗯,虽然目录图片没了,不过我给的代码应该是全的。

1.XML文件,包括了一个web.xml和一个springmvc-servlet.xml,代码如下:

web.xml

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"id="WebApp_ID" version="3.0"><!-- 解决中文乱码问题 --><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param><init-param><param-name>forceEncoding</param-name><param-value>true</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

 springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?><beans:beans xmlns:beans="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd "><mvc:annotation-driven /><!-- ①:对web包中的所有类进行扫描,以完成Bean创建和自动依赖注入的功能 --><context:component-scan base-package="net.use" /><!-- 这两个类用来启动基于Spring MVC的注解功能,将控制器与方法映射加入到容器中 --><beans:beanclass="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" /><beans:beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" /><!-- 这个类用于Spring MVC视图解析 --><beans:bean id="viewResolver"class="org.springframework.web.servlet.view.InternalResourceViewResolver"><beans:property name="prefix" value="/WEB-INF/pages/" /><beans:property name="suffix" value=".jsp" /></beans:bean></beans:beans>

2.JSP界面,这个就很多了。不过总体上很粗略,丑到自己都不想看。

根据上面的配置信息,我是在WebContent的WEB-INF下面新建了一个pages文件夹,里面放入了所有的JSP代码。

按照界面跳转的顺序来看,首先是login.jsp,也是服务器启动后打开的界面。。。

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>    <form action="login" method="post"><fieldset><legend>登录</legend><p><label>姓名</label> <input type="text" id="name" name="name"tabindex="1"></p><p><label>密码š</label> <input type="text" id="pwd" name="pwd"tabindex="2"></p><p id="buttons"><input id="reset" type="reset" tabindex="3" value="取消"> <inputid="submit" type="submit" tabindex="4" value="登录†Œ"></p></fieldset></form><form action="toRegister" method="POST">  <input id="reg" type="submit" value="注册"></form></body></html>
然后是fail_login和success_login,简单的在body里面加一句话:登录失败或者成功啥的。。。这个就不贴了。

下面是注册界面,和登录类似,多了一些其他的信息,如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Insert title here</title></head><body>  <form action="register" method="post"><fieldset><legend>注册</legend><p><label>姓名</label> <input type="text" id="name" name="name"tabindex="1"></p><p>    <label>性别</label> <input type="text" id="sex" name="sex"        tabindex="2"></p><p><label>年龄š</label> <input type="text" id="age" name="age"tabindex="3"></p><p><label>密码š</label> <input type="text" id="pwd" name="pwd"tabindex="4"></p><p><label>确认密码š</label> <input type="text" id="pwd2" name="pwd2"tabindex="5"></p><p id="buttons"><input id="reset" type="reset" tabindex="6" value="取消"> <inputid="submit" type="submit" tabindex="7" value="注册†Œ"></p></fieldset></form></body></html>

然后是fail_register和success_register这两个JSP,同login的对应文件,body里面只有简单的提示信息。

好了,丑比界面也搞定了,下面就剩下Java的代码了。

3.Java的代码部分包括三个:User.java,一个封装了User信息的Java类。一样很简单,如下:

package net.use.info;import java.io.Serializable;import java.util.Date;public class User implements Serializable {/** * @author zjn */private static final long serialVersionUID = 1L;private Integer id; // idprivate String name; // nameprivate String pwd; // pwdprivate Integer age; // ageprivate Date creatTime; // creatTimeprivate String sex;//全部实现了set和get方法�? 以此完成依赖注入(设值注入)public String getSex() {return sex;}public void setSex(String sex) {this.sex=sex;}public Integer getId() {return id;}public void setId(Integer 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 Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}public Date getCreatTime() {return creatTime;}public void setCreatTime(Date creatTime) {this.creatTime = creatTime;}}

然后是Controller,在其中使用注释的方式来绑定对象和处理请求。。。。这个描述可能不大准确,毕竟新手,见谅见谅。代码如下:

package net.use.controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import net.use.dao.UserData;import net.use.info.User;@Controllerpublic class UserController {@RequestMapping("")public String Login(Model model) {return "login";//即首先显示的是登录界面}@RequestMapping("login")public String handleLogin(@ModelAttribute("form")User user,Model model) {UserData ud = new UserData();System.out.println("登录过程中使用的User对象信息:"+user.getName()+","+user.getSex()+","+user.getAge()+","+user.getPwd());if(ud.isRepeat(user)) {return "success_login";//登录成功}else {return "fail_login";}}@RequestMapping("toRegister")public String toRegister(Model model) {return "register";//跳转到注册界面}@RequestMapping("register")public String Save(@ModelAttribute("form") User user, Model model) { // user:视图层传给控制层的表单对象;model:控制层返回给视图层的对�?//model.addAttribute("user", user);//System.out.println(user.getName()+","+user.getSex()+","+user.getPwd()+","+user.getAge());if(user.getPwd().split(",").length>=2) {if(user.getPwd().split(",")[0].equals(user.getPwd().split(",")[1])) {System.out.println("前后密码不符合!");return "fail_register";}}UserData ud = new UserData();user.setPwd(user.getPwd().split(",")[0]);if(ud.isRepeat(user)) {System.out.println("当前输入的user重复");return "fail_register";//注册失败}else {ud.save(user);return "success_register";//注册成功}}}

最后,关于数据保存和处理的dao层Java类。。一个简单的保存和分析文本文件信息的类,代码如下:

package net.use.dao;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import net.use.info.User;public class UserData {public boolean save(User user) {System.out.println("开始save user!");if(isRepeat(user)) {return false;}File file = new File("user.txt");if(!file.exists()) {try {file.createNewFile();System.out.println("文件不存在!创建成功!");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println("文件存在了,下面开始保存!");FileWriter fw;try {fw = new FileWriter(file,true);//true表示保留现有内容BufferedWriter bw = new BufferedWriter(fw);bw.write(user.getName()+"***"+user.getSex()+"***"+user.getAge()+"***"+user.getPwd()+"\r\n");System.out.println("user 保存完毕!!");System.out.println(file.getAbsolutePath());bw.close();//it is important to close the writer} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}return true;}public boolean isRepeat(User user) {System.out.println("开始查找是否重复!");boolean res = false;File file = new File("user.txt");if(file.exists()) {try {FileReader fr = new FileReader(file);BufferedReader br = new BufferedReader(fr);String nextLine="";while((nextLine=br.readLine()) !=null) {String[] info = nextLine.split("\\*\\*\\*");//转义字符的锅,加上\\才能识别if(info[0].equals(user.getName()) && info[3].equals(user.getPwd())) {System.out.println("发现用户重复");res=true;}}br.close();} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}System.out.println("未发现用户重复");return res;}}

好了,三个部分齐了。下面只要你的配置正确,包引用到位,那么就应该没问题了。

总而言之,丑虽然丑,,,,好歹还是搭出来了。。。


原创粉丝点击