页面不跳转 点击提交页面没有变化
RegistServlet.java
package servlet;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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 org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.imooc.domain.User;
import utils.UploadUtils;
/**
* 用户注册的Servlet
*/
@WebServlet("/RegistServlet")
public class RegistServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//数据的接收
//文件上传基本操作
try {
//定义一个Map集合用于保存接收到的数据
Map<String,String>map=new HashMap<String,String>();
//1 创建一个磁盘文件项工厂对象
DiskFileItemFactory diskFileItemFactory=new DiskFileItemFactory();
//2 创建一个核心解析类
ServletFileUpload servletFileUpload=new ServletFileUpload(diskFileItemFactory);
//3 解析request请求 返回的是List集合 List集合中存放的是FileItem对象
List<FileItem> list=servletFileUpload.parseRequest(request);
//4 遍历集合 获得每个FileItem 判断表单项还是文件上传项
//定义一个List集合 用于保存复选框兴趣爱好数据
List<String> hobbyList=new ArrayList<String>();
String url=null;//图片
for(FileItem fileItem:list) {
//判断是表单项还是文件上传项
if(fileItem.isFormField()){
//普通表单项
//接收表单项参数的值
String name=fileItem.getFieldName();//获得表单的name属性
String value=fileItem.getString("UTF-8");//获得表单的值
System.out.println(name+" "+value);
//接收复选框的数据
if("hobby".equals(name)) {
String hobbyValue=fileItem.getString("UTF-8");
//接收到一个值 将这个值存入到hobbyList集合中
hobbyList.add(hobbyValue);
//改变原有的tostring()输出结果 原输出字符串[xxx,yyy] 现输出字符串xxx,yyy
hobbyValue=hobbyList.toString().substring(1, hobbyList.toString().length()-1);
System.out.println(name+" "+hobbyValue);
//将爱好的数据存入Map集合当中
map.put(name,hobbyValue);
}else {
//将数据存入到map集合当中
map.put(name, value);
}
}else {
//文件上传项
//文件上传功能
//获得文件上传的名称:
String fileName=fileItem.getName();
//获得文件上传的路径
String path=this.getServletContext().getRealPath("/upload");
//通过工具类获得唯一文件名
String uuidFileName=UploadUtils.getUUIDFileName(fileName);
//获得上传的数据
InputStream is=fileItem.getInputStream();
//将输入流对接到输出流
url=path+"\\"+uuidFileName;
OutputStream os=new FileOutputStream(url);
/**
* /*
这里的is是图片的输入流,InputStream is=fileItem.getInputStream();这条语句很重要,
注意是fileItem.getInputStream(),fileItem是上传图片的那个控件,所以这里的输入流
就是获取图片的输入流
那么,下面的while循环就是读写数据常用的循环了,将数据从is输入流中读取出来,放到
byte数组b中,len为实际读取的字节数,前几次循环数据比较多,会存放b,所以len就是
1024,最后一次可能读不满,所以len就是最后一次实际读取的字节数。
每次循环,读完一次就把数据写到输出流os中。
*/
int len=0;
byte[] b=new byte[1024];
while((len=is.read(b))!=-1) {
os.write(b, 0, len);
}
is.close();
os.close();
}
}
System.out.println("map:"+map);
//封装数据到User当中
User user=new User();
user.setUsername(map.get("username"));
user.setPassword(map.get("password"));
user.setSex(map.get("sex"));
user.setNickname(map.get("nickname"));
user.setHobby(map.get("hobby"));
user.setPath(url);
//将注册用户的信息存入到List集合中
//获得ServletContext对象
List <User>userList=(List<User>) this.getServletContext().getAttribute("list");
userList.add(user);
for(User u:userList) {
System.out.println(u);
}
this.getServletContext().setAttribute("list", userList);
//注册成功,跳转到登陆页面
request.getSession().setAttribute("username",user.getUsername());
response.sendRedirect(request.getContextPath()+"/login.jsp");
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
InitServlet.java
package servlet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import com.imooc.domain.User;
/**
* 用户注册的初始化的Servlet
*/
/* @WebServlet(value="/InitServlet",loadOnStartup=1) */
public class InitServlet extends HttpServlet {
@Override
public void init() throws ServletException {
// 创建一个List集合保存用户注册的信息
List<User> list=new ArrayList<User>();
//将list保存到ServletContext作用域中
this.getServletContext().setAttribute("list",list);
}
}
UploadUtils.java
package utils;
import java.util.UUID;
public class UploadUtils {
/**
* 生成唯一文件名
* @param args
*/
public static String getUUIDFileName(String fileName) {
//将文件名的部分进行截取 :xx.jpg --> .jpg
int idx=fileName.lastIndexOf(".");//找到 .的位置
System.out.println("idx的位置:"+idx);
String extention=fileName.substring(idx); //取出 .jpg
System.out.println("取出文件后缀:"+extention);
//随意生成多位编号与之前的格式结合 把编号中的-替换成无字符串 xxxxx.jpg
String uuidFileName=UUID.randomUUID().toString().replace("-", "")+extention;
return uuidFileName;
}
public static void main(String[] args) {
System.out.println(getUUIDFileName("1.jpg"));
}
}
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
<link rel="stylesheet" href="./css/login.css">
</head>
<body>
<div class="login">
<div class="header">
<h1>
<a href="./login.jsp">登录</a> <a href="./regist.jsp">注册</a>
</h1>
</div>
<%
String username="";
if(session.getAttribute("username")!=null){
username=(String)session.getAttribute("username");
}
%>
<form action="" method="post">
<table>
<tr>
<td class="td1">用户名</td>
<td><input type="text" class="input1" name="username" value="<%=username%>"></td>
</tr>
<tr>
<td class="td1">密码</td>
<td><input type="password" class="input1" name="password"></td>
</tr>
<tr>
<td class="td1" colspan="2">
<input type="checkbox" name="remember" value="true" checked="checked"> 记住用户名</td>
</tr>
<tr>
<td colspan="2">
<div class="btn-red">
<input type="submit" value="登录" id="login-btn">
</div>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>
regist.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
<link rel="stylesheet" href="./css/reg.css">
</head>
<body>
<div class="reg">
<div class="header">
<h1>
<a href="./login.jsp">登录</a> <a href="./regist.jsp">注册</a>
</h1>
</div>
<!--
文件上传的条件
* 表单必须是post提交方式
* 表单中必须有文件上传项,文件上传项必须有name属性和值
* 表单的enctype属性必须设置为multipart/form-data
-->
<%
String msg = "";
if(request.getAttribute("msg")!=null){
msg = (String)request.getAttribute("msg");
}
%>
<h3><font color="red"><%= msg %></font></h3>
<form action="/reg_login/RegistServlet" method="post" enctype="multipart/form-data">
<table>
<tr>
<td class="td1">用户名</td>
<td><input type="text" class="input1" name="username"></td>
</tr>
<tr>
<td class="td1">密码</td>
<td><input type="password" class="input1" name="password"></td>
</tr>
<tr>
<td class="td1">昵称</td>
<td><input type="text" class="input1" name="nickname"></td>
</tr>
<tr>
<td class="td1">性别</td>
<td>
<input type="radio" name="sex" value="male">男
<input type="radio" name="sex" value="female">女
</td>
</tr>
<tr>
<td class="td1">上传头像</td>
<td><input type="file" id="photo" name="upload"></td>
</tr>
<tr>
<td class="td1">兴趣爱好</td>
<td><label>
<input type="checkbox" name="hobby" value="篮球">篮球
<input type="checkbox" name="hobby" value="足球">足球
<input type="checkbox" name="hobby" value="排球">排球
<input type="checkbox" name="hobby" value="羽毛球">羽毛球
</label></td>
</tr>
<tr>
<td colspan="2">
<div class="btn-red">
<input type="submit" value="注册" id="reg-btn">
</div>
</td>
</tr>
</table>
</form>
</div>
</body>
</html>

0
收起
正在回答
3回答
同学使用的什么浏览器,换个浏览器再试试呢。或者下载老师的源码试一下。祝:学习愉快~
从网页搭建入门Java Web2018版
- 参与学习 人
- 提交作业 1088 份
- 解答问题 10204 个
如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星