zoukankan      html  css  js  c++  java
  • strut2学习笔记

    学习struts2步骤:

    1.先在慕课网上找了struts2相关的视频看完,视频:struts2拦截器浅析

    2.根据视频讲解,做了登录验证,(看了视频,能对struts2的功能作用有一定的了解)

    3.写了些strut2的示例,加强理解

    需要:tomcat ,maven提前配好,使用的是eclipse开发工具

    struts2:新建maven项目--配置pom.xml--配置web.xml--配置struts.xml,log4j.properties--java代码--jsp代码

    maven运行配置:

      Goals:tomcat7:run

      Profiles:strutsProject

    项目名:strutsProject

    配置文件:

    pom.xml

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>strutsProject</groupId> <artifactId>strutsProject</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <name>strutsProject Maven Webapp</name> <!-- FIXME change it to the project's website --> <url>http://www.example.com</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.7</maven.compiler.source> <maven.compiler.target>1.7</maven.compiler.target> <struts2.version>2.5.14.1</struts2.version> <jstl-version>1.2</jstl-version> </properties> <dependencies> <!-- Junit依赖 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <!-- struts2核心jar包 --> <dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>${struts2.version}</version> </dependency> <!--action使用 EL表达式 --> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl-version}</version> </dependency> <!-- log4j 日志 --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.7.10</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.10</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.10</version> </dependency> </dependencies> <build> <finalName>strutsProject</finalName> <plugins> <!-- 统一源代码编译输出的JDK版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <!-- 打包时跳过单元测试 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <version>2.19.1</version> <configuration> <skipTests>true</skipTests> </configuration> </plugin> <!-- 集成Tomcat插件 --> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <path>/${project.artifactId}</path> </configuration> </plugin> </plugins> </build> </project>
    web.xml:

    <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
    <display-name>strutsProject</display-name>
    <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list>
    <!-- 配置StrutsPrepareAndExecuteFilter核心控制器 --> <filter> <!-- 过滤器名 --> <filter-name>struts2</filter-name> <!-- StrutsPrepareAndExecuteFilter核心控制器的实现类 --> <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <!-- 过滤器名 --> <filter-name>struts2</filter-name> <!-- 过滤器过滤所有请求 --> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
    struts.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd"> <struts> <!-- 指定访问Struts2的后缀,默认是action --> <constant name="struts.action.extension" value="action"/> <constant name="struts.enable.DynamicMethodInvocation" value="false"></constant> <!-- 开发者模式关闭 -->
       <constant name="struts.devMode" value="false" /> <!--因为登录和访问权限拦截是全局的, 拦截返回的结果有些也是全局的 ,定义了自己的package以便引用 --> <package name="struts-my" extends="struts-default"> <!-- 注册拦截器 --> <interceptors > <!--判断是否有登录和访问权限 --> <interceptor name="auth" class="org.struts.action.AuthInterceptor"></interceptor> <!--自定义拦截器栈 mystack --> <interceptor-stack name="mystack"> <interceptor-ref name="defaultStack"></interceptor-ref> <interceptor-ref name="auth"></interceptor-ref> </interceptor-stack> </interceptors> <!-- 拦截返回的结果有些也是全局的 --> <default-interceptor-ref name="mystack"></default-interceptor-ref> <!-- 全局结果 --> <global-results> <!-- 拦截没登录返回结果 --> <result name="login" type="redirect">/login.jsp</result> <!-- 拦截没有权限返回结果 --> <result name="noPower" type="redirect">/no_power.jsp</result> </global-results> </package>
      <!-- 以下action 是一些示例调用需要访问的 --> <package name="project" namespace="/" extends="struts-my" > <action name="index"> <result>/index.jsp</result> </action> <action name="hello" class="org.struts.action.HelloeWorldAction" method="execute"> <result>/register.jsp</result> </action> <action name="resigter" class="org.struts.action.ResigterAction" method="execute"> <result>/helloWorld.jsp</result> </action> <!-- 登录不需要拦截(或者其它不需要拦截的) 让它们的拦截器继承defaultStack 局部权限高于全局定义的,它们的拦截器栈就是默认的,不是自定义的。 --> <action name="login" class="org.struts.action.LoginAction" method="login"> <result>/WEB-INF/manager.jsp</result> <result name="error">/login.jsp</result> <interceptor-ref name="defaultStack"></interceptor-ref> </action> <!-- 通过 此Action访问后台管理页面,需要判断用户是否已登录,如果未登录,则跳转到登录页面--> <action name="auth" > <result >/WEB-INF/manager.jsp</result> <result name="login" >/login.jsp</result> <!-- 应用自定义的拦截器栈 --> <interceptor-ref name="mystack"></interceptor-ref> </action> <action name="methods_*" class="org.struts.action.MethodCheck" method="{1}"> <result name="save">/Check.jsp</result> <result name="update">/Check.jsp</result> <result name="modify">/Check.jsp</result> <result name="input">/methodSubmit.jsp</result> <!-- struts2.3以后,需要调用的方法,都要配置一下 --> <allowed-methods>save,update,modify</allowed-methods> </action> <action name="demo" class="org.struts.action.DemoAction" > <result name="demo">/demo.jsp</result> </action> <action name="book" class="org.struts.bookaction.BookAction" method="execute"> <result name="books">/books.jsp</result> </action> <action name="test" class="org.struts.bookaction.TestAction" method="execute"> <result name="test">/test.jsp</result> </action> </package> </struts>
    log4j.properties


    ### set log levels - for more verbose logging change 'info' to 'debug' ### #log4j.rootLogger= DEBUG,stdout log4j.rootLogger= ERROR ### direct log messages to stdout ### log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n # MyBatis logging configuration... #log4j.logger.net.cxp.blog.dao=DEBUG,CONSOLE,ERROR #sql log4j.logger.com.ibatis=DEBUG log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG log4j.logger.org.mybatis=DEBUG log4j.logger.java.sql.Connection=DEBUG log4j.logger.java.sql.Statement=DEBUG log4j.logger.java.sql.PreparedStatement=DEBUG log4j.logger.java.sql.ResultSet=DEBUG ### direct messages to file mylog.log ### log4j.appender.file=org.apache.log4j.DailyRollingFileAppender log4j.appender.file.File=D:\log4j\king\basiscrm.log log4j.appender.file.File=../log4j/king/basiscrm.log log4j.appender.file.DatePattern='_'yyyy-MM-dd'.log' log4j.appender.file.layout=org.apache.log4j.PatternLayout log4j.appender.file.Append = true ## u8F93u51FADEBUGu7EA7u522Bu4EE5u4E0Au7684u65E5u5FD7 log4j.appender.file.Threshold = info,DEBUG,CONSOLE ## log4j.appender.file.Threshold = info,DEBUG,CONSOLE,ERROR log4j.appender.file.layout.ConversionPattern=%n%-d{MM-dd HH:mm:ss}-%C.%M()%n[%p]%m%n log4j.logger.com.ibatis=DEBUG #debug log log4j.appender.DEBUG = org.apache.log4j.DailyRollingFileAppender log4j.appender.DEBUG.File = ../log4j/king/debug/debug.log log4j.appender.DEBUG.DatePattern='_'yyyy-MM-dd'.log' log4j.appender.DEBUG.Append = true log4j.appender.DEBUG.Threshold = DEBUG log4j.appender.DEBUG.layout = org.apache.log4j.PatternLayout log4j.appender.DEBUG.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n #error log log4j.appender.D = org.apache.log4j.DailyRollingFileAppender log4j.appender.D.File = ../log4j/king/error/error.log log4j.appender.D.File.DatePattern='_'yyyy-MM-dd'.log' log4j.appender.D.Append = true log4j.appender.D.Threshold = ERROR log4j.appender.D.layout = org.apache.log4j.PatternLayout log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n </Configuration>
    package org.struts.action;
    
    import java.util.Map;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
    
    //自定义拦截器
    public class AuthInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { //通过下上文获取到session Map<String,Object> session=ActionContext.getContext().getSession(); if(session.get("loginInfo")!=null){//继续执行不拦截 String result=invocation.invoke(); return result; }else{ return "login"; } } }
    package org.struts.action;
    
    import java.util.Map;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    /**
    主要是为了验证Action作用域
    */
     
    public class DemoAction extends ActionSupport{
    
        private Map<String,Object> request;
        private Map<String,Object> session;
        private Map<String,Object> application;
        
        
        public DemoAction(){
            request=(Map<String, Object>) ActionContext.getContext().get("request");
            session=ActionContext.getContext().getSession();
            application=ActionContext.getContext().getApplication();
        
        }
        
        public String execute(){
            
            request.put("req", "req111");
            session.put("sess", "sess222");
            application.put("app", "app333");
    
            return "demo";
        }
    
    }
    package org.struts.action;
    
    import org.struts.model.MessageStore;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class HelloeWorldAction extends ActionSupport {
    
        private MessageStore messageStore;
        
        public String execute(){
            messageStore=new MessageStore();
            return SUCCESS;
            
        }
        public MessageStore getMessageStore(){
            return messageStore;
        }
    }
    package org.struts.action;
    
    import java.util.Map;
    
    import org.apache.struts2.interceptor.SessionAware;
    
    import com.opensymphony.xwork2.ActionSupport;
    /**
     * map怎么拿到的呢?通过实现接口SessionAware
     * @author lin.luo02
     *
     */
    public class LoginAction extends ActionSupport implements SessionAware{
        private String username;
        private String password;
        private Map<String ,Object> session;
        
        @Override
        public void setSession(Map<String, Object> session) {
                this.session=session;
            
            
        }
    
        //处理登录请求
        public String login(){
            if("admin".equals(username)&& "123".equals(password)){
                session.put("loginInfo", username);
                return SUCCESS;
                        
            }else{
                session.put("loginError", "用户名或者密码不正确");
                return ERROR;
            }
            
        }
    
        public String getUsername() {
            return username;
        }
    
    
        public void setUsername(String username) {
            this.username = username;
        }
    
    
        public String getPassword() {
            return password;
        }
    
    
        public void setPassword(String password) {
            this.password = password;
        }
        
        
    
    }
    package org.struts.action;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    /*
     * validate,在调用方法之前进行验证
     */
    public class MethodCheck extends ActionSupport{
        
        private String name;
        private String sex;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getSex() {
            return sex;
        }
        public void setSex(String sex) {
            this.sex = sex;
        }
        
        public String modify(){
            System.out.println("method modify......");
            return "modify";
        }
        
        public String save(){
            System.out.println("method save......");
            return "save";
        }
        
        
        
        public String update(){
            System.out.println("method update......");
            return "update";
        }
        /**
         * 数据验证
         */
        public void validateUpdate() {
            System.out.println("name:"+name+",sex:"+sex);
            if(this.name==null ||"".equals(this.name)){
                this.addFieldError("nameError", "姓名不能为空");
            }
            if(this.sex==null ||"".equals(this.sex)){
                this.addFieldError("sexError", "性别不能为空");
            }
        
        }
        
        
    
    }
    package org.struts.action;
    
    import org.struts.model.Resigter;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class ResigterAction extends ActionSupport {
        private Resigter resigter;
    
        public Resigter getResigter() {
            System.out.println(111);
            return resigter;
        }
    
        public void setResigter(Resigter resigter) {
            System.out.println(222);
            this.resigter = resigter;
        }
        
        public String execute(){    
            System.out.println(resigter.getPassword()+","+resigter.getUseraccount());
            return SUCCESS;
        }
    
    }
    package org.struts.bookaction;
    
    
    import java.util.LinkedList;
    import java.util.List;
    
    import org.struts.model.Book;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class BookAction extends ActionSupport{
        
        private List<Book> booklist;
    
        public List<Book> getBooklist() {
            return booklist;
        }
    
        public void setBooklist(List<Book> booklist) {
            this.booklist = booklist;
        }
        
        public String execute(){
            booklist=new LinkedList<Book>();
            booklist.add(new Book("html5","lin",58.6));
            booklist.add(new Book("css3","jac",60.5));
            return "books";
        }
        
        
    
    }
    package org.struts.bookaction;
    
    import com.opensymphony.xwork2.ActionContext;
    
    public class TestAction {
        private String message;
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
        
        public String execute(){
            ActionContext ac=ActionContext.getContext();
            ac.put("name", "007");
            return "test";
        }
    
    }
    package org.struts.model;
    
    public class Book {
        
        private String title;
        private String author;
        private double price;
        
        public String getTitle() {
            return title;
        }
        public void setTitle(String title) {
            this.title = title;
        }
        public String getAuthor() {
            return author;
        }
        public void setAuthor(String author) {
            this.author = author;
        }
        public double getPrice() {
            return price;
        }
        public void setPrice(double price) {
            this.price = price;
        }
        public Book(String title, String author, double price) {
            super();
            this.title = title;
            this.author = author;
            this.price = price;
        }
        public Book() {
            super();
        }
        
        
        
    
    }
    package org.struts.model;
    
    public class MessageStore {
        private String message;
        
        public void setMessage(String message) {
            this.message = message;
        }
    
        public MessageStore() {
            message = "Hello Struts User";
        }
    
        public String getMessage() {
            return message;
        }
    
    }
    package org.struts.model;
    
    public class Resigter {
        private String useraccount;
        private String password;
        
        public String getUseraccount() {
            return useraccount;
        }
        public void setUseraccount(String useraccount) {
            this.useraccount = useraccount;
        }
        public String getPassword() {
            return password;
        }
        public void setPassword(String password) {
            this.password = password;
        }
        public Resigter(String useraccount, String password) {
            super();
            this.useraccount = useraccount;
            this.password = password;
        }
        public Resigter() {
            
        }
        
        
    
    }

    jsp 页面代码

    books.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%@ taglib uri="/struts-tags"  prefix="s"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>books 集合显示</title>
    </head>
    <body>
        <p>EL</p>
        <c:forEach items="${booklist}" varStatus="i" var="item">
            <p>书名:${item.title }</p>
            <p>作者:${item.author }</p>
            <p>价格:${item.price }</p>
            <hr/>
        </c:forEach>
        <br><br/>
        <p>ONGL</p>
        <s:iterator value="booklist.{?#this.price > 35}">
                <s:property value="title" /> - $<s:property value="price" />
                <br>
        </s:iterator>
    
    </body>
    </html>

    Check.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    通过验证方法到达页面
    </body>
    </html>

    demo.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>action四大作用域</title>
    </head>
    <body>
        ${req }
        <br>
        ${sess }
        <br>
        ${app }
    </body>
    </html>

    helloWorld.jsp

    <!DOCTYPE html>
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
      <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Hello World!</title>
      </head>
      <body>
      	<!-- taglib指令告诉Servlet容器该页面将使用Struts2标签,并且这些标签前面会有一个s。
    	s:property 标签显示通过调用方法返回的值getMessageStore 的的HelloWorldAction  
    				控制器类。该方法返回一个MessageStore 对象。
    	通过将.message 值添加到value属性的messageStore部分,我们告诉Struts 2框架调用该 对象的getMessage 
    	方法MessageStore。			
    	getMessage 类的方法MessageStore返回一个String。它是由s:property 标签显示的字符串。		
    	 
    	   <h2><s:property value="messageStore.message" /></h2>
    	 -->
      
         <p>
            您的用户名为:<s:property value="resigter.useraccount"/>
        </p>
        <p>
            您的密码为:<s:property value="resigter.password"/>
        </p>
      </body>
    </html>
    

     index.jsp

    <!DOCTYPE html>
    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>StrutsProject Application - Welcome</title>
        </head>
        <body>
            <h1>Welcome To Struts 2!</h1>
            <p><a href="<s:url action='project/hello'/>">Hello World</a></p>
            ${req }
            <br>
            ${sess }
            <br>
            ${app }
            
        </body>
    </html>

    login.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h2>用户登录</h2>
        ${loginError}
        <form action="login.action" method="post">
            用户名:<input type="text" name="username">
            密码:<input type="password" name="password">
            <input type="submit" name="登录">
            
        </form>
    
    </body>
    </html>

    methodSubmit.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@ taglib uri="/struts-tags" prefix="s" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
        <h2>验证方法过滤</h2>
        <form action="${pageContext.request.contextPath}/methods_update.action" method="post">
            用户名:<input type="text" name="name"><s:fielderror fieldName="nameError"/><br/>
            性别:<input type="text" name="sex"><s:fielderror fieldName="sexError"/><br/>
            <input type="submit" name="提交">
            
        </form>
    
    </body>
    </html>

    register.jsp

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    
    <title>用户注册</title>
    </head>
    <body>
        <form action="resigter.action" method="post">
            username:<input type="text" name="resigter.useraccount"/><br/>
            password:<input type="password" name="resigter.password"/><br/>
            <input type="submit" value="注册"/><br/>
        </form>
    </body>
    </html>

    test.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>TestAction 字段显示</title>
    </head>
    <body>
        
        <p>消息:${message }</p>
        <p>名字:${name }</p>
    </body>
    </html>

    以上是关于一些struts2的示例,没有登录,访问文件时会跳转到:login.jsp页面,

    http://localhost:8080/strutsProject/login.jsp

  • 相关阅读:
    OpenCL、CUDA
    最小和最廉价的超级计算机,DIY的
    组装属于您自己的Tesla个人超级计算机
    多处理器系统
    开源项目Spark简介
    基于Cassandra的日志和分布式小文件存储系统【1】
    网络广告js备忘【2】
    网络广告js备忘【1】
    成功产品的意外
    Cassandra HBase和MongoDb性能比较
  • 原文地址:https://www.cnblogs.com/cjxns/p/11209415.html
Copyright © 2011-2022 走看看