你如何混淆java与HTML和JavaScript?

时间:2013-01-24 12:46:19

标签: java jsp servlets httprequest scriptlet

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

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

2 个答案:

答案 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,您可以了解有关表达语言的更多信息 可能需要一段时间后我可以改进这一点并为您提供更多见解。希望有所帮助:)