0

我有这个小 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 吗?

谁能指出我正确的方向,如果不给我一些代码示例或解释我接下来要做什么?

4

2 回答 2

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

祝一切顺利

于 2013-01-24T13:02:02.493 回答
0

如果您没有使用任何 MVC 框架,那么最好的方法是扩展HttpServlet类以处理请求并执行所有繁重的任务,例如业务逻辑处理、访问/更新数据库等,然后将请求分派到.jsp文件以进行演示。在.jsp您还可以将自定义对象添加到您希望在“.jsp”页面上访问的请求范围 + 使用表达式语言您可以访问大多数与请求相关的隐式对象

我简单举了一个典型的flow的例子,你可以自己去深入思考和探索。

这是处理已发布表单的 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 ofdoLogin` 类中

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.yourdomain.doLogin</servlet-class>
</servlet>

<servlet-mapping>但它还没有映射到任何 url,它的配置如下web.xml

<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/checkLogin</url-pattern>
</servlet-mapping>

现在任何对 url 的发布请求都/checkLogindoPost在类上调用方法doLogin成功登录请求后将被传输到“login.jsp”页面。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

您可以使用 sciptlet<% %>语法中的 java 代码来访问userDataobject <% User data = (User)request.getAttribute('userData'); %>

更好更整洁的方法是使用表达语言

${ pageContext.request.userData.name } 

上面的表达式使用 java beans命名约定在 User 类的对象上调用 getName() 方法

在这里,您可以了解更多关于表达语言的知识。可能过一段时间我可以改进这一点并为您提供更多见解。希望对您有所帮助:)

于 2013-01-24T14:01:54.883 回答