基于SpringMVC框架,完成用户的增,删,改,查,以及json数据处理
来源:互联网 发布:unity3d回合制游戏 编辑:程序博客网 时间:2024/04/30 19:55
源码下载地址:http://download.csdn.net/detail/mexican_jacky/9333525
本文是自己在学习SpringMVC做一个简单记录,方便以后自己忘记回来查询。
第一步:配置DispatcherServlet以及字符编码处理
<?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">
<!--
在web.xml中配置DispatcherServlet 此处就相当于Struts2的拦截器一样
-->
<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>
<!-- 中文乱码处理 -->
<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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
第二步:新建SpringMVC控制器,注明:在新建SpringMVC控制器的文件名必须与web.xml中DispatcherServlet中的servletName一致
SpringMVC-servlet中的配置文件信息如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
<!-- 注解的方式 -->
<!-- Controller基于那个包 -->
<context:component-scan base-package="org.ksea.controller"/>
<mvc:annotation-driven/>
<!-- 将静态文件指定到某个特殊的文件夹中统一处理 /resources/**表示 resources文件夹中所有文件 -->
<mvc:resources location="/resources/" mapping="/resources/**"/>
<!-- 全局异常处理 -->
<bean id="exceptionResolver"
class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- prop中 key是您定义的异常类作为key,value是您要跳转异常处理的页面 这里就是 error.jsp -->
<prop key="org.ksea.exception.UserExcetion" >user/error</prop>
</props>
</property>
</bean>
<!-- 文件上传配置 设置CommonsMultipartResolver才能完成上传-->
<bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 限制文件大小为5M -->
<property name="maxUploadSize" value="5000000"></property>
</bean>
<!-- 映射视图 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图前缀 -->
<property name="prefix" value="/WEB-INF/pages/"/>
<!-- 视图后缀 -->
<property name="suffix" value=".jsp"/>
</bean>
</beans>
-----------------------以上为SpringMVC框架的一个简单配置---------------------------------------------
以下实例采用原生态JBDC进行测试:
package org.ksea.db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.swing.text.html.HTMLDocument.HTMLReader.PreAction;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
public class DatabaseUtil {
private static final String USER_NAME = "root";
private static final String USER_PASSWORD = "root";
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static MysqlDataSource dataSource;
static {
dataSource = new MysqlDataSource();
dataSource.setDatabaseName("ksea");
dataSource.setPort(3306);
dataSource.setUser(USER_NAME);
dataSource.setPassword(USER_PASSWORD);
}
public static Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
public static void executeUpdate(String sql, Object... params) {
try {
Connection con = getConnection();
PreparedStatement statement = con.prepareStatement(sql);
if (null != params && params.length > 0) {
for (int i = 0; i < params.length; i++) {
statement.setObject(i + 1, params[i]);
}
}
statement.executeUpdate();
closeResource(null, statement, con);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static ResultSet executeQuery(String sql, Object... params) {
try {
Connection con = getConnection();
PreparedStatement statement = con.prepareStatement(sql);
if (null != params && params.length > 0) {
for (int i = 0; i < params.length; i++) {
statement.setObject(i + 1, params[i]);
}
}
return statement.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
// 关闭连接,此方法主要针对增,删,改的关闭
private static void closeResource(ResultSet resultSet, Statement statement,
Connection connection) {
try {
if (null != resultSet) {
resultSet.close();
}
if (null != statement) {
statement.close();
}
if (null != connection) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// 针对查询写的关闭
public static void closeResource(ResultSet resultSet) {
try {
Statement statement = resultSet.getStatement();
Connection connection = statement.getConnection();
if (null != resultSet) {
resultSet.close();
}
if (null != statement) {
statement.close();
}
if (null != connection) {
connection.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--------------------------------------------DAO封装------------------------------------------------
package org.ksea.dao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.ksea.db.DatabaseUtil;
import org.ksea.model.User;
public class UserDao {
private static final String USERLIST = "select * from user";
private static final String QUERYUSERBYUSERNAME = "select * from user u where u.username=?";
private static final String QUERYUSERBYUID = "select * from user u where u.uid=?";
public List<User> queryUserList() {
ResultSet resultSet = DatabaseUtil.executeQuery(USERLIST, null);
List<User> users = new ArrayList<User>();
try {
while (resultSet.next()) {
users.add(new User(
String.valueOf(resultSet.getObject("uid")),
String.valueOf(resultSet.getObject("username")),
String.valueOf(resultSet.getObject("pwd")),
String.valueOf(resultSet.getObject("nickname")),
String.valueOf(resultSet.getObject("email")),
String.valueOf(resultSet.getObject("filename"))
));
}
DatabaseUtil.closeResource(resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return users;
}
public User queryUserByUserName(String userName){
ResultSet resultSet=DatabaseUtil.executeQuery(QUERYUSERBYUSERNAME, userName);
User u=null;
try {
while (resultSet.next()) {
u=new User(
String.valueOf(resultSet.getObject("uid")),
String.valueOf(resultSet.getObject("username")),
String.valueOf(resultSet.getObject("pwd")),
String.valueOf(resultSet.getObject("nickname")),
String.valueOf(resultSet.getObject("email")));
}
DatabaseUtil.closeResource(resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return u;
}
public User queryUserByUid(String uid){
ResultSet resultSet=DatabaseUtil.executeQuery(QUERYUSERBYUID, uid);
User u=null;
try {
while (resultSet.next()) {
u=new User(
String.valueOf(resultSet.getObject("uid")),
String.valueOf(resultSet.getObject("username")),
String.valueOf(resultSet.getObject("pwd")),
String.valueOf(resultSet.getObject("nickname")),
String.valueOf(resultSet.getObject("email")));
}
DatabaseUtil.closeResource(resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return u;
}
public User login(User user){
ResultSet resultSet=DatabaseUtil.executeQuery(
"select * from user u where u.username=? and u.pwd=?",
new Object[]{user.getUsername(),user.getPwd()});
User u=null;
try {
while (resultSet.next()) {
u=new User(
String.valueOf(resultSet.getObject("uid")),
String.valueOf(resultSet.getObject("username")),
String.valueOf(resultSet.getObject("pwd")),
String.valueOf(resultSet.getObject("nickname")),
String.valueOf(resultSet.getObject("email")));
}
DatabaseUtil.closeResource(resultSet);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return u;
}
public void updateUser(User user){
DatabaseUtil.executeUpdate(
"update user set username=?,pwd=?,email=?,nickname=? where uid=?",
new Object[]{
user.getUsername(),
user.getPwd(),
user.getEmail(),
user.getNickname(),
user.getUid()
});
}
public void addUser(User user){
DatabaseUtil.executeUpdate(
"insert into user(username,pwd,email,nickname,filename) values(?,?,?,?,?)",
new Object[]{
user.getUsername(),
user.getPwd(),
user.getEmail(),
user.getNickname(),
user.getFilename()
});
}
public void deleteUser(String uid){
DatabaseUtil.executeUpdate("delete from user where uid=?", uid);
}
}
------------------------------------------------用户信息类User-------------------------------------------------
package org.ksea.model;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotEmpty;
public class User {
private String uid;
private String username;
private String pwd;
private String nickname;
private String email;
private String filename;
public User() {
// TODO Auto-generated constructor stub
}
public User(String uid, String username, String pwd, String nickname,
String email) {
super();
this.uid = uid;
this.username = username;
this.pwd = pwd;
this.nickname = nickname;
this.email = email;
}
public User(String uid, String username, String pwd, String nickname,
String email, String filename) {
super();
this.uid = uid;
this.username = username;
this.pwd = pwd;
this.nickname = nickname;
this.email = email;
this.filename = filename;
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
@NotEmpty(message = "用户名不允许为空!")
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
@Size(min = 6, max = 20, message = "密码长度介于6-20个字符!")
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
@Email(message = "邮箱格式不正确!")
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFilename() {
return filename;
}
public void setFilename(String filename) {
this.filename = filename;
}
}
-------------------------------------------自定义异常处理---------------------------------------------------
package org.ksea.exception;
public class UserExcetion extends Exception {
private static final long serialVersionUID = 1251860651597558808L;
public UserExcetion() {
super();
// TODO Auto-generated constructor stub
}
public UserExcetion(String message, Throwable cause) {
super(message, cause);
// TODO Auto-generated constructor stub
}
public UserExcetion(String message) {
super(message);
// TODO Auto-generated constructor stub
}
public UserExcetion(Throwable cause) {
super(cause);
// TODO Auto-generated constructor stub
}
}
-----------------------------------------------SpringMVC核心 Controller-----------------------------------------
package org.ksea.controller;
import java.io.File;
import java.io.IOException;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.FileUtils;
import org.ksea.dao.UserDao;
import org.ksea.exception.UserExcetion;
import org.ksea.model.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
@Controller
@RequestMapping({ "/user" })
public class UserController {
//查询用户列表信息
@RequestMapping(value={ "/users" },method=RequestMethod.GET)
public String queryUsers(Model model) {
UserDao userDao = new UserDao();
List<User> users = userDao.queryUserList();
model.addAttribute("users", users);
return "user/userlist";
}
//根据用户名查询用户
@RequestMapping(value={"/{username}/queryUser"},method=RequestMethod.GET)
public String queryUser(@PathVariableString username,Model model){
UserDao userDao= new UserDao();
User user= userDao.queryUserByUserName(username);
model.addAttribute("user", user);
return "user/detailUser";
}
//用该方法说明SpringMvC中返回json数据
@RequestMapping(value={"/{username}/queryUser1"},method=RequestMethod.GET,produces="application/json")
@ResponseBody
public User queryUser(@PathVariable String username){
UserDao userDao= new UserDao();
User user= userDao.queryUserByUserName(username);
return user;
}
//添加用户、跳转添加用户界面
@RequestMapping(value={"/add"},method=RequestMethod.GET)
public String add(Model model){
User user= new User();
model.addAttribute("user", user);
return "user/addUser";
}
/**
//执行添加用户操作Save
//单文件操作
@RequestMapping(value={"/add"},method=RequestMethod.POST)
//注明:此处上传MultipartFile attach通过传参获取文件,
//SpringMVC中form标签没有提供,只能通过input,其attach与input中name值必须一直
//controller配置文件还需配置CommonsMultipartResolver的bean
public String add(@Validated User user, BindingResult br,MultipartFile attach,HttpServletRequest request){
//注意在验证之后@Validated必须紧紧跟着BindingResult 他们两个中间不能有别的或者或编译不通过
if(br.hasErrors())
return "user/addUser";
//attach.getName()获取的值就是MultipartFile的属性也就是attach
//attach.getOriginalFilename()文件原始名称,也就是您上传文件的文件名
//attach.getContentType() 上传文件类型
//获取文件上传路径
String realPath=request.getSession().getServletContext().getRealPath("/resources/upload");
File file= new File(realPath+"/"+attach.getOriginalFilename());
try {
//上传文件
FileUtils.copyInputStreamToFile(attach.getInputStream(), file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
UserDao userDao= new UserDao();
userDao.addUser(user);
return "redirect:/user/users";
}*/
//以上单文件上传仅供参考
//执行添加用户操作Save
//多文件同时上传
@RequestMapping(value={"/add"},method=RequestMethod.POST)
public String add( @Validated User user,
BindingResult br,
@RequestParam("attachs") MultipartFile[] attachs,
HttpServletRequest request){
if(br.hasErrors())
return "user/addUser";
String realPath=request.getSession().getServletContext().getRealPath("/resources/upload");
try {
//循环上传多个文件
for (int i = 0; i < attachs.length; i++) {
//如果上传的文件不存在,跳过不执行
if(attachs[i].isEmpty())
continue;
File file= new File(realPath+"/"+attachs[i].getOriginalFilename());
FileUtils.copyInputStreamToFile(attachs[i].getInputStream(), file);
//注意这里只处理了单个文件的保存,多文件保存,根据情况而定
user.setFilename(attachs[i].getOriginalFilename());
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
UserDao userDao= new UserDao();
userDao.addUser(user);
return "redirect:/user/users";
}
//下载
@RequestMapping(value={"{filename}/downloadFile"},method=RequestMethod.GET)
public String downloadFile(@PathVariable String filename){
System.out.println(filename);
return "redirect:/user/users";
}
//更新用户信息、根据用户id查询之后、跳转到用户更新界面
@RequestMapping(value={"{uid}/updateUser"},method=RequestMethod.GET)
public String updateUser(@PathVariable String uid,Model model){
UserDao userDao= new UserDao();
User user=userDao.queryUserByUid(uid);
model.addAttribute("user", user);
return "user/updateUser";
}
//执行更新用户信息操作
@RequestMapping(value={"{uid}/updateUser"},method=RequestMethod.POST)
public String updateUser(@Validated User user,BindingResult br){
if(br.hasErrors())
return "user/updateUser";
UserDao userDao= new UserDao();
userDao.updateUser(user);
return "redirect:/user/users";
}
//根据用户ID执行删除操作
@RequestMapping(value={"{uid}/deleteUser"},method=RequestMethod.GET)
public String deleteUser(@PathVariable String uid){
UserDao userDao= new UserDao();
userDao.deleteUser(uid);
return "redirect:/user/users";
}
//执行跳转到登录界面
@RequestMapping(value={"/login"},method=RequestMethod.GET)
public String login(Model model){
model.addAttribute("user", new User());
return "user/login";
}
@RequestMapping(value={"/login"},method=RequestMethod.POST)
//保存sesion的值直接将session传递在参数中即可
public String login(User user,HttpSession session) throws UserExcetion{
User u=null;
UserDao userDao= new UserDao();
u= userDao.login(user);
if(null==u){
throw new UserExcetion("用户名与密码不匹配!");
}
//此处登录成功
session.setAttribute("user", u);
return "redirect:/user/users";
}
//局部异常处理、只能处理对应Controller中的异常,全局异常见SpringMVC中全局异常处理
/**
@ExceptionHandler(value={UserExcetion.class})
public String handlerException(UserExcetion userExcetion,HttpServletRequest request){
request.setAttribute("e", userExcetion);
return "user/error";
}*/
}
---------------------------------------login.jsp----------------------------
--------------------------------------userlist.jsp----------------------------------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'userlist.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/main.css" type="text/css">
<script type="text/javascript">
function alteronClick(value){
json(value);
}
function json(valueURL){
var xhr = new XMLHttpRequest();
xhr.open('get','<%=request.getContextPath()%>/'+valueURL,true);
xhr.onreadystatechange=function(){
if(xhr.readyState==4){
var json = xhr.responseText;
var obj=eval("("+json+")");
alert(obj.username);
}
}
xhr.send(null);
}
</script>
</head>
<body>
当前登录用户是:${user.username} <注明:此处是从loginsession取得的数据>
<A href="user/add">添加用户</A>
用户信息列表:<br/>
<table>
<c:forEach items="${users}" var="user">
<tr>
<Td>用户编码:${user.uid}</Td>
<Td>用户名: <A href="user/${user.username}/queryUser"> ${user.username}</A> </Td>
<Td>用户密码:${user.pwd} </Td>
<Td>邮箱:${user.email}</Td>
<Td>昵称:${user.nickname }</Td>
<Td>附件:<a href="user/${user.filename}/downloadFile"> ${user.filename } </a></Td>
<td>
<input onclick="alteronClick('user/${user.username}/queryUser1');" type="button" value="json">
</td>
<td><A href="user/${user.uid}/updateUser">修改</A></td>
<td><A href="user/${user.uid}/deleteUser">删除</A></td>
<tr>
</c:forEach>
</table>
</body>
</html>
------------------------------------------------------addUser.JSP--------------------------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'userlist.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
添加用户信息:<br/>
<sf:form method="post" modelAttribute="user" enctype="multipart/form-data">
用户名:<sf:input path="username" /><sf:errors path="username"/>
<br/>
密码:<sf:password path="pwd"/><sf:errors path="pwd"/>
<br/>
邮箱:<sf:input path="email" /><sf:errors path="email"/>
<br/>
昵称:<sf:input path="nickname"/>
<br/>
附件上传:<br/><input type="file" name="attachs" /><br/>
<input type="file" name="attachs" /><br/>
<input type="file" name="attachs" /><br/>
<br/>
<input type="submit" value="添加用户">
</sf:form>
</body>
</html>
-------------------------------------------------detailUser.jsp---------------------------------------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'userlist.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
用户明细信息:<br/>
用户编码:${user.uid}<br/>
用户名:${user.username}<br/>
用户密码:${user.pwd}<br/>
邮箱:${user.email}<br/>
昵称:${user.nickname }<br/>
</body>
</html>
-------------------------------------------------------updateUser.jsp---------------------------------------------
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="sf" uri="http://www.springframework.org/tags/form"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'userlist.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
添加用户信息:<br/>
<sf:form method="post" modelAttribute="user">
用户名:<sf:input path="username" /><sf:errors path="username"/>
<br/>
密码:<sf:input path="pwd"/><sf:errors path="pwd"/>
<br/>
邮箱:<sf:input path="email" /><sf:errors path="email"/>
<br/>
昵称:<sf:input path="nickname"/>
<br/>
<input type="submit" value="更新用户">
</sf:form>
</body>
</html>
--------------------------------error-----------------------------
<%@ 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>
<base href="<%=basePath%>">
<title>My JSP 'error.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
局部异常信息处理内容: ${e.message}
全局异常处理是从SpringMVC中读取的信息:${exception.message}
</body>
</html>
- 基于SpringMVC框架,完成用户的增,删,改,查,以及json数据处理
- springMvc+AJAX+JSON的增删改查
- 基于easyui框架的增删改查
- 基于easyui的 增 删 改 查
- spring+springmvc+myBatis+jquery+ajax+json的增删改查
- SpringMVC+hibernate整合小例子,用户的增删查改
- springmvc-mybatis的增删改查以及主键返回
- SpringMVC增、删、改、查、保存
- js数组以及json元素的操作-增删改查
- myeclipse 实现框架 spring+springmvc+springsecurity+myibatis+mysql用户认证和人员增删改查
- 基于SSH框架的增删改查实例附带源码
- 数据库的连接以及数据的增、删、查、改
- JavaWeb框架-SpringMVC-2-增删改查
- SSH框架的增、删、查、改的实现
- 关于SSM框架搭建以及简单的增删改查
- SQL Server的增、删、改、查以及系统函数
- CI框架的curd(增、删、改、查)操作
- yii框架 简单的增、删、改、查(分页)
- 第33讲 项目1:利用循环求和
- android(33)(IP拨号器)
- Android Studio基础之安装&配置(一)-学习篇
- Web 网页通信之长连接、长轮询
- Window 通过cmd查看端口占用、相应进程、杀死进程等的命令【转】
- 基于SpringMVC框架,完成用户的增,删,改,查,以及json数据处理
- 制作U盘启动盘
- 离散余弦变换
- 正则表达式
- 成为Java GC专家(5)—Java性能调优原则
- RSA结合DES解决上下行接口的安全性问题
- HDFS(1)
- 门面模式
- IOS之Objectivc-c获取本地存储路径