我有一个小java项目,我必须使用jsp文件 我有一个带登录按钮的html触发以下功能:
var loginCall = "user/login";
var logoutCall = "user/logout";
var signupCall = "user/signup";
function login() {
var login = baseUrl + loginCall + "?";
var loginFormElements = document.forms.loginForm.elements;
login = addParam(login, USER_NAME, loginFormElements.userName.value, false);
login = addParam(login, PASSWORD, loginFormElements.password.value, true);
simpleHttpRequest(login, function(responseText){
var status = evalJSON(responseText);
if (status.errorCode == 200) {
var res = status.results;
var sessionId = res[0].sessionId;
setCookie(SESSION_ID,sessionId);
window.location="http://localhost:8080/"+baseUrl+"/main.html";
} else {
showError(status.errorCode, "Username or password was incorrect.")
}
}, function(status, statusText){console.log('z');
showError(status, statusText);
});
}
据我所知,创建了一个httpRequest,并将数据发送到baseUrl + loginCall,这意味着localhost / something / user / login?name = somename& pass = somepass
这就是我被困住的地方,我是否必须以某种方式在某处创建一个java文件,它接收请求信息,与数据库一起工作并返回答案?
如果是的话,在哪里,怎么样?我必须将其命名为login / user.java吗?
如果没有给我一些代码示例或解释我接下来要做什么,有人能指出正确的方向吗?
答案 0 :(得分:1)
您需要再看一下JSP MVC jsp页面应该包含html和javascript以及java代码。如果要调用单独的.java类,则需要将该类编写为servlet,然后调用它。
所以在你的.jsp中你有html和javascript,就像你拥有它一样,那么你在这些括号中包含的任何java< %%>
在这里查看教程http://www.jsptut.com/
我看到你在做一个登录页面。我使用这个精彩的教程来创建一个登录系统,这有助于我理解jsp和servlet是如何工作的。 http://met.guc.edu.eg/OnlineTutorials/JSP%20-%20Servlets/Full%20Login%20Example.aspx
另请查看此图片,以帮助您理解概念。记住servlet是纯java类,主要用于java但也可以输出html,jsp主要用于html(& javascript)但可以包含jsp。因此servlet完成工作,然后jsp获取计算值,以便JavaScript可以使用它们。无论如何,我是怎么想的,可能是错的 http://met.guc.edu.eg/OnlineTutorials/static/article_media/jsp%20-%20servlets/LoginExample%20 [4] .JPG
一切顺利
答案 1 :(得分:0)
如果您没有使用任何MVC框架,那么最好的方法是扩展HttpServlet
类来处理请求并执行所有繁重的任务,例如业务逻辑处理,访问/更新数据库等,然后调度请求.jsp
。.jsp
。您还可以添加自定义对象以请求您希望在“.jsp”页面上访问的范围+使用表达式语言可以访问大多数与请求相关的隐式对象< / p>
我简要介绍了一个典型的流程示例。您可以自己深入了解并深入探索。
这是将处理已发布表单的java servlet类。
public class doLogin extends HttpServlet{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException {
String username= request.getParameter("username"); // get username/pasword from form
String password = request.getParameter("password");
// This is your imaginary method for checking user authentication from database
if(checkUserAuthentication(username,password)){
/*
user is authenticated.Now fetch data for user to be shown on homepage
User is another class that holds user info. Initialize it with data received from database
*/
user userData = new User;
user.setName(...);
user.setAge(...);
user.setInfo(...);
// etc
}
RequestDispatcher view = req.getRequestDispatcher("login.jsp");
req.setAttribute("userdata", userData); // set user object in current request scope
view.forward(req, resp);//forward to login.jsp
}
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException {
}
但您需要一个表单,其中有一些操作可以调用上面的ServletClass
<form action="/checkLogin" method="POST">
<input type="text" name="username" value="">
<input type="password" name="password" value="">
<input type="submit" name="login" value="Login">
</form>
告诉您的Servlet容器在表单登录按钮上单击调用doLogin
类
您必须在部署描述符文件web.xml
中配置它,它是java中标准动态Web应用程序的一部分
在web.xml' following xml snippet make apllication server aware of
doLogin`类
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.yourdomain.doLogin</servlet-class>
</servlet>
但它尚未映射到任何网址,它在<servlet-mapping>
web.xml
部分配置如下
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/checkLogin</url-pattern>
</servlet-mapping>
现在对网址/checkLogin
的任何发布请求都会在doPost
类上隐藏doLogin
方法
成功登录后,请求将被转移到'login.jsp'页面。
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
您可以使用sciptlet <% %>
语法中的java代码来访问userData
对象
&LT;%
用户数据=(用户)request.getAttribute('userData');
%GT;
更好和整洁的方法是使用表达式语言
${ pageContext.request.userData.name }
上面的表达式使用java bean naming conventions
在User类的对象上调用getName()方法Here,您可以了解有关表达语言的更多信息 可能需要一段时间后我可以改进这一点并为您提供更多见解。希望有所帮助:)