前提:还是基于我们前面的书城项目
在每一个HTML页面的第一行添加JSP的page指令:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
,然后将HTML页面的文件扩展名改为jsp,即将.html改为.jsp。注意:一定要先在HTML页面中添加jsp指令再修改扩展名,否则页面中会出现乱码现象。
这里以index.html为例
将每一个jsp文件中路径为html
文件的都改为jsp
文件
这里以index.jsp文件为例
运行项目,在界面点击看看,是不是每一个页面都能访问到
我们的jsp页面,往往会有大量重复的代码。这时我们可以将其抽取为一个jsp文件,然后在需要的页面直接使用静态或动态包含
,将公共的jsp文件引入到当前页面中
base.jsp
文件中每个jsp文件都需要设置设置项目跟路径到base标签,也需要导入jQuery源码。我们可以把这些抽取到base,jsp
文件中
如下在WEB-INF目录下创建punlic_jsp/base.jsp
文件
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<base href="http://localhost:8080/bookStore2/"/>
<script type="text/javascript" src="static/script/jquery-1.7.2.js"></script>
在每个jsp文件中,引入base.jsp
文件。原来的base标签和导入jQuery源码的script 标签可以删掉
这里以login.jsp为例:
package com.bookstore.servlet;
import com.bookstore.bean.User;
import com.bookstore.service.UserServices;
import com.bookstore.service.impl.UserservicesImpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "LoginServlet", value = "/login")
public class LoginServlet extends HttpServlet {
private UserServices userservices = new UserservicesImpl();
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户名,密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 检查用户名密码是否正确
User userOld = new User();
userOld.setUsername(username);
userOld.setPassword(password);
User loginUser = userservices.login(userOld);
if (loginUser != null) {
// 用户名密码正确
response.sendRedirect("/bookStore2/pages/user/login_success.jsp");
} else {
// 用户名密码不正确
request.setAttribute("msg","用户名或密码错误,请重新输入"); // 将提示内容写入request域中
request.getRequestDispatcher("/pages/user/login.jsp").forward(request, response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
login.jsp
文件,获取并显示错误信息<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/WEB-INF/public_jsp/base.jsp"%>
<!--base href="http://localhost:8080/bookStore2/"/-->
<meta charset="UTF-8" />
<title>尚硅谷会员登录页面</title>
<link type="text/css" rel="stylesheet" href="static/css/style.css" />
<!--script type="text/javascript" src="static/script/jquery-1.7.2.js"></script-->
<script type="text/javascript" src="static/script/login.js"></script>
</head>
<body>
<div id="login_header">
<a href="index.jsp">
<img class="logo_img" alt="" src="static/img/logo.gif" />
</a>
</div>
<div class="login_banner">
<div id="l_content">
<span class="login_word">欢迎登录</span>
</div>
<div id="content">
<div class="login_form">
<div class="login_box">
<div class="tit">
<h1>尚硅谷会员</h1>
</div>
<div class="msg_cont">
<b></b>
<!--根据request域中是否由msg,来判断要显示的内容-->
<span class="errorMsg"><%=request.getAttribute("msg")==null?"请输入用户名密码":request.getAttribute("msg")%></span>
</div>
<div class="form">
<form action="login">
<label>用户名称:</label>
<input
class="itxt"
type="text"
placeholder="请输入用户名"
autocomplete="off"
tabindex="1"
name="username"
id="username"
/>
<br />
<br />
<label>用户密码:</label>
<input
class="itxt"
type="password"
placeholder="请输入密码"
autocomplete="off"
tabindex="1"
name="password"
id="password"
/>
<br />
<br />
<input type="submit" value="登录" id="sub_btn" />
</form>
<div class="tit">
<a id = "submit" href="pages/user/regist.jsp">立即注册</a>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="bottom">
<span>
尚硅谷书城.Copyright ©2015
</span>
</div>
</body>
</html>
效果如下:
package com.bookstore.servlet;
import com.bookstore.bean.User;
import com.bookstore.service.impl.UserservicesImpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "RegisteServlet", value = "/register")
public class RegisteServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
User user = new User(null,username,password,email);
UserservicesImpl userservices = new UserservicesImpl();
boolean registFag = userservices.regist(user);
if (registFag){
response.sendRedirect("/bookStore2/pages/user/regist_success.jsp");
}else {
request.setAttribute("msg","用户名已存在");
request.getRequestDispatcher("/pages/user/regist.jsp").forward(request,response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/WEB-INF/public_jsp/base.jsp"%>
<meta charset="UTF-8" />
<title>尚硅谷会员注册页面</title>
<link type="text/css" rel="stylesheet" href="static/css/style.css" />
<link rel="stylesheet" href="static/css/register.css" />
<style type="text/css">
.login_form {
height: 420px;
margin-top: 25px;
}
</style>
<script type="text/javascript" src="static/script/regist.js"></script>
</head>
<body>
<div id="login_header">
<a href="index.jsp">
<img class="logo_img" alt="" src="static/img/logo.gif" />
</a>
</div>
<div class="login_banner">
<div class="register_form">
<h1>注册尚硅谷会员</h1>
<form action="register">
<div class="form-item">
<div>
<label>用户名称:</label>
<input id="username" type="text" name="username" placeholder="请输入用户名"/>
</div>
<!--根据request域中是否有错误提示,来判断使用哪个内容-->
<span class="errMess" id="userErrMess">
<%=request.getAttribute("msg")==null?"用户名、密码:只能是字母(大小写)、数字、_。6-18位":request.getAttribute("msg")%>
</span>
</div>
<div class="form-item">
<div>
<label>用户密码:</label>
<input type="password" id="password" name="password" placeholder="请输入密码" />
</div>
<span class="errMess" id="passErrMess">只能是字母(大小写)、数字、_。6-18位</span>
</div>
<div class="form-item">
<div>
<label>确认密码:</label>
<input type="password" id="rePassword" name="rePassword" placeholder="请输入确认密码" />
</div>
<span class="errMess" id="rePasswordErrMess">密码两次输入不一致</span>
</div>
<div class="form-item">
<div>
<label>用户邮箱:</label>
<input type="text" id="email" name="email" placeholder="请输入邮箱" />
</div>
<span class="errMess" id="emailErrMess">请输入正确的邮箱格式</span>
</div>
<div class="form-item">
<div>
<label>验证码:</label>
<div class="verify">
<input type="text" id="verify" placeholder="" />
<img src="static/img/code.bmp" alt="" />
</div>
</div>
<span class="errMess" id="verifyErrMess">请输入正确的验证码</span>
</div>
<button class="btn" id="register">注册</button>
</form>
</div>
</div>
<div id="bottom">
<span>
尚硅谷书城.Copyright ©2015
</span>
</div>
</body>
</html>
我们会发现,此时并没有效果。因为该<span>
标签默认是隐藏的。我们需要在js代码中,实现当msg存在时,也将<span>
标签设置为显示状态
第一步:我们先将处理注册页面的js文件register.js
修改为jsp文件,这样我们在该文件中也可以直接使用jsp相关的东西。而导入时直接使用jsp的包含动作,将对应的文件引入即可
修改register.js.jsp
文件,新增js代码,当页面刷新时,判断request域中是否有msg属性,有表示注册失败,需要将<span>
标签设置为显示状态
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<script type="text/javascript">
$(function () {
/**
* 校验request域中是否有msg属性
*/
<%
Object msg = request.getAttribute("msg");
if (msg == null){
// request域中不存在对应错误信息
}else {
// request域中存在对应错误信息
%>
$("#userErrMess").css("visibility", "visible"); // 显示对应错误信息
<%}%>
/**
* 用户名校验
*/
function checkUsername() {
var reg = /^[a-zA-Z0-9_]{6,18}$/;
var userVaule = $("#username").val();
if (reg.test(userVaule) == false) {
$("#userErrMess").css("visibility", "visible");
return false;
} else {
$("#userErrMess").css("visibility", "hidden");
}
}
/**
* 密码校验
*/
function checkPassword() {
var reg = /^[a-zA-Z0-9_]{6,18}$/;
var passwordValue = $("#password").val();
if (reg.test(passwordValue) == false) {
$("#passErrMess").css("visibility", "visible");
return false;
} else {
$("#passErrMess").css("visibility", "hidden");
}
}
/**
* 确认密码
*/
function checkrePassword() {
var passwordValue = $("#password").val();
var rePasswordValue = $("#rePassword").val();
if (passwordValue != rePasswordValue) {
$("#rePasswordErrMess").css("visibility", "visible");
return false;
} else {
$("#rePasswordErrMess").css("visibility", "hidden");
}
}
/**
* 检查邮箱
*/
function checkEmail(){
var reg = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
var emailValue = $("#email").val();
if (reg.test(emailValue) == false){
$("#emailErrMess").css("visibility", "visible");
return false;
}else {
$("#emailErrMess").css("visibility", "hidden");
}
}
function checkVerify(){
var verifyValue = $("#verify").val();
if (verifyValue == ""){
$("#verifyErrMess").css("visibility", "visible");
return false;
}else {
$("#verifyErrMess").css("visibility", "hidden");
}
}
// 注册栏内容改变后校验
$("#username").change(checkUsername);
$("#password").change(checkPassword);
$("#rePassword").change(checkrePassword);
$("#email").change(checkEmail);
$("#verify").change(checkVerify);
// 注册按钮后校验
$("#register").click(checkUsername);
$("#register").click(checkPassword);
$("#register").click(checkrePassword);
$("#register").click(checkEmail);
$("#register").click(checkVerify);
})
</script>
效果如下:
但是现在还有一个问题,就是在这种情况下,当我们的重新输入的用户名校验不通过时,提示信息还是用户名已存在
,这是不符合逻辑的。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<script type="text/javascript">
$(function () {
/**
* 校验request域中是否有msg属性
*/
<%
Object msg = request.getAttribute("msg");
if (msg == null){
// request域中不存在对应错误信息
}else {
// request域中存在对应错误信息
%>
$("#userErrMess").css("visibility", "visible"); // 显示对应错误信息
<%}%>
/**
* 用户名校验
*/
function checkUsername() {
var reg = /^[a-zA-Z0-9_]{
6,18}$/;
var userVaule = $("#username").val();
if (reg.test(userVaule) == false) {
$("#userErrMess").text("用户名、密码:只能是字母(大小写)、数字、_。6-18位").css("visibility", "visible");
return false;
} else {
$("#userErrMess").css("visibility", "hidden");
}
}
/**
* 密码校验
*/
function checkPassword() {
var reg = /^[a-zA-Z0-9_]{
6,18}$/;
var passwordValue = $("#password").val();
if (reg.test(passwordValue) == false) {
$("#passErrMess").css("visibility", "visible");
return false;
} else {
$("#passErrMess").css("visibility", "hidden");
}
}
/**
* 确认密码
*/
function checkrePassword() {
var passwordValue = $("#password").val();
var rePasswordValue = $("#rePassword").val();
if (passwordValue != rePasswordValue) {
$("#rePasswordErrMess").css("visibility", "visible");
return false;
} else {
$("#rePasswordErrMess").css("visibility", "hidden");
}
}
/**
* 检查邮箱
*/
function checkEmail(){
var reg = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{
2,6})$/;
var emailValue = $("#email").val();
if (reg.test(emailValue) == false){
$("#emailErrMess").css("visibility", "visible");
return false;
}else {
$("#emailErrMess").css("visibility", "hidden");
}
}
function checkVerify(){
var verifyValue = $("#verify").val();
if (verifyValue == ""){
$("#verifyErrMess").css("visibility", "visible");
return false;
}else {
$("#verifyErrMess").css("visibility", "hidden");
}
}
// 注册栏内容改变后校验
$("#username").change(checkUsername);
$("#password").change(checkPassword);
$("#rePassword").change(checkrePassword);
$("#email").change(checkEmail);
$("#verify").change(checkVerify);
// 注册按钮后校验
$("#register").click(checkUsername);
$("#register").click(checkPassword);
$("#register").click(checkrePassword);
$("#register").click(checkEmail);
$("#register").click(checkVerify);
})
</script>
即注册失败后,之前的数据不要清除。
register.jsp
文件,实现表单回显功能<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
<%@ include file="/WEB-INF/public_jsp/base.jsp"%>
<meta charset="UTF-8" />
<title>尚硅谷会员注册页面</title>
<link type="text/css" rel="stylesheet" href="static/css/style.css" />
<link rel="stylesheet" href="static/css/register.css" />
<style type="text/css">
.login_form {
height: 420px;
margin-top: 25px;
}
</style>
<%@ include file="/static/script/regist.js.jsp"%>
<!--script type="text/javascript" src="static/script/regist.js.jsp"></script-->
</head>
<body>
<div id="login_header">
<a href="index.jsp">
<img class="logo_img" alt="" src="static/img/logo.gif" />
</a>
</div>
<div class="login_banner">
<div class="register_form">
<h1>注册尚硅谷会员</h1>
<form action="register">
<div class="form-item">
<div>
<label>用户名称:</label>
<!--根据请求参数中是否存在值,来判断是否需要回显-->
<input id="username" value="<%=request.getParameter("username")==null?"":request.getParameter("username")%>" type="text" name="username" placeholder="请输入用户名"/>
</div>
<!--根据request域中是否有错误提示,来判断使用哪个内容-->
<span class="errMess" id="userErrMess">
<%=request.getAttribute("msg")==null?"用户名、密码:只能是字母(大小写)、数字、_。6-18位":request.getAttribute("msg")%>
</span>
</div>
<div class="form-item">
<div>
<label>用户密码:</label>
<input type="password" value="<%=request.getParameter("password")==null?"":request.getParameter("password")%>" id="password" name="password" placeholder="请输入密码" />
</div>
<span class="errMess" id="passErrMess">只能是字母(大小写)、数字、_。6-18位</span>
</div>
<div class="form-item">
<div>
<label>确认密码:</label>
<input type="password" value="<%=request.getParameter("rePassword")==null?"":request.getParameter("rePpassword")%>" id="rePassword" name="rePassword" placeholder="请输入确认密码" />
</div>
<span class="errMess" id="rePasswordErrMess">密码两次输入不一致</span>
</div>
<div class="form-item">
<div>
<label>用户邮箱:</label>
<input type="text" value="<%=request.getParameter("email")==null?"":request.getParameter("email")%>" id="email" name="email" placeholder="请输入邮箱" />
</div>
<span class="errMess" id="emailErrMess">请输入正确的邮箱格式</span>
</div>
<div class="form-item">
<div>
<label>验证码:</label>
<div class="verify">
<input type="text" id="verify" placeholder="" />
<img src="static/img/code.bmp" alt="" />
</div>
</div>
<span class="errMess" id="verifyErrMess">请输入正确的验证码</span>
</div>
<button class="btn" id="register">注册</button>
</form>
</div>
</div>
<div id="bottom">
<span>
尚硅谷书城.Copyright ©2015
</span>
</div>
</body>
</html>
效果如下:
现在我们的项目是一个请求对应一个Servlet,我们能不能将多个请求对应一个Servlet呢?比如用户登录、注册的LoginServlet、RegistServlet使用一个UserServlet代替。
login.jsp
文件和regist.jsp
中添加一个隐藏的表单项,用来标识当前请求<form action="UserServlet">
<input type="hidden" name="method" value="login"/> <!--用来标识当前请求-->
<label>用户名称:</label>
<input
class="itxt"
type="text"
placeholder="请输入用户名"
autocomplete="off"
tabindex="1"
name="username"
id="username"
/>
<br />
<br />
<label>用户密码:</label>
<input
class="itxt"
type="password"
placeholder="请输入密码"
autocomplete="off"
tabindex="1"
name="password"
id="password"
/>
<br />
<br />
<input type="submit" value="登录" id="sub_btn" />
</form>
<form action="UserServlet">
<input type="hidden" name="method" value="register"/>
<div class="form-item">
<div>
<label>用户名称:</label>
<!--根据请求参数中是否存在值,来判断是否需要回显-->
<input id="username" value="<%=request.getParameter("username")==null?"":request.getParameter("username")%>" type="text" name="username" placeholder="请输入用户名"/>
</div>
<!--根据request域中是否有错误提示,来判断使用哪个内容-->
<span class="errMess" id="userErrMess">
<%=request.getAttribute("msg")==null?"用户名、密码:只能是字母(大小写)、数字、_。6-18位":request.getAttribute("msg")%>
</span>
</div>
<div class="form-item">
<div>
<label>用户密码:</label>
<input type="password" value="<%=request.getParameter("password")==null?"":request.getParameter("password")%>" id="password" name="password" placeholder="请输入密码" />
</div>
<span class="errMess" id="passErrMess">只能是字母(大小写)、数字、_。6-18位</span>
</div>
<div class="form-item">
<div>
<label>确认密码:</label>
<input type="password" value="<%=request.getParameter("rePassword")==null?"":request.getParameter("rePpassword")%>" id="rePassword" name="rePassword" placeholder="请输入确认密码" />
</div>
<span class="errMess" id="rePasswordErrMess">密码两次输入不一致</span>
</div>
<div class="form-item">
<div>
<label>用户邮箱:</label>
<input type="text" value="<%=request.getParameter("email")==null?"":request.getParameter("email")%>" id="email" name="email" placeholder="请输入邮箱" />
</div>
<span class="errMess" id="emailErrMess">请输入正确的邮箱格式</span>
</div>
<div class="form-item">
<div>
<label>验证码:</label>
<div class="verify">
<input type="text" id="verify" placeholder="" />
<img src="static/img/code.bmp" alt="" />
</div>
</div>
<span class="errMess" id="verifyErrMess">请输入正确的验证码</span>
</div>
<button class="btn" id="register">注册</button>
</form>
package com.bookstore.servlet;
import com.bookstore.bean.User;
import com.bookstore.service.UserServices;
import com.bookstore.service.impl.UserservicesImpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
@WebServlet(name = "UserServlet", value = "/UserServlet")
public class UserServlet extends HttpServlet {
private UserServices userservices = new UserservicesImpl();
/**
* 处理用户登录请求
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户名,密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 检查用户名密码是否正确
User userOld = new User();
userOld.setUsername(username);
userOld.setPassword(password);
User loginUser = userservices.login(userOld);
if (loginUser != null) {
// 用户名密码正确
response.sendRedirect("/bookStore2/pages/user/login_success.jsp");
} else {
// 用户名密码不正确
request.setAttribute("msg","用户名或密码错误,请重新输入"); // 将提示内容写入request域中
request.getRequestDispatcher("/pages/user/login.jsp").forward(request, response);
}
}
/**
* 处理用户注册请求
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
User user = new User(null,username,password,email);
UserservicesImpl userservices = new UserservicesImpl();
boolean registFag = userservices.regist(user);
if (registFag){
response.sendRedirect("/bookStore2/pages/user/regist_success.jsp");
}else {
request.setAttribute("msg","用户名已存在");
request.getRequestDispatcher("/pages/user/regist.jsp").forward(request,response);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getParameter("method");
if (method.equals("login")){
login(request,response);
}else if (method.equals("register")){
login(request,response);
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
修改UserServlet来使用反射处理登录注册请求:
package com.bookstore.servlet;
import com.bookstore.bean.User;
import com.bookstore.service.UserServices;
import com.bookstore.service.impl.UserservicesImpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@WebServlet(name = "UserServlet", value = "/UserServlet")
public class UserServlet extends HttpServlet {
private UserServices userservices = new UserservicesImpl();
/**
* 处理用户登录请求
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户名,密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 检查用户名密码是否正确
User userOld = new User();
userOld.setUsername(username);
userOld.setPassword(password);
User loginUser = userservices.login(userOld);
if (loginUser != null) {
// 用户名密码正确
response.sendRedirect("/bookStore2/pages/user/login_success.jsp");
} else {
// 用户名密码不正确
request.setAttribute("msg","用户名或密码错误,请重新输入"); // 将提示内容写入request域中
request.getRequestDispatcher("/pages/user/login.jsp").forward(request, response);
}
}
/**
* 处理用户注册请求
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
User user = new User(null,username,password,email);
UserservicesImpl userservices = new UserservicesImpl();
boolean registFag = userservices.regist(user);
if (registFag){
response.sendRedirect("/bookStore2/pages/user/regist_success.jsp");
}else {
request.setAttribute("msg","用户名已存在");
request.getRequestDispatcher("/pages/user/regist.jsp").forward(request,response);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 获取请求的method参数值
String method = request.getParameter("method");
// 根据参数名获取方法对象
Method declaredMethod = this.getClass().getDeclaredMethod(method, HttpServletRequest.class, HttpServletResponse.class);
declaredMethod.setAccessible(true);
// 调用方法
declaredMethod.invoke(this, request, response);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
创建一个BaseServlet
用来提供公共的doGet()
和doPost()
方法:
package com.bookstore.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* 公共的BaseServlet
*/
//@WebServlet(name = "BaseServlet", value = "/BaseServlet") // 该Servlet不需要注册url
public class BaseServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
// 获取请求的method参数值
String method = request.getParameter("method");
// 根据参数名获取方法对象
Method declaredMethod = this.getClass().getDeclaredMethod(method, HttpServletRequest.class, HttpServletResponse.class);
declaredMethod.setAccessible(true);
// 调用方法
declaredMethod.invoke(this, request, response);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request,response);
}
}
在UserServlet中集成BaseServlet即可,不需要再重新doGet()
和doPost()
方法:
package com.bookstore.servlet;
import com.bookstore.bean.User;
import com.bookstore.service.UserServices;
import com.bookstore.service.impl.UserservicesImpl;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@WebServlet(name = "UserServlet", value = "/UserServlet")
public class UserServlet extends BaseServlet {
private UserServices userservices = new UserservicesImpl();
/**
* 处理用户登录请求
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取用户名,密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 检查用户名密码是否正确
User userOld = new User();
userOld.setUsername(username);
userOld.setPassword(password);
User loginUser = userservices.login(userOld);
if (loginUser != null) {
// 用户名密码正确
response.sendRedirect("/bookStore2/pages/user/login_success.jsp");
} else {
// 用户名密码不正确
request.setAttribute("msg","用户名或密码错误,请重新输入"); // 将提示内容写入request域中
request.getRequestDispatcher("/pages/user/login.jsp").forward(request, response);
}
}
/**
* 处理用户注册请求
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
protected void register(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
String email = request.getParameter("email");
User user = new User(null,username,password,email);
UserservicesImpl userservices = new UserservicesImpl();
boolean registFag = userservices.regist(user);
if (registFag){
response.sendRedirect("/bookStore2/pages/user/regist_success.jsp");
}else {
request.setAttribute("msg","用户名已存在");
request.getRequestDispatcher("/pages/user/regist.jsp").forward(request,response);
}
}
}
话题编程catkin_make :stds.msg/String.h: 没有那个文件或目录解决:修改cmake.list 未成功
在安装集群软件时候遇到组id不一致出现的错误。相信信息如下: Group Existence: oinstall - This is a prerequisite condition to test ...
HTTP简介HTTP(Hyper Text Transfer Protocol)协议即超文本传输协议,它规定了浏览器和万维网服务器之间互相通信的规则。HTTP/1.1协议中共定义了八种方法来表明Request-URI指定的资源的不同操作方式。其中最常用的两种请求方式是GET和 POST。GET方式与POST方式的区别•GET方式以实体的方式得到由请求URL所指向的资源信息,向服务器提交的参数跟在请求URL后面。使用GET方式访问网络URL的长度是有限制的,请求URL的长度要小于1K。•POST
转载自:http://space.itpub.net/519536/viewspace-571504本文通过一个最简单的oracle存储过程"proc_helloworld"的实验,展现一下存储过程的开发和维护过程,适合超超超级初学小牛(like me)。1.编写。编写一个最最简单的存储过程,给它起个名字叫做proc_helloworldCREATE OR REPLACE PR
检查虚拟机的IP是否和本机IP一样
0、Confluence简介 Confluence是一个企业级的Wiki软件,可用于在企业、部门、团队内部进行信息共享和协同编辑。 1、基础概念 Confluence的使用并不复杂,只需掌握如下几个基础概念。 空间(Space) 空间是Confluence系统中的一个区域,用于存储wiki页面,并可实现对空间中的所有文档进行统一...
经过了多年的研发探索,TSINGSEE青犀视频团队开发了三种不同的视频流媒体服务器软件EasyNVR,EasyGBS,EasyDSS,三个平台都可以进行网页无插件直播,有很好的稳定性和可靠性,同时我们也有自己的网页播放器EasyPlayer.js,能够很好地集成在页面内。EasyPlayer.js可以播放不同格式的视频流,但我们发现测试m3u8时出现错误无法播放,报错信息为:net::ERR_EMPTY_RESPONSE我们将该视频流放在VLC中观看,视频流是正常的,数据请求也没发现丢包或者解析
第六章 PX4-Sensors解析 这一章节并不难,也很容易理解,但是这一章节有几个函数需要我们去理解一下,所以这里我们这里写一章来说明一下。Sensors是所有传感器进行数据组合,就是拿到传感器的原始数据进行组合在一个结构体中方便订阅使用。 Sensors的启动时在rc.sensors的脚本文件中,在启动所有传感器之后最后一步启动了
一.频点 蓝牙工作在 2.4g 的公用频段,分为 79 个频点进行跳频工作。每个频点 1M 带宽,从2402MHZ—2480MHZ. 二.发射模式 蓝牙发射模式分 3 种 1. vco 发射模式。让蓝牙在某个固定频点发射无调制的射频信号。 2. continues 模式,让蓝牙在某个固定频点持续发射调制信号。 3. burst 模式,让蓝牙在某个频点或者跳频发射相应的包类型的调制信号 一...
Dalvik运行环境使用JIT(Just-In-Time)来进行转译,应用每次运行的时候,字节码都需要通过JIT转换为机器码,这会拖慢应用的运行效率。而ART则是使用AOT进行处理(Ahead-Of-Time),并会在应用程序安装完毕时,进行预先的基础性编译作业,这就减去了JIT运行时的机器码转化时间,应用的启动和执行都会变得更加快速。
NestedScrolling作用解决嵌套滑动比ViewGroup事件分发处理的优越性事件分发:子View首先得到事件处理权,处理过程中,父View可以对其拦截,但是拦截了以后就无法再还给子View(本次手势内)。NestedScrolling:内部View在滚动的时候,首先将dx,dy交给NestedScrollingParent,NestedScrollingParent可对其...
1 通过ifconfig查询虚拟机的ip地址没有了2 重启网卡报以下错误connecton activation failed:Device not managed by NetwordManager or unavailable3 查看NetworkManager服务是否启动ps aux |grep NetworkManager4 启动该网络管理程序servic